本文最后更新于 2024-11-07,本文发布时间距今超过 90 天, 文章内容可能已经过时。最新内容请以官方内容为准

Vscode plugin docker cannot connect to docker

在 vscode 中,如果使用 docker 插件,在运行时,如果提示以下错误:

Failed to connect. Is docker running? Error: permission denied while trying to connect to the docker daemon socket…” 

表示 Visual Studio Code 的 Docker 插件无法连接到 Docker 守护进程,通常这是因为权限问题。

可以从以下来排查:

请检查 docker 是否已经启动,并且 docker 的 socket 地址是否正确。

  1. 确保 Docker 服务正在运行

    打开终端并运行以下命令来检查 Docker 是否正在运行:

    sudo systemctl status docker
    

    如果 Docker 没有运行,启动它:

    sudo systemctl start docker
    
  2. 检查 Docker 组

    要与 Docker 守护进程通信,你的用户需要属于 docker 组。检查你的用户是否已经在 docker 组中:

    groups
    

    如果有 docker 组了, 但是你的用户名没有出现在输出中,你需要将其添加到 docker 组:

     sudo usermod -aG docker $USER  # 将当前用户添加至 docker 用户组
     newgrp docker # 更新 docker 用户组
    

    如果没有 docker 组,可以通过以下命令创建:

    sudo groupadd docker          # 添加 docker 用户组
    sudo gpasswd -a $USER docker  # 将当前用户添加至 docker 用户组
    newgrp docker                 # 更新 docker 用户组
    

    完成后,重新登录或者重启计算机以使更改生效。

  3. 检查 Docker 守护进程套接字文件权限

    Docker 守护进程默认情况下使用一个 Unix 域套接字文件 /var/run/docker.sock 进行通信。确保你的用户有权限访问这个文件:

    ls -l /var/run/docker.sock
    

    你应该看到类似以下输出,其中 docker 组应该有读写权限:

    srw-rw---- 1 root docker 0 Mar 10 13:30 /var/run/docker.sock
    

    如果权限不对,你可以使用以下命令来设置正确的权限(通常不需要这样做,因为 Docker 安装时会自动设置):

    sudo chmod 666 /var/run/docker.sock
    

    请注意,设置 666 权限可能会带来安全风险,因为它允许任何用户与 Docker 守护进程通信。通常,确保用户在 docker 组中就足够了。

  4. 重启 Docker 服务

    在进行上述更改后,重启 Docker 服务以确保所有更改生效:

    sudo systemctl restart docker
    
  5. 重新加载 Visual Studio Code

    在完成上述步骤后,关闭并重新打开 Visual Studio Code,或者重新加载窗口(使用 Ctrl+Shift+P 打开命令面板,然后输入 Developer: Reload Window)。
    如果以上步骤仍然无法解决问题,请检查你的 Docker 插件的设置,确保没有其他配置错误,并且 Docker 插件是最新版本。此外,确保没有其他安全软件或系统配置阻止了与 Docker 守护进程的连接。