答案1
在 WSL Ubuntu 下运行 Docker Engine 守护程序(不使用 Docker Desktop)的标准方法很简单:
sudo service docker start
这将处理它的守护进程以及许多其他任务。您可以通过检查来查看完整脚本/etc/init.d/docker
。运行此脚本,而不是尝试手动复制启动过程。
如果您希望它自动启动,有以下几种选择:
您已经看到了修改启动脚本的其他答案。就我个人而言,我不太喜欢这种方法。首先,我喜欢尽可能精简启动脚本以获得最佳性能。其次,这样的修改往往会随着时间的推移而“积累”,使将来对 shell 进行故障排除更加困难。话虽如此,但对于 WSL 来说,这不是一个糟糕的选择,至少在 Windows 10 上是这样。
但是,如果您确实想走这条路,那么有一个比其他答案更简单的方法。只需将以下行添加到您的
~/.bash_profile
(因为听起来您正在使用 Bash):wsl.exe -u root -e sh -c "service docker status > /dev/null || service docker start"
就这些。您不需要对您的进行修改,
sudoers
因为wsl.exe -u root
以 root 用户身份执行会话而不需要密码。但一定要使用你的
~/.bash_profile
,而不是~/.bashrc
。前者仅用于登录shells,但后者针对所有交互式 shell 执行,从而增加了额外的开销。Windows 11 使这变得更加容易(如果您可以升级),因为它对您想要在 WSL 实例启动时运行的服务进行了特殊配置。只需
sudo vi /etc/wsl.conf
以下内容:[boot] command="service docker start"
wsl --terminate Ubuntu
这只会在 Ubuntu 启动时执行一次。如果使用或关闭实例wsl --shutdown
,它将在下次启动 Ubuntu 时再次运行。这些命令也可以以 root 身份运行,无需密码。
如果你想在登录 Windows 时启动 Docker Engine,请在 Windows 中创建一个“计划任务”,该任务在登录时运行并指向
wsl.exe
以下参数:-u root -e sh -c "service docker status || service docker start"
答案2
我见过人们这样做的唯一方法是在 VM 中运行 Docker(这似乎不是您正在考虑的选项)或运行在 WSL 启动时执行的脚本。
以下是在 WSL 启动时运行 Docker 的方法:
- 编辑
sudoers
文件以允许您的用户帐户启动 Docker 而无需输入密码:
添加此行:sudo visudo
笔记:rmarusyk ALL=(ALL) NOPASSWD: /usr/bin/dockerd
rmarusyk
如果名称与屏幕截图中的名称不同,请务必更改为您希望 Docker 在其下运行的用户帐户。 - 编辑
~/.bashrc
文件以检查 Docker 是否正在运行,如果没有运行,则启动它:
笔记:它几乎可以在任何地方添加,但将它放在文件末尾通常更“干净”,以便提前配置/加载/等等可能需要的任何内容。# Start Docker (if not already running) RUNNING=`ps aux | grep dockerd | grep -v grep` if [ -z "$RUNNING" ]; then sudo dockerd > /dev/null 2>&1 & disown fi
- (可选)如果您希望运行 Docker 命令而不需要在它们前面添加 前缀
sudo
,您可以将您的用户帐户添加到docker
组中:sudo usermod -a -G docker $USER
- 通过关闭终端、重新启动并检查 Docker 的状态来测试其是否有效:
笔记:随意使用任何 Docker 命令。docker ps
这应该可以满足你的需要