我刚开始接触Docker。从同一个镜像在本地运行多个Docker容器。
docker run -it -p 52022:22 ubuntu
docker run -it -p 52023:22 ubuntu
我已经添加了 openssh-server 并设置了密钥。如何在它们之间进行 ssh 连接(用于实验目的)?尝试使用从 docker 容器获取的主机名进行 ssh 连接会导致无法解析主机名。
警告:通过ssh进入根容器可能会潜在地授予其主机管理员权限。
您可以创建一个swarm,并使用生成的dns名称与它们通信。
顺便提一下,在这个例子中,由于ubuntu没有运行任何东西,它会停止该容器并启动另一个容器。 您需要启动像httpd这样的持续运行的容器。
这是我的doggy示例。 doggy/docker-compose.yml文件应该如下所示:
version: '3.0'
services:
sparkey:
image: "httpd"
ports:
- "52022:22"
- "9002:80"
limey:
image: "httpd"
ports:
- "52023:22"
- "9003:80"
如果尚未完成,则初始化一个swarm。
docker swarm init
docker stack deploy --compose-file docker-compose.yml doggy
然后当你进入容器时,从 docker ps 中获取容器名称。
docker exec -it doggy_limey_1.7jm5muapfhekb11v2ei8gvnc9 bash
如果Swarm中有多个主机,您可以找到机器。
docker service ps doggy
ping doggy_sparkey
PING doggy_sparkey (10.0.0.4): 56 data bytes
64 bytes from 10.0.0.4: seq=0 ttl=64 time=0.036 ms
64 bytes from 10.0.0.4: seq=1 ttl=64 time=0.070 ms
使用此命令停止堆栈。
docker stack rm doggy