我們都知道docker容器之間是互相隔離的,,不能互相訪問,,但如果有些依賴關系的服務要怎么辦呢。下面介紹三種方法解決容器互訪問題,。 方式一,、虛擬ip訪問安裝docker時,,docker會默認創(chuàng)建一個內部的橋接網(wǎng)絡docker0,,每創(chuàng)建一個容器分配一個虛擬網(wǎng)卡,容器之間可以根據(jù)ip互相訪問,。 [root@33fcf82ab4dd /]# [root@CentOS ~]# ifconfig...... docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0 inet6 fe80::42:35ff:feac:66d8 prefixlen 64 scopeid 0x20<link> ether 02:42:35:ac:66:d8 txqueuelen 0 (Ethernet) RX packets 4018 bytes 266467 (260.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4226 bytes 33935667 (32.3 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0...... 運行一個centos鏡像,, 查看ip地址得到:172.17.0.7 [root@CentOS ~]# docker run -it --name centos-1 docker.io/centos:latest [root@6d214ff8d70a /]# ifconfigeth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.7 netmask 255.255.0.0 broadcast 0.0.0.0 inet6 fe80::42:acff:fe11:7 prefixlen 64 scopeid 0x20<link> ether 02:42:ac:11:00:07 txqueuelen 0 (Ethernet) RX packets 16 bytes 1296 (1.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8 bytes 648 (648.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 以同樣的命令再起一個容器,查看ip地址得到:172.17.0.8 [root@CentOS ~]# docker run -it --name centos-2 docker.io/centos:latest [root@33fcf82ab4dd /]# ifconfigeth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.8 netmask 255.255.0.0 broadcast 0.0.0.0 inet6 fe80::42:acff:fe11:8 prefixlen 64 scopeid 0x20<link> ether 02:42:ac:11:00:08 txqueuelen 0 (Ethernet) RX packets 8 bytes 648 (648.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8 bytes 648 (648.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 容器內部ping測試結果如下: [root@33fcf82ab4dd /]# ping 172.17.0.7PING 172.17.0.7 (172.17.0.7) 56(84) bytes of data.64 bytes from 172.17.0.7: icmp_seq=1 ttl=64 time=0.205 ms64 bytes from 172.17.0.7: icmp_seq=2 ttl=64 time=0.119 ms64 bytes from 172.17.0.7: icmp_seq=3 ttl=64 time=0.118 ms64 bytes from 172.17.0.7: icmp_seq=4 ttl=64 time=0.101 ms 這種方式必須知道每個容器的ip,,在實際使用中并不實用,。 方式二、link運行容器的時候加上參數(shù)link 運行第一個容器 docker run -it --name centos-1 docker.io/centos:latest 運行第二個容器 [root@CentOS ~]# docker run -it --name centos-2 --link centos-1:centos-1 docker.io/centos:latest --link:參數(shù)中第一個centos-1是容器名,,第二個centos-1是定義的容器別名(使用別名訪問容器),,為了方便使用,,一般別名默認容器名,。 測試結果如下: [root@e0841aa13c5b /]# ping centos-1PING centos-1 (172.17.0.7) 56(84) bytes of data.64 bytes from centos-1 (172.17.0.7): icmp_seq=1 ttl=64 time=0.210 ms64 bytes from centos-1 (172.17.0.7): icmp_seq=2 ttl=64 time=0.116 ms64 bytes from centos-1 (172.17.0.7): icmp_seq=3 ttl=64 time=0.112 ms64 bytes from centos-1 (172.17.0.7): icmp_seq=4 ttl=64 time=0.114 ms 此方法對容器創(chuàng)建的順序有要求,如果集群內部多個容器要互訪,,使用就不太方便,。 方式三、創(chuàng)建bridge網(wǎng)絡1.安裝好docker后,,運行如下命令創(chuàng)建bridge網(wǎng)絡:docker network create testnet 查詢到新創(chuàng)建的bridge testnet,。 2.運行容器連接到testnet網(wǎng)絡。 使用方法:docker run -it --name <容器名> ---network <bridge> --network-alias <網(wǎng)絡別名> <鏡像名> [root@CentOS ~]# docker run -it --name centos-1 --network testnet --network-alias centos-1 docker.io/centos:latest[root@CentOS ~]# docker run -it --name centos-2 --network testnet --network-alias centos-2 docker.io/centos:latest 3.從一個容器ping另外一個容器,,測試結果如下: [root@fafe2622f2af /]# ping centos-1PING centos-1 (172.20.0.2) 56(84) bytes of data.64 bytes from centos-1.testnet (172.20.0.2): icmp_seq=1 ttl=64 time=0.158 ms64 bytes from centos-1.testnet (172.20.0.2): icmp_seq=2 ttl=64 time=0.108 ms64 bytes from centos-1.testnet (172.20.0.2): icmp_seq=3 ttl=64 time=0.112 ms64 bytes from centos-1.testnet (172.20.0.2): icmp_seq=4 ttl=64 time=0.113 ms 4.若訪問容器中服務,,可以使用這用方式訪問 <網(wǎng)絡別名>:<服務端口號> 推薦使用這種方法,,自定義網(wǎng)絡,因為使用的是網(wǎng)絡別名,,可以不用顧慮ip是否變動,,只要連接到docker內部bright網(wǎng)絡即可互訪。bridge也可以建立多個,,隔離在不同的網(wǎng)段,。 |
|