我想在远程服务器的容器中工作。 但这不起作用。
环境:
本地:Windows 10
ssh的本地终端:Windows 10中的WSL
服务器:Ubuntu 18.04
我检查了这两篇文章。
https://code.visualstudio.com/docs/remote/containers-advanced https://code.visualstudio.com/docs/containers/ssh
我遵循了这些步骤。
答案 0 :(得分:5)
我按照https://florian-kriegel.de/blog/?p=234
中的步骤使用SSH隧道解决了此问题总结:
请注意,在这种情况下,不使用远程SSH扩展。
答案 1 :(得分:4)
这听起来可能很奇怪,但对我来说,在使用 VS Code 中的远程容器扩展之前,我必须在远程 SSH 服务器上打开一个文件夹。如果我不这样做,那么它会不断尝试查找本地运行的 docker 服务,即使终端选项卡已连接到远程 SSH 服务器。
这看起来很奇怪,因为如果你在 VS Code 中通过 SSH 连接,那么扩展应该假设你正在尝试连接到远程服务器上的容器。不必先打开远程文件夹。
通过在远程服务器上“打开一个文件夹”,远程容器扩展能够将 VS 代码附加到在远程 SSH 服务器上运行的容器。我不必执行任何这些文章中的任何步骤。只需简单地使用Remote SSH通过SSH远程连接VS Code,打开一个文件夹,然后使用Remote Containers。
答案 2 :(得分:2)
按照上面的步骤(https://stackoverflow.com/a/61728799/11687201),我弄清楚了如何利用SSH远程和远程资源管理器扩展。第一步与上面相同:
"docker.host": "tcp://localhost:23750"
LocalForward localhost:23750 /var/run/docker.sock
备注:以前,我使用此线程(https://stackoverflow.com/a/61728799/11687201)中前面介绍的解决方案。在解决下面描述的解决方案之前,我不得不重新启动本地计算机和远程计算机。
然后我必须使用多个VSCode Windows:
本地计算机:启动VSCode并使用“远程资源管理器”通过新的VSCode窗口连接到远程计算机
VSCode窗口已连接到远程(SSH)
→启动您选择的Docker容器
(我无法从此VSCode窗口“附加Visual Studio代码”)
VSCode窗口已连接到本地计算机
→单击“ Docker”扩展名,列出在远程运行的Docker容器。使用以下选项之一将VSCode附加到正在运行的容器:
将打开第三个VSCode窗口,将其附加到Docker容器。
(+)使用“远程资源管理器”扩展名,我可以一键直接连接并打开远程计算机上以前使用的项目文件夹
(-)需要3个VSCode窗口(本地计算机,远程ssh和远程容器),而不是2个VSCode窗口
答案 3 :(得分:0)
如果您可以通过SSH到达运行Docker引擎的远程节点,为什么在容器内还需要另一台SSH服务器?通过运行容器的主机,可以安全地使用tty,即attach。
我认为在容器内运行SSHD并不是一个好主意,尽管有可能。为了有用,SSHD必须侦听每个容器中的非冲突端口。否则,两个容器偶尔会在同一节点上暴露相同的端口,就会像在该节点上运行的任何其他服务一样发生冲突。
当然,可以使用-P选项将端口随机化,但这并不方便。与在主机级别由主机软件提供所有主机的主机级别相比,在容器级别管理密钥和用户也不太方便。
使用SSHD加载每个容器会增加容器的大小。在Kubernetes中,每个容器都可以通过Pod-> Container传递而无需在容器内运行任何SSHD,因为Pod具有IP并且容器可以通过ID附加,即``Docker-host-> container''
答案 4 :(得分:0)
第1步-远程计算机上的Docker守护程序
不支持从/etc/sysconfig
或其他地方读取文件来修改命令行。幸运的是,systemd为我们提供了更改此行为所需的工具。
最简单的解决方案可能是创建具有以下内容的文件/etc/systemd/system/docker.service.d/docker-external.conf
(确切的文件名无关紧要;只需以.conf结尾)即可。
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock
然后:
systemctl daemon-reload
systemctl restart docker
第3步-使用FirewallD打开Docker端口
firewall-cmd --permanent --zone=public --change-interface=docker0
firewall-cmd --permanent --zone=public --add-port=4243/tcp
firewall-cmd --reload
第4步-在VSCode的"docker.host": "tcp://localhost:4243"
中设置(或添加)settings.json
。
答案 5 :(得分:0)
我通过在本地计算机上切换到远程服务器的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!
之后:
对我有用。
(注意:有人认为我应该能够在切换本地上下文后使用本地VSCode(跳过步骤1)连接到所述远程容器,但是VSCode在Docker控制面板中抱怨Failed to connect. Is docker running?
)
答案 6 :(得分:0)
远程开发扩展现在可以处理一切;不需要解决方法。只需从 VS Code 内部通过 SSH 连接到您的远程机器,然后在那里安装 vs Code docker 扩展(它可以在扩展下找到)
答案 7 :(得分:-1)
出于某种原因,当我在尝试附加到容器之前在远程窗口中打开文件夹时,此问题已为我解决。