安装与配置 Docker for liunx wsl
上一级页面:index-wsl
其中一种是原生Linux的,下文将其称为Docker for Linux
,安装见Docker install
前置工作
首先需要更改默认的iptable,这是因为wsl2不支持iptable-nft,改为使用传统的iptable
见docker无法在wsl2的ubuntu2004启动的问题
安装与配置 Docker for Linux
这种方式是原生Linux的,下文将其称为Docker for Linux
,安装过程见Docker install
推荐看这篇教程Ubuntu - Docker — 从入门到实践 (gitbook.io)
dokcer在wsl下的运行机制
原生linux安装docker方式和wsl2安装docker类似,区别在于WSL2下的linux不支持systemd。
在此linux机器下执行docker命令(docker命令为docker客户端),实质为客户端通过挂载的/var/run/docker.sock文件与windows里面的dockerd服务端进程通信。
如下图,我们在linux下重新启动linux下dockerd进程,linux模式下下载的busybox镜像又可以看到了,/var/run/docker.sock的时间戳也被更新了,
此时客户端通过/var/run/docker.sock文件与linux下的dockerd服务端通信。
可以手动启动docker服务,输入命令:service docker start
即可。
WSL2怎么查看Docker for Linux安装在哪
- 在WSL2里面执行
df -Th
,会发现增加了一些新的与docker有关的挂载点。
取消 service docker start 需要密码的机制
使用 service docker start 命令时, 需要使用 sudo 来执行. 而 sudo 需要输入密码. 阻碍了我们自动化开启 Docker.
下面使用 sudoers 文件配置使该命令不需要输入密码.
- 创建
/etc/sudoers.d/docker
文件 (!注意文件不可包含符号.
和符号~
) 否则不会生效
sudo vi /etc/sudoers.d/docker
- 将以下内容写入
/etc/sudoers.d/docker
# 用户($USER)在所有计算机(ALL)下可以使用root(root)的身份权限且不需要输入密码(NOPASSWD)来运行/usr/sbin/service(`which service`), 且限定参数为docker和一个任意参数(如:start,stop,status)
echo "$USER ALL=(root) NOPASSWD: `which service` docker *" | sudo tee /etc/sudoers.d/docker
- 根据 sudoers 的推荐设置, 修改
/etc/sudoers.d/docker
的权限,
sudo chmod 0440 /etc/sudoers.d/docker
配置 Docker 自启动
实现 Docker for Linux自启动的方式有很多,下面介绍三种方式
配置使用 systemd
因为本身 WSL 没有使用 systemd 管理服务, 我也没有选择这种方式. 如需了解, 请参阅: https://github.com/microsoft/WSL2-Linux-Kernel/issues/30
配置
~/.bashrc
或者/etc/profile
等文件
2.1 直接添加启动代码到 .bashrc
中, 每次启动终端都会运行一次, 比较多余.
echo "sudo service docker start" | tee -a ~/.bashrc >/dev/null
2.2 直接添加启动代码到 /etc/profile
中, 启动 WSL 时运行一次, 稍显合理.
echo "sudo service docker start" | tee -a /etc/profile >/dev/null
2.3 保持 /etc/profle
无污染,加启动代码加到 /etc/profile.d/docker.sh
中. bash 会在读取 /etc/profile
时自动加载 profile.d
下面的文件
# echo "service docker start" | tee -a ~/.bashrc >/dev/null
sudo touch /etc/profile.d/docker-start.sh && \
chmod 644 /etc/profile.d/docker-start.sh && \
echo "sudo service docker start" | tee -a /etc/profile.d/docker-start.sh >/dev/null
使用上面 3 种方式, 都可以使我们打开 WSL 时自动运行 Docker.
在开机之后, Docker 不会自动运行. 如果有服务依赖 Docker 的话, 我们仍需要手动打开 WSL.
建议使用下面介绍的方式.
wsl配置docker自启动
- 使用 Windows 的
任务计划
使用 Windows 的任务计划, 实现 Windows 开机之后自动执行 WSL 并使用命令启动 Docker 守护程序. 这样开机之后 Docker 便自动运行. 我们不需要再操心开启 Docker.
3.1 打开 task scheduler
3.2 创建新task
3.3 设置Task