WSL2用docker daemon(不用桌面版本的)麻烦吗?

wsl2安装

按照微软的指导文档,安装基本没问题。

docker安装


sudo apt-get update # 更新内核
sudo apt-get install ca-certificates curl gnupg #安装依赖

# 导入 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# docker仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update # 更新内核

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo service docker start

# 安装docker
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

使用apt,替换 /etc/apt/sources.list,改成国内源即可加速,安装依赖,添加docker官方 GPG 密钥

至此,docker就可以用了! 比如:docker pull alpine

但是真的好用吗?

由于 docker.io 的访问不会那么流畅

几个踩坑点记录:

国内源替换,获得正常使用docker体验

$ cat /etc/docker/daemon.json
#在这里可以添加你喜欢的国内源:大公司的、一些云厂的
{
  "registry-mirrors": ["https://docker.xuanyuan.me"]
}

坑点:加速不可用

docker启动报错


sudo journalctl -u docker.service 

failed to start daemon: Error initializing network controller: error creating default "bridge" network: COMMAND_FAILED: 'python-nftables' failed: internal:0:0-0: Error: Could not process rule:  No such file or directory

临时解决:

{
  "registry-mirrors": ["..."],
  "experimental": true,
  "iptables": false
}

根据错误提示,卸载了nftable,安装python3-nftables,将会一直导致上诉docker启动报错

临时解决的  "experimental": true 不可用加速

需重装nftables 或者重启nftables(ubuntu的新的防火墙,替换fwd),使用nft命令查看,设置自动启动

<think> 根据用户查询和之前的对话历史,用户现在明确要解决“WSL2Docker守护进程无法启动”的问题。结合引用内容,我们需要整合解决方案。以下是关键步骤: 1. **问题根源分析**(根据引用[1][2][4]): - WSL2的Ubuntu默认没有`systemd`,因此不能使用`systemctl`管理服务(见引用[4]的报错示例)。 - 通过`apt install docker-ce`安装的Docker可能依赖`systemd`,导致无法启动(引用[2])。 - 官方推荐使用`get-docker.sh`脚本安装(引用[2])或Docker Desktop for Windows(引用[2][5])。 2. **解决方案**: - **方法1:使用官方脚本重装Docker(推荐)** 引用[2]提到`get-docker.sh`会以非systemd方式安装: ```bash curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh ``` 安装后启动命令为: ```bash sudo service docker start # 使用sysvinit方式启动 ``` - **方法2:修复iptables配置(引用[1])** 若已安装但启动失败(报错`Cannot connect to the Docker daemon`),需更新iptables: ```bash sudo update-alternatives --set iptables /usr/sbin/iptables-legacy sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy sudo service docker start ``` - **方法3:通过Docker Desktop管理(引用[2][5])** 直接安装Docker Desktop for Windows并启用WSL2集成: - 安装后打开Docker Desktop设置 → General → 勾选"Use the WSL 2 based engine"。 - 在Resources → WSL Integration中启用对应Ubuntu分发。 3. **验证与自启动配置**: - **验证运行**(引用[3][4]): ```bash docker run hello-world ``` - **设置自启动**(引用[1][5]): WSL2不支持`systemd`,需借助第三方工具(如`genie`)或Windows计划任务触发: ```bash # 在Ubuntu中创建启动脚本 echo "sudo service docker start" >> ~/.bashrc ``` 或使用开源工具如[wsl-systed](https://github.com/nullpo-head/wsl-distrod)(引用[5])。 4. **权限问题处理**(引用[4]): - 避免每次使用`sudo`,将用户加入docker组: ```bash sudo usermod -aG docker $USER newgrp docker # 立即生效 ``` ### 总结步骤 1. 优先尝试**重装Docker**(官方脚本)或修复**iptables**。 2. 考虑使用**Docker Desktop**简化管理。 3. 配置**自启动**和**用户权限**。 §§相关问题§§ 1. WSL2中如何配置Docker开机自启动? 2. Docker Desktop和WSL2集成的具体步骤是什么? 3. 如何解决`iptables`相关错误导致Docker启动失败? 4. 为什么WSL2不支持`systemd`?有哪些替代方案? [^1]: wsl2安装docker问题汇总及设置随系统自启动。解析:这个说明docker没有正常启动,这个原因主要是wsl2造成的,所以直接使用命令sudo service docker start是无法成功启动docker服务的,这里需要更新iptables的相关配置(具体为什么这样做我不太懂,只知道确实有效),具体可参考这里:解决WSL2的ubuntu20.04中安装docker出现无法连接的问题(Cannot connect to the Docker daemon)_wsl2安装ubuntu的docker不行-优快云博客 [^2]: docker wsl2启动不了_win10利用WSL2安装docker2种方式。注意:不同于完全linux虚拟机方式,WLS2下通过apt install docker-ce命令安装的docker无法启动,因为WSL2方式的ubuntu里面没有systemd。上述官方get-docker.sh安装的dockerdockerd进程是用ubuntu传统的init方式而非systemd启动的。3.2 Docker Desktop for windows方式 [^3]: WSL2配置docker。 3.设置wsl 2的Ubuntu访问docker root@afeicomputer:~# docker -v Command 'docker' not found, but can be installed with: apt install docker.io root@afeicomputer:~# [^4]: 解决 Docker 无法连接守护进程的问题。以下是一些常用的启动和管理 Docker 守护进程的代码示例: # 启动 Docker 守护进程 sudo systemctl start docker # 重启 Docker 守护进程 sudo systemctl restart docker # 停止 Docker 守护进程 sudo systemctl stop docker # 查看 Docker 守护进程状态 sudo systemctl status docker # 将用户添加到 docker 组 sudo usermod -aG docker $USER 最佳实践 定期检查 Docker 守护进程状态:使用 systemctl status docker 或 service docker status 命令定期检查 Docker 守护进程的运行状态,确保其正常工作。合理配置 Docker 权限:避免使用 sudo 执行所有 Docker 命令,将用户添加到 docker 组,提高使用便利性。备份重要配置文件:如 /etc/docker/daemon.json,在进行配置更改前备份,以防配置错误导致 Docker 无法正常工作。 常见问题 1. systemctl start docker 报错 System has not been booted with systemd as init system (PID 1). Can't operate. [^5]: 探索高效开发的新境界:WSL2 系统守护进程自动启动工具。在这个快速发展的技术世界里,高效的跨平台开发环境成为了开发者们的必需品。WSL2(Windows Subsystem for Linux 2)无疑是微软为开发者提供的一个强大的工具,它允许我们在Windows系统上无缝运行Linux环境。现在,有一款开源项目将WSL2的体验提升到了新的高度——通过自动启动系统守护进程,让WSL2更加贴近完整的Linux体验。 项目简介 </think>### 解决WSL2Docker守护进程无法启动的方法 根据引用内容,WSL2环境下Docker无法启动的核心原因是**缺少systemd支持**和**iptables配置问题**(引用[1][2][4])。以下是分步解决方案: --- #### 方法1:修复iptables配置(推荐优先尝试) 1. **更新iptables配置** ```bash sudo update-alternatives --set iptables /usr/sbin/iptables-legacy sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy ``` 2. **手动启动Docker服务** ```bash sudo service docker start # 使用sysvinit方式启动(引用[1]) ``` --- #### 方法2:重新安装Docker(适合首次安装失败) 1. **卸载现有Docker** ```bash sudo apt remove docker.io docker-ce sudo rm -rf /var/lib/docker ``` 2. **通过官方脚本安装** ```bash curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # 自动适配WSL2的init方式(引用[2]) ``` --- #### 方法3:使用Docker Desktop集成(最稳定方案) 1. **安装Docker Desktop for Windows** - 从[官网](https://www.docker.com/products/docker-desktop)下载安装包 - 安装时勾选 **"Enable WSL 2 Windows Features"**(引用[2]) 2. **启用WSL2后端** - 打开Docker Desktop → Settings → General → 勾选 **"Use the WSL 2 based engine"** - 在 **Resources → WSL Integration** 中启用你的Ubuntu分发(引用[5]) --- #### 权限问题处理(所有方法通用) ```bash sudo usermod -aG docker $USER # 将当前用户加入docker组(引用[4]) exec newgrp docker # 立即生效 ``` --- #### 验证是否成功 ```bash docker run --rm hello-world # 成功则显示Hello消息 ``` 输出应包含: `Hello from Docker! This message shows your installation appears to be working correctly.` --- ### 关键说明 1. **避免使用systemctl命令** WSL2不支持systemd,执行`sudo systemctl start docker`会报错: `System has not been booted with systemd...`(引用[4]) 2. **自启动配置** 在`~/.bashrc`末尾添加: ```bash if service docker status 2>&1 | grep -q "is not running"; then sudo service docker start >/dev/null 2>&1 fi ``` 或在Windows计划任务中创建开机启动任务(引用[5]) > **故障排查提示**:若仍失败,检查`/var/log/docker.log`中的错误日志,常见问题是缺少`cgroup`支持或内核版本过低(需WSL2内核≥4.19)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackie_05

oo

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值