在 WSL Ubuntu 上以后台方式运行 dockerd

在 WSL Ubuntu 上以后台方式运行 dockerd

我已将 Docker 安装到 WSL Ubuntu 20.04 发行版。为了使其运行,我需要:

sudo dockerd

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

在此处输入图片描述

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

答案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 的方法:

  1. 编辑sudoers文件以允许您的用户帐户启动 Docker 而无需输入密码:
    sudo visudo 
    
    添加此行:
    rmarusyk ALL=(ALL) NOPASSWD: /usr/bin/dockerd
    
    笔记:rmarusyk如果名称与屏幕截图中的名称不同,请务必更改为您希望 Docker 在其下运行的用户帐户。
  2. 编辑~/.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
    
    笔记:它几乎可以在任何地方添加,但将它放在文件末尾通常更“干净”,以便提前配置/加载/等等可能需要的任何内容。
  3. (可选)如果您希望运行 Docker 命令而不需要在它们前面添加 前缀sudo,您可以将您的用户帐户添加到docker组中:
    sudo usermod -a -G docker $USER
    
  4. 通过关闭终端、重新启动并检查 Docker 的状态来测试其是否有效:
    docker ps 
    
    笔记:随意使用任何 Docker 命令。

这应该可以满足你的需要

相关内容