VS代码:连接远程服务器中的docker容器
我想在远程服务器的容器中工作。 但它不起作用 环境: 本地:Windows 10 Windows 10中ssh:WSL的本地终端 服务器:Ubuntu 18.04 我检查了这两篇文章 我遵循这些步骤VS代码:连接远程服务器中的docker容器,docker,vscode-remote,Docker,Vscode Remote,我想在远程服务器的容器中工作。 但它不起作用 环境: 本地:Windows 10 Windows 10中ssh:WSL的本地终端 服务器:Ubuntu 18.04 我检查了这两篇文章 我遵循这些步骤 我在VS代码中安装了[Remote Development]扩展 远程SSH:连接到主机。它很好用 我在远程服务器上安装了[Docker]扩展 现在我可以在docker选项卡中查看我的容器和图像 我单击了一个容器并单击了[AttachVisualStudioCode],它说没有运行中的容器可以连
我按照中的步骤使用SSH隧道解决此问题 总结:
“docker.host”:tcp://localhost:23750“
LocalForward localhost:23750/var/run/docker.sock
→ 启动您选择的Docker容器
(我无法从此VSCode窗口“附加Visual Studio代码”)
→ 单击“Docker”扩展,将列出远程服务器上运行的Docker容器。使用以下选项之一将VSCode附加到正在运行的容器:
- 右键单击所需的容器并选择“附加Visual Studio代码”
- 按F1键并选择“>远程容器:连接到正在运行的容器…”,然后选择您选择的容器
(-)需要3个VSCode窗口(本地计算机、远程ssh和远程容器),而不是2个VSCode窗口如果您可以通过ssh到达运行Docker引擎的远程节点,为什么还需要容器中的另一个ssh服务器?从运行容器的主机上,可以安全地使用tty,即附加 我不认为在容器中运行SSHD不是一个好主意,尽管这是可能的。为了有用,SSHD必须侦听每个容器中的非冲突端口。否则,偶尔在同一节点上公开同一端口的两个容器将像在同一节点上运行的任何其他服务一样发生冲突 当然,可以使用-p选项随机化端口,但这并不方便。在容器级别管理密钥和用户也不如在主机级别方便,因为主机级别的所有机器都由主机软件提供
使用SSHD加载每个容器会增加容器大小。在Kubernetes中,每个容器都可以通过pass Pod->container访问,而不需要在容器内运行任何SSHD,因为Pod具有IP,并且容器可以通过id连接,即“Docker host->container”步骤1-远程机器上的Docker守护进程
- 确保远程Docker守护程序可以接受来自主机的连接
- 出于测试目的,我在远程服务器上使用以下命令 机器强制Docker守护进程侦听所有IP上的端口4243, 小心,这是不安全的
/etc/sysconfig
或其他地方读取文件以修改命令行。幸运的是,systemd为我们提供了改变这种行为所需的工具。
最简单的解决方案可能是创建包含以下内容的文件/etc/systemd/system/docker.service.d/docker external.conf
(确切的文件名不重要;它只需要以.conf结尾):
然后:
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-设置(或添加)
“docker.host”:tcp://localhost:4243“settings.json中的
。我通过切换到本地计算机上远程服务器的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!
之后:
通过远程SSH连接到容器服务器
右键单击相关容器->附加Visual Studio代码
这对我很有用
(注意:人们可能会认为,在切换本地上下文后,我应该能够使用本地VSCode(跳过步骤1)连接到所述远程容器,但VSCode抱怨连接失败。docker正在运行吗?
在docker控制窗格中。)远程开发扩展现在处理所有事情;不需要解决办法。J
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!