场景:
- Server_1上有一个docker容器 containerX
- Server_2上有一个docker容器 containerX
- ...
- Server_n上有一个docker容器 containerX
如何实现着 n 个docker之间的互相访问呢?
实现方式:
Step1:配置一个通用的容器
新建一个容器,在容器中做以下配置:
- 确保已经安装,如果没有安装,则: ssh
sudo apt-get install openssh-server
- 确保 ssh 开机启动,
.bashrc
中添加service ssh start
。执行source .bashrc
- sshd配置(用于接受其它容器的链接):
shell$ vim /etc/ssh/sshd_config # 修改 ssh 守护配置 <<LongComment ###需要在文件末尾添加以下内容 port=2478 ##这个端口号不要跟本服务器其它Docker容器端口号重复! PermitRootLogin yes PubkeyAuthentication yes PasswordAuthentication yes LongComment
- ssh配置(用于链接其它容器)
shell$ vim /etc/ssh/ssh_config <<LongComment ###需要在文件末尾添加以下内容 port=2478 ##将端口号修改为想要连接的服务器容器端口号 LongComment
- 设置ssh公钥,免密登录
$ ssh-keygen -t rsa -C "multi-node"
将生成的公钥内容~/.ssh/id_rsa.pub
拷贝到~/.ssh/authorized_keys
中
Step2:将这个通用的容器(设为cont_g
)导出为 tar 文件,拷贝到所有n个server上
docker export cont_g > cont_g.tar
Step3:将cont_g.tar
导入为 image
docker import cont_g.tar container:generel
Step4:在所有的server上从image
构建各自的容器
Server_1:Server_n 上的操作相同:
docker run -it --name containerX--network=host --ipc=host --privileged container:generel /bin/bash
最后,通过 ssh Server_x(x∈[1,n])就可以实现n个容器之间的互相访问了