我刚刚在 Windows 10(最新版本)上升级到 WSL2。我已经安装了最新版本的 Windows 版 Docker (19.03.13),并在 Ubuntu 18 映像上卸载并重新安装了 docker 引擎以匹配 Windows 版本。然而,与我使用 WSL 的经验不同,现在我发现我只能以 root 身份运行 docker 容器命令 - 所有内容都以 sudo 开头。否则,我会收到一条错误消息:“无法连接到位于 tcp://localhost:2375 的 Docker 守护进程。 docker 守护进程正在运行吗?”
我看到一篇文章提到 docker 守护进程以 root 身份运行,要以用户身份运行,你必须将自己添加到 docker 组。然而,这个组已经存在,将我自己添加到其中并没有修复它(我可能已经在其中了)。我看到一些帖子说你必须删除过时的符号链接,但这也没有帮助。
我确实遇到过一篇文章说 docker 实际上应该只以 root 身份运行,但我认为这实际上指的是生产环境。在开发环境中这样做似乎并不正常。如果有人能建议一种以普通用户身份运行 docker 的方法,我将不胜感激。
这是我在干净的 Win 10 / 11 机器上使用的一组步骤。结果是非 root Docker 在 WSL 中运行。
打开cmd.exe。
安装 WSL 的默认 Ubuntu 发行版
wsl --install
重新启动 Windows 计算机。
重启后即可看到 Ubuntu 安装程序。等待它完成,然后创建一个非 root 用户名/密码。
您的 cmd.exe 终端现在应该切换到 Ubuntu Linux 终端。
使用便捷脚本安装 Docker 引擎:
下载Docker安装脚本:
curl -fsSL https://get.docker.com -o get-docker.sh
运行 rootful Docker 安装脚本:
sudo sh get-docker.sh
安装uidmap包:
sudo apt-get install -y uidmap
运行Docker无根安装工具:
dockerd-rootless-setuptool.sh install
将 Docker 二进制文件添加到您的 PATH(对于当前会话):
export PATH=/usr/bin:$PATH
将 DOCKER_HOST 变量设置为指向无根 Docker 套接字(对于当前会话):
export DOCKER_HOST=unix:///run/user/1000/docker.sock
验证有根和无根 Docker 进程是否正在运行:
ps -aux | grep dockerd
停止以 root 模式运行的 Docker:
sudo systemctl stop docker
禁止 Docker 以 root 模式启动:
sudo systemctl disable docker
检查是否只有无根 Docker 进程正在运行(由当前用户拥有):
ps -aux | grep dockerd
通过运行 hello-world 容器来测试 rootless Docker:
sudo docker run hello-world
将 PATH 和 DOCKER_HOST 变量添加到 ~/.bashrc 以供将来的会话持久化:
echo 'export PATH=/usr/bin:$PATH' >> ~/.bashrc
echo 'export DOCKER_HOST=unix:///run/user/1000/docker.sock' >> ~/.bashrc