Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 从一个容器到另一个容器的Ssh_Docker_Ssh_Containers_Docker Networking_Docker Network - Fatal编程技术网

Docker 从一个容器到另一个容器的Ssh

Docker 从一个容器到另一个容器的Ssh,docker,ssh,containers,docker-networking,docker-network,Docker,Ssh,Containers,Docker Networking,Docker Network,我想创建一个容器网络,其中一个中心容器应该能够ssh连接到所有其他容器中。通过ssh,中央容器可以使用Ansible更改所有其他容器的配置。我知道不建议从一个容器到另一个容器使用ssh,我们可以使用卷进行数据共享,但这不适合我的用例。我可以用ssh从主机连接到容器,但不能用ssh从一个容器连接到另一个容器 我使用的Docker文件是: Dockerfile创建的图像名为ubuntu:v2 然后使用下面的命令创建了两个容器u1和u2 在容器中,我运行以下命令来创建容器中的用户。在u1容器中创建用户

我想创建一个容器网络,其中一个中心容器应该能够ssh连接到所有其他容器中。通过ssh,中央容器可以使用Ansible更改所有其他容器的配置。我知道不建议从一个容器到另一个容器使用ssh,我们可以使用卷进行数据共享,但这不适合我的用例。我可以用ssh从主机连接到容器,但不能用ssh从一个容器连接到另一个容器

我使用的Docker文件是:

Dockerfile创建的图像名为ubuntu:v2

然后使用下面的命令创建了两个容器u1和u2

在容器中,我运行以下命令来创建容器中的用户。在u1容器中创建用户u1,在u2容器中创建用户u2


我制作了两个容器,除了一个有用户u1,另一个有用户u2,这两个容器都是相同的,如上所示。在此之后,我尝试使用ssh-X命令从主机到容器进行sshu2@localhost-p 32773(32773是映射到集装箱22端口的端口)。所以ssh可以从主机到容器工作,但我无法从一个容器到另一个容器进行ssh。那么,您可以帮助我从一个容器到其他容器进行ssh吗?

使用docker service discovery,然后您可以从一个容器到另一个容器进行ssh。在这里,您可以通过将所有容器连接到同一网络来实现服务发现

docker network create -d bridge test
docker run -p 22 --rm -ti --name u1 --network test ubuntu:v2 bash 
docker run -p 22 --rm -ti --name u2 --network test ubuntu:v2 bash

现在,您可以从
u1
ssh方式ssh到
u2
user@u2

使用docker服务发现,然后您可以使用ssh从一个容器连接到另一个容器。在这里,您可以通过将所有容器连接到同一网络来实现服务发现

docker network create -d bridge test
docker run -p 22 --rm -ti --name u1 --network test ubuntu:v2 bash 
docker run -p 22 --rm -ti --name u2 --network test ubuntu:v2 bash

现在,您可以从
u1
ssh方式ssh到
u2
user@u2

感谢您对@Mani的支持。但它显示出错误。你可以在这里看到截图。你试过吗?我已经给出了一切,所以如果你还没有尝试,你可以在你的电脑上尝试。这只需要5分钟。似乎用户u2在容器u2中不可用。在并行终端中运行两个容器,在这两个容器中创建用户并进行尝试。在这种情况下,您不能将两个容器端口都绑定到22。我正在并行运行这两个容器。名为u1的Container1公开了端口22并映射到主机32775,名为u2的container2也公开了端口22并映射到主机端口32776。我可以将container1从container2 ping到u1到u2,但是ssh显示了一些错误。在过去的三天里,我一直在努力解决这个问题。我尝试了许多不同的解决方案,但没有一个奏效。这就是为什么我建议您尝试在您的系统上执行此操作。一切都给了。如果您想检查网络或想了解更多详细信息,请与我联系。谢谢,@ManiI可以从主机ssh到容器u1和u2,但是从u1到u2的ssh不起作用。谢谢。@Sevenearths docker compose也遵循相同的原则,在两个compose文件中提供相同的外部网络名称。感谢您对@Mani的支持。但它显示出错误。你可以在这里看到截图。你试过吗?我已经给出了一切,所以如果你还没有尝试,你可以在你的电脑上尝试。这只需要5分钟。似乎用户u2在容器u2中不可用。在并行终端中运行两个容器,在这两个容器中创建用户并进行尝试。在这种情况下,您不能将两个容器端口都绑定到22。我正在并行运行这两个容器。名为u1的Container1公开了端口22并映射到主机32775,名为u2的container2也公开了端口22并映射到主机端口32776。我可以将container1从container2 ping到u1到u2,但是ssh显示了一些错误。在过去的三天里,我一直在努力解决这个问题。我尝试了许多不同的解决方案,但没有一个奏效。这就是为什么我建议您尝试在您的系统上执行此操作。一切都给了。如果您想检查网络或想了解更多详细信息,请与我联系。谢谢,@ManiI可以从主机ssh到容器u1和u2,但是从u1到u2的ssh不起作用。谢谢。@Sevenearths docker compose也遵循相同的,在两个compose文件中提供相同的外部网络名称。
root@d0b0e44f7517:/# mkdir /var/run/sshd
root@d0b0e44f7517:/# chmod 0755 /var/run/sshd
root@d0b0e44f7517:/# /usr/sbin/sshd    
root@d0b0e44f7517:/#
root@d0b0e44f7517:/# useradd --create-home --shell /bin/bash --groups sudo u2  
root@d0b0e44f7517:/# passwd u2
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@d0b0e44f7517:/#
root@d0b0e44f7517:/#
docker network create -d bridge test
docker run -p 22 --rm -ti --name u1 --network test ubuntu:v2 bash 
docker run -p 22 --rm -ti --name u2 --network test ubuntu:v2 bash