Docker容器互訪的三種方法
我們都知道docker容器之間是互相隔離的,不能互相訪問,但如果有些依賴關(guān)系的服務(wù)要怎么辦呢。下面介紹三種方法解決容器互訪問題。
方式一、虛擬ip訪問
安裝docker時(shí),docker會默認(rèn)創(chuàng)建一個(gè)內(nèi)部的橋接網(wǎng)絡(luò)docker0,每創(chuàng)建一個(gè)容器分配一個(gè)虛擬網(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 ......
運(yùn)行一個(gè)centos鏡像, 查看ip地址得到:172.17.0.7
[root@CentOS ~]# docker run -it --name centos-1 docker.io/centos:latest [root@6d214ff8d70a /]# ifconfig eth0: 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
以同樣的命令再起一個(gè)容器,查看ip地址得到:172.17.0.8
[root@CentOS ~]# docker run -it --name centos-2 docker.io/centos:latest [root@33fcf82ab4dd /]# ifconfig eth0: 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
容器內(nèi)部ping測試結(jié)果如下:
[root@33fcf82ab4dd /]# ping 172.17.0.7 PING 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 ms 64 bytes from 172.17.0.7: icmp_seq=2 ttl=64 time=0.119 ms 64 bytes from 172.17.0.7: icmp_seq=3 ttl=64 time=0.118 ms 64 bytes from 172.17.0.7: icmp_seq=4 ttl=64 time=0.101 ms
這種方式必須知道每個(gè)容器的ip,在實(shí)際使用中并不實(shí)用。
方式二、link
運(yùn)行容器的時(shí)候加上參數(shù)link
運(yùn)行第一個(gè)容器
docker run -it --name centos-1 docker.io/centos:latest
運(yùn)行第二個(gè)容器
[root@CentOS ~]# docker run -it --name centos-2 --link centos-1:centos-1 docker.io/centos:latest
--link:參數(shù)中第一個(gè)centos-1是容器名,第二個(gè)centos-1是定義的容器別名(使用別名訪問容器),為了方便使用,一般別名默認(rèn)容器名。
測試結(jié)果如下:
[root@e0841aa13c5b /]# ping centos-1 PING 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 ms 64 bytes from centos-1 (172.17.0.7): icmp_seq=2 ttl=64 time=0.116 ms 64 bytes from centos-1 (172.17.0.7): icmp_seq=3 ttl=64 time=0.112 ms 64 bytes from centos-1 (172.17.0.7): icmp_seq=4 ttl=64 time=0.114 ms
此方法對容器創(chuàng)建的順序有要求,如果集群內(nèi)部多個(gè)容器要互訪,使用就不太方便。
方式三、創(chuàng)建bridge網(wǎng)絡(luò)
1.安裝好docker后,運(yùn)行如下命令創(chuàng)建bridge網(wǎng)絡(luò):docker network create testnet
查詢到新創(chuàng)建的bridge testnet。
2.運(yùn)行容器連接到testnet網(wǎng)絡(luò)。
使用方法:docker run -it --name <容器名> ---network <bridge> --network-alias <網(wǎng)絡(luò)別名> <鏡像名>
[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.從一個(gè)容器ping另外一個(gè)容器,測試結(jié)果如下:
[root@fafe2622f2af /]# ping centos-1 PING 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 ms 64 bytes from centos-1.testnet (172.20.0.2): icmp_seq=2 ttl=64 time=0.108 ms 64 bytes from centos-1.testnet (172.20.0.2): icmp_seq=3 ttl=64 time=0.112 ms 64 bytes from centos-1.testnet (172.20.0.2): icmp_seq=4 ttl=64 time=0.113 ms
4.若訪問容器中服務(wù),可以使用這用方式訪問 <網(wǎng)絡(luò)別名>:<服務(wù)端口號>
推薦使用這種方法,自定義網(wǎng)絡(luò),因?yàn)槭褂玫氖蔷W(wǎng)絡(luò)別名,可以不用顧慮ip是否變動,只要連接到docker內(nèi)部bright網(wǎng)絡(luò)即可互訪。bridge也可以建立多個(gè),隔離在不同的網(wǎng)段。
以上就是Docker容器互訪的三種方法的詳細(xì)內(nèi)容,更多關(guān)于Docker容器互訪的資料請關(guān)注腳本之家其它相關(guān)文章!
- Docker開啟遠(yuǎn)程安全訪問的圖文教程詳解
- Docker添加tomcat容器無法訪問首頁解決方案
- docker for windows 容器內(nèi)網(wǎng)通過獨(dú)立IP直接訪問的方法
- 一次centos Docker網(wǎng)橋模式無法訪問宿主機(jī)Redis服務(wù)的故障排除經(jīng)歷
- 詳解用Docker搭建外部可以訪問的mysql
- 詳解如何解決docker容器無法通過IP訪問宿主機(jī)問題
- Docker內(nèi)如何訪問本機(jī)(宿主機(jī))的具體方法
- Docker容器訪問宿主機(jī)網(wǎng)絡(luò)的方法
- docker nginx 運(yùn)行后無法訪問的問題解決
- Docker容器之內(nèi)網(wǎng)獨(dú)立IP訪問的方法
相關(guān)文章
Docker實(shí)現(xiàn)TLS和CA認(rèn)證的方法步驟
為了更便捷地連接Docker服務(wù)器,Docker服務(wù)器需要開放2375端口才能連接docker,本文主要介紹了Docker實(shí)現(xiàn)TLS和CA認(rèn)證的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06docker部署nodejs開發(fā)環(huán)境詳細(xì)步驟(基礎(chǔ)示例篇)
這篇文章主要給大家介紹了docker部署nodejs開發(fā)環(huán)境詳細(xì)步驟,docker是一個(gè)開源的應(yīng)用容器引擎,可以為我們提供安全、可移植、可重復(fù)的自動化部署的方式,需要的朋友可以參考下2023-10-10Docker部署nginx并修改配置文件的實(shí)現(xiàn)方法
這篇文章主要介紹了Docker部署nginx并修改配置文件的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09maven構(gòu)建docker鏡像push到鏡像倉庫方式
這篇文章主要介紹了maven構(gòu)建docker鏡像push到鏡像倉庫方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Docker容器中文亂碼(修改docker容器編碼格式)的解決方案
這篇文章主要介紹了Docker容器中文亂碼(修改docker容器編碼格式)的解決方案的相關(guān)資料,需要的朋友可以參考下2016-12-12Docker安裝MySQL8.0的實(shí)現(xiàn)方法
這篇文章主要介紹了Docker安裝MySQL8.0的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01Docker容器運(yùn)行ASP.NET Core的實(shí)現(xiàn)步驟
這篇文章主要介紹了Docker容器運(yùn)行ASP.NET Core的實(shí)現(xiàn)步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-04-04Docker部署FastDFS的實(shí)現(xiàn)方法
這篇文章主要介紹了Docker部署FastDFS的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12docker網(wǎng)絡(luò)端口映射的實(shí)現(xiàn)步驟
本文主要介紹了docker網(wǎng)絡(luò)端口映射的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07