在Bash On Windows(WSL)里使用Docker的方法

其实 Docker 是可以在 WSL 里用的哦=-=
似乎有许多人不知道怎样在 WSL 里使用 Docker ,阅读这篇文章之后你就会用啦。

其实非常简单,只要照着下面的步骤做就可以了。

首先安装 Docker Toolbox 或者 Docker For Windows
从官网上下载安装程序,然后一路下一步就好了。
后者需要先安装Hyper-V,完成后需要重启。如果你会安装WSL的话,一定知道怎么安装Hyper-V。

然后在WSL里安装Docker,根据官方文档添加软件源,刷新然后安装即可。
官方文档链接:https://docs.docker.com/install/linux/docker-ce/ubuntu/

完成后执行

sudo usermod -aG docker $USER

接下来到重点部分了。

进入 WSL,编辑 ~/.bashrc

vim ~/.bashrc

写上这些内容:

# 适用于 Docker For Windows
export DOCKER_HOST=tcp://127.0.0.1:2375

# 适用于 Docker Toolbox
#export DOCKER_TLS_VERIFY=1
#export DOCKER_HOST=tcp://192.168.99.100:2376
#export DOCKER_CERT_PATH=/mnt/c/Users/Nya/.docker/machine/certs

# 挂载 /mnt 下的目录到根目录下,让 WSL 和 Docker 的文件路径一致
if [ ! -d "/c" ] || [ ! "$(ls -A /c)" ]; then
  sudo mkdir -p /c
  sudo mount --bind /mnt/c /c
fi

if [ ! -d "/d" ] || [ ! "$(ls -A /d)" ]; then
  sudo mkdir -p /d
  sudo mount --bind /mnt/d /d
fi

# 根据实际情况补充……

# 判断当前是否位于 /mnt/*/ 目录下,如果是,则跳转到 /*/,同样根据实际情况补充……
if [ "$(pwd | cut -c -7)" == "/mnt/c/" ] || [ "$(pwd | cut -c -7)" == "/mnt/d/" ]; then
  cd "$(pwd | cut -c 5-)"
fi

因为这里用了 sudo,所以以后启动的时候都要输入一次密码……

所以可以设置一下 sudo 免密码:

sudo visudo

然后在文件末尾加上:

您的用户名 ALL=(ALL) NOPASSWD:ALL

输入 [ESC]ZZ 保存退出即可。

最后,如果用的是 Docker For Windows 的话,需要打开 Expose daemon on tcp://localhost:2375 without TLS 这个选项。
如果你用 Volume 的话,可别忘了共享磁盘。

到这里就结束了,这时候你已经可以在 WSL 里像 Linux 一样使用 Docker 了。

问答:

  1. 为什么不使用不需要权限的符号链接,而是 mount 呢?
    答:因为 Docker Volume 不支持符号链接。

  2. 是否可以使用 Docker Compose 之类的?
    答:当然。

  3. 是否可以使用相对路径?
    答:只要是能在Linux里做的,其实都可以> <

发表评论