如何从一个Docker容器ssh到另一个Docker容器?

7
以下是翻译的结果:

以下是场景描述。

我有三个容器。

Container1、container2和container3(基于Ubuntu的镜像),其中container2充当container1和container2之间的路由器。

我将在container3中运行一个服务器程序,该程序无限期运行,但当我从客户端启动连接时,我将收集一些统计信息,以便在下次运行时,我需要更改服务器中的某些参数(使用tc netem),然后重新运行测试。

在进行下一次运行之前,我需要在Middlerouter以及container3中SSH并执行命令。

我无法以SSH登录,因为它显示连接被拒绝。我已经向所有容器公开了22号端口。

以下是正在运行的容器的图像 enter image description here


你能提供Dockerfiles、你尝试执行的命令、堆栈跟踪等信息吗?这些信息太少了,很难提供帮助。 - Mornor
检查:如何进入Docker容器?(https://dev59.com/oF0a5IYBdhLWcg3wk5dw)你可能还想看看这个(https://jpetazzo.github.io/2014/06/23/docker-ssh-considered-evil/)。 - tgogos
@Mornor,谢谢您,我会发布并更新帖子。 - AmithRc
@tgogos,我在容器内运行了sshd服务。我认为我已经将所有容器映射到相同的SSH端口。我没有在运行时暴露端口,但我修改了它们的配置文件以允许端口22。我对所有容器使用相同的22号端口,你觉得这会有问题吗?我认为不应该有问题,因为每个容器都将在自己的命名空间中运行。感谢您的帮助。 - AmithRc
好的,请尝试提供一个minimal, complete, verifiable example,并不要忘记添加您所使用的操作系统,因为根据情况可能存在网络限制。 - tgogos
显示剩余5条评论
1个回答

0

你需要使用桥接或MacVlan网络绑定IP地址才能进行SSH连接


1
原问题提问者的评论指出他们已经在容器内运行了sshd。在Docker中,“在容器中安装...”和“服务启动”都不是最佳实践:两者都会导致在删除容器时丢失工作,并且service/systemctl/...往往无法正常工作,因为没有init守护进程来处理它们。 - David Maze

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