VS Code:连接远程服务器中的 docker 容器

Hak*_*Lee 27 docker vscode-remote

我想在远程服务器的容器中工作。但它不起作用。

环境:

本地:Windows 10

ssh 的本地终端:Windows 10 中的 WSL

服务器:Ubuntu 18.04

我查了这两篇文章。

https://code.visualstudio.com/docs/remote/containers-advanced https://code.visualstudio.com/docs/containers/ssh

我遵循了这些步骤。

  1. 我在 VS Code 中安装了 [Remote Development] 扩展。
  2. 远程 SSH:连接到主机。它工作正常。
  3. 我在远程服务器上安装了 [Docker] 扩展。
  4. 现在我可以在 docker 选项卡中看到我的容器和图像。
  5. 我单击了一个容器并单击了 [Attach Visual Studio Code],它说没有要附加到的正在运行的容器。

在此处输入图片说明

Dan*_*iel 10

我通过切换到本地机器上远程服务器的 Docker 上下文解决了这个问题:

docker context create some-context-label --docker "host=ssh://user@remote_server_ip"

docker context use some-context-label

docker ps
# A list of remote containers on my local machine! It works!
Run Code Online (Sandbox Code Playgroud)

在那之后:

  1. 通过远程 SSH 连接到容器服务器
  2. 右键单击相关容器->“附加 Visual Studio 代码”

这对我行得通。

(注意:有人会认为我应该能够在切换我的本地上下文后使用我的本地 VSCode(跳过步骤 1)连接到所述远程容器,但 VSCodeFailed to connect. Is docker running?在 Docker 控制面板中抱怨。)

  • 当我运行`docker ps`时出现以下错误:`连接期间错误:获取“http://docker.example.com/v1.24/containers/json?all=1”:fork/exec /usr/ bin/ssh:权限被拒绝`。有什么建议么?谢谢你! (4认同)

小智 7

我按照https://florian-kriegel.de/blog/?p=234 中的步骤使用 SSH 隧道解决了这个问题

总结:

  1. 在 VSCode 的 settings.json 中设置(或添加)"docker.host": "tcp://localhost:23750"。
  2. 在本地机器上打开这样的 SSH 隧道,通过远程机器(运行 docker 守护程序的地方)凭据更改用户和主机名:ssh -NL localhost:23750:/var/run/docker.sock user@hostname。
  3. 现在,在 docker 选项卡中,您将能够查看并附加到远程机器中的容器。

请注意,在这种情况下不使用远程 SSH 扩展。


Lew*_*uce 6

这听起来可能很奇怪,但对我来说,使用 VS Code 中的远程容器扩展之前,我必须在远程 SSH 服务器上打开一个文件夹。如果我不这样做,那么它会不断尝试查找本地运行的 docker 服务,即使终端选项卡已连接到远程 SSH 服务器。

这看起来很奇怪,因为如果你在 VS Code 中通过 SSH 连接,那么扩展应该假设你正在尝试连接到远程服务器上的容器。不必先打开远程文件夹。

通过在远程服务器上“打开一个文件夹”,远程容器扩展能够将 VS 代码附加到在远程 SSH 服务器上运行的容器。我不必执行任何这些文章中的任何步骤。只需简单地使用 Remote SSH 通过 SSH 远程连接 VS Code,打开一个文件夹,然后使用 Remote Containers。


ai2*_*2ys 5

在 Visual Studio Code 中使用“远程 SSH”和“远程资源管理器”扩展的解决方案。

按照上述步骤(/sf/answers/4321015961/),我想出了如何使用 SSH 远程和远程资源管理器扩展。第一步和上面一样:

  1. 在 VSCode 中打开 settings.json 文件,按 F1 并选择“>首选项:打开设置(JSON)”并添加/编辑以下行:
    "docker.host": "tcp://localhost:23750"
  2. 打开 ssh 配置文件,单击“远程资源管理器”扩展,然后单击“SSH 目标”“配置”按钮并打开 ssh 配置文件。将以下行添加到您的 ssh 连接:
    LocalForward localhost:23750 /var/run/docker.sock

备注:以前我使用了本线程前面描述的解决方案(/sf/answers/4321015961/)。在下面描述的解决方案解决之前,我不得不重新启动本地机器和远程机器。

之后我必须使用多个 VSCode Windows:

  1. 本地机器:启动 VSCode 并使用“远程资源管理器”使用新的 VSCode 窗口连接到远程机器

  2. VSCode 窗口连接到远程 (SSH)
    → 启动您选择的 Docker 容器
    (我无法从此 VSCode 窗口“附加 Visual Studio Code”)

  3. VSCode 窗口连接到本地机器
    → 点击“Docker”扩展,远程运行的 docker 容器被列出。使用以下选项之一将 VSCode 附加到正在运行的容器:

    • 右键单击所需的容器并选择“附加 Visual Studio 代码”
    • 按 F1 并选择“远程容器:附加到正在运行的容器...”,然后选择您选择的容器

    第三个 VSCode 窗口将打开并附加到 Docker 容器。

此解决方案的优缺点

(+) 使用“远程资源管理器”扩展我可以直接连接并在我的远程机器上一键打开以前使用过的项目文件夹

(-) 需要 3 个 VSCode 窗口(本地机器、远程 ssh 和远程容器)而不是 2 个 VSCode 窗口

  • @dasilvadaniel 使用最新版本的 VSCode,我不再需要定义“docker.host”和“LocalForward”。我只是使用远程扩展将 VSCode 连接到 ssh 远程。之后,我可以直接在所需 Docker 容器的 Docke 扩展中单击,然后选择“附加 Visual Studio Code”。 (2认同)