docker容器间互联

通过容器名称互联

即在同一个宿主机上的容器之间可以通过自定义的容器名称相互访问,比如一个业务前端静态页面是使用nginx,动态页面使用的是tomcat,由于容器在启动的时候其内部IP地址是DHCP 随机分配的,所以如果通过内部访问的话,自定义名称是相对比较固定的,因此比较适用于此场景。

启动第一个容器

[root@mysql app1]# docker run -itd --name tomcat-web -p 8801:8080 tomcat-web:app1 
b6471b4d34c6aeedcae1c1048632dc326acdd37d385b8afbaa3ace186e433c87

查看容器的hosts文件

[root@b6471b4d34c6 /]# cat /etc/hosts
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.2    b6471b4d34c6
1.1.1.1 test.com

启动第二个容器,与第一个容器关联

[root@mysql app1]# docker run -itd --name nginx-link --link tomcat-web nginx:v1
06f2bc85b84d65407f1cdb4ec73b3c8d3cff783883593185ac676064258703cb

查看容器的hosts

[root@06f2bc85b84d /]# cat /etc/hosts
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.2    tomcat-web b6471b4d34c6
172.17.0.3    06f2bc85b84d

测试连通性

[root@06f2bc85b84d /]# ping tomcat-web
PING tomcat-web (172.17.0.2) 56(84) bytes of data.
64 bytes from tomcat-web (172.17.0.2): icmp_seq=1 ttl=64 time=0.077 ms
64 bytes from tomcat-web (172.17.0.2): icmp_seq=2 ttl=64 time=0.089 ms
^C
--- tomcat-web ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 31ms
rtt min/avg/max/mdev = 0.077/0.083/0.089/0.006 ms
[root@06f2bc85b84d /]# ping b6471b4d34c6
PING tomcat-web (172.17.0.2) 56(84) bytes of data.
64 bytes from tomcat-web (172.17.0.2): icmp_seq=1 ttl=64 time=0.040 ms
64 bytes from tomcat-web (172.17.0.2): icmp_seq=2 ttl=64 time=0.090 ms
^C
--- tomcat-web ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 59ms
rtt min/avg/max/mdev = 0.040/0.065/0.090/0.025 ms

通过自定义容器别名互联

上一步骤中,自定义的容器名称可能后期会发生变化,那么一旦名称发生变化,程序之间也要随之发生变化,比如程序通过容器名称进行服务调用,但是容器名称发生变化之后再使用之前的名称肯定是无法成功调用,每次都进行更改的话又比较麻烦,因此可以使用自定义别名的方式解决,即容器名称可以随意更,只要不更改别名即可,具体如下:

命令格式:

  docker run -d --name 新容器名称 --link 目标容器名称:自定义的名称 -p 本地端口:容器端口 镜像名称 shell命令

 

[root@mysql ~]# docker run -d --name test-link --link tomcat-web:java-server nginx:v1
41b4195710140a2ba45750dfd8bdf4953092d500d5edaf9034a83570890ab128

[root@mysql ~]# docker exec -it test-link bash
[root@41b419571014 /]# cat /etc/hosts
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.2    java-server b6471b4d34c6 tomcat-web
172.17.0.4    41b419571014

[root@41b419571014 /]# ping java-server
PING java-server (172.17.0.2) 56(84) bytes of data.
64 bytes from java-server (172.17.0.2): icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from java-server (172.17.0.2): icmp_seq=2 ttl=64 time=0.091 ms
^C
--- java-server ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 10ms

 

docker容器间互联

上一篇:nacos的初始化配置


下一篇:Python + Robotframework + Appium 之APP自动化测试小试牛刀(Android)