在 WSL Ubuntu 上运行 dockerd 作为后台

Rom*_*syk 6 backup docker windows-subsystem-for-linux 20.04

我已将 Docker 安装到 WSL Ubuntu 20.04 distr。为了让它运行我需要:

sudo dockerd
Run Code Online (Sandbox Code Playgroud)

它运行但它阻止了我的终端选项卡。要使用容器,我需要打开第二个选项卡。我尝试使用sudo dockerd &- 它似乎在后台运行 dockerd,但是当我更改目录时,它会停止。

在此输入图像描述

如何在后台运行 dockerd 并在不停止的情况下更改目录?

Not*_*1ds 10

在 WSL Ubuntu 下运行 Docker Engine 守护进程(没有 Docker Desktop)的标准方法很简单:

sudo service docker start
Run Code Online (Sandbox Code Playgroud)

这可以处理它的守护进程以及许多其他任务。您可以通过检查来查看完整的脚本/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"
    
    Run Code Online (Sandbox Code Playgroud)

    就这样。您不需要对您的文件进行修改sudoers,因为wsl.exe -u root以 root 用户身份执行会话而无需密码。

    但绝对使用 your~/.bash_profile来实现此目的,而不是~/.bashrc. 前者仅针对登录shell 执行,但后者针对所有交互式 shell 执行,从而增加了额外的开销。

  • Windows 11 通过对 WSL 实例启动时要运行的服务进行特殊配置,使这一切变得更加容易(如果您可以升级)。只需sudo vi /etc/wsl.conf包含以下内容:

    [boot]
    command="service docker start"
    
    Run Code Online (Sandbox Code Playgroud)

    这只会在 Ubuntu 启动时执行一次。wsl --terminate Ubuntu如果使用或关闭实例wsl --shutdown,它将在您下次启动 Ubuntu 时再次运行。

    这些命令也以 root 身份运行,无需密码。

  • 如果您想在每次登录 Windows 时启动 Docker 引擎,请在 Windows 中创建一个“计划任务”,该任务在登录时运行并指向wsl.exe以下参数:-u root -e sh -c "service docker status || service docker start"