vscode 连接运行在远程服务器的容器时,会出现 docker socket 权限问题,错误为permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock。你可以通过以下步骤解决。

  1. 创建 docker 组(如果尚不存在) 通常,Docker 安装时会自动创建 docker 组。如果你的系统中没有这个组,可以手动创建:
1
2
3

sudo groupadd docker

  1. 将用户添加到 docker 组 假设你要添加的用户是 username,可以运行以下命令:
1
2
3

sudo usermod -aG docker username

  1. 重启 Docker 服务 有时候需要重启 Docker 服务使更改生效:
1
2
3

sudo systemctl restart docker

  1. 重新登录用户 为了使组更改生效,用户需要重新登录。可以通过注销并重新登录,或者在终端中使用以下命令:
1
2
3

newgrp docker

  1. 验证用户权限 登录用户后,运行以下命令来验证用户是否具有 Docker 访问权限:
1
2
3

docker run hello-world

如果一切正常,你应该会看到 Docker 成功运行 hello-world 容器的输出。以上步骤将用户添加到 docker 组中,使其具有访问 docker.sock 的权限,从而能够使用 Docker 命令。如果需要更严格的权限控制,可以考虑使用其他安全措施,如 Docker 的授权插件或 AppArmor 等。

  1. 如果你通过 vscode Remote 连接到服务器,可能 vscode 还是会报权限错误,问题的原因是 vscode 服务器仍在使用旧用户权限(没有 docker 组)运行。在远程计算机上终止相应的进程,然后重新加载 vscode 窗口,一切都应该无需重新启动即可正常工作。
1
2
3
4

$ ps aux|grep bin/code-server # find out process id
$ kill <process id>