连接VSCode远程Docker容器所需的依赖?

6
如何连接到远程的Docker容器并在其中使用工具来编译和运行代码?以下是需要遵循的依赖项和步骤。我已经尝试按照此处的说明进行操作,但没有太大的成功:https://code.visualstudio.com/docs/remote/containers-advanced#_developing-inside-a-container-on-a-remote-docker-host 我的设置包括:
- 在主机上安装了VSCode,但未安装Docker,安装了SSH客户端,SSH密钥已就位。 - 在服务器上安装了VSCode、Docker、SSH客户端和服务器。 - 在服务器上已运行Docker容器。
主机可以通过VSCode使用“Remote Development Version: 0.17.0”扩展程序连接到服务器,并通过“Remote - SSH Version: 0.47.2”扩展程序进行连接。服务器可以通过VSCode使用“Remote Development Version: 0.17.0”扩展程序连接到Docker容器,并通过“Remote - Containers Version: 0.83.1”扩展程序进行连接。
如何将主机连接到正在运行的Docker容器?
更新1:我已经将以下行添加到我的“~/.config/Code/User/settings.json”文件中,该选项被标记为“未知配置设置”。
{
...
"docker.host":"tcp://localhost:23750",
...
}

在另一个终端窗口中运行此命令:
ssh -N -L localhost:23750:/var/run/docker.sock  <user>@<serveraddr>

现在我可以在 远程资源管理器 > 容器 > 其它容器 中看到正在运行的容器。但是,当尝试连接时,我会收到以下错误信息。

Setting up container with bc1700db049858ba20f1c830bbeff6d6a4e04de58a2b35a61df1016788bc07db
Docker returned an error code 127, signal null, message: Command failed: docker system info
/bin/sh: docker: command not found

如果需要的话,我可以在主机上安装Docker。但我不确定是否需要。 - nico
似乎在主机上需要安装Docker。请参考我的回答。 - nico
2个回答

2

因此,似乎必须在主机上安装Docker才能防止出现最后提到的错误。

注意:Docker服务不需要在主机上运行(systemctl disable docker

考虑到这一点,以下是步骤。

主机

  1. 安装Docker和SSH客户端
  2. 将您的用户添加到Docker组
  3. 安装VSCode
  4. 配置服务器
  5. (在下面的服务器配置之后):使用以下内容编辑~/.config/Code/User/settings.json
"docker.host":"tcp://localhost:23750",
  1. 服务器配置ssh密钥
  2. (每次重新启动后在终端上运行:ssh -N -L localhost:23750:/var/run/docker.sock <user>@<serveraddr>)
  3. 运行VSCode并安装Remote Development扩展。重启VSCode
  4. 现在你应该在VSCode的Remote explorer>Containers>Other Containers中看到正在运行的容器

服务器:

  1. 安装Docker和SSH服务器
  2. 安装VSCode(这可能不是服务器的要求)
  3. 将您的用户添加到docker组并启动容器

我们能够使用这个方法连接不同服务器上的Docker容器吗? - Jan33
@Jan33 直到最近的更新,是的。我的 Docker 和 VSCode 版本大约是从 2021 年 1 月左右。请注意,您必须在主机上安装 Docker 二进制文件。服务不需要运行,但 VSCode 需要 Docker 二进制文件。 - nico

0

我知道这个问题已经有答案了,但是今天在尝试设置时我偶然发现了这个。我发现我遇到的另一个问题似乎是我的本地SSH密钥没有被添加到代理中。我正在按照这里的说明进行操作。

我正在运行Windows 10版本1909 Build 18363.1082。

在执行ssh-add $Env:USERPROFILE\.ssh\id_rsa并重新启动ssh-agent后,我能够连接到远程容器,而无需使用您上面展示的ssh隧道方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接