docker容器之間通訊-network解讀
docker為容器創(chuàng)建獨立的網(wǎng)絡環(huán)境,實現(xiàn)宿主和容器、容器之間的網(wǎng)絡隔離,默認使用bridge模式的網(wǎng)絡,實現(xiàn)容器之間、容器與宿主機之間、乃至與外界之間 的網(wǎng)絡通信。
但是我們在實際部署應用的時候,發(fā)現(xiàn)并不能直接通過容器內(nèi)部端口訪問另外一個容器的應用(比如:mysql容器端口是3306,web應用不能直接通過3306訪問mysql),而是通過端口映射到宿主機器來實現(xiàn)容器之間的訪問。
那么有什么方式能實現(xiàn)直接通過容器內(nèi)部端口進行數(shù)據(jù)通訊呢?那就是通過network方式。
docker network創(chuàng)建一個橋接網(wǎng)絡,在docker run的時候?qū)⑷萜髦付ǖ叫聞?chuàng)建的橋接網(wǎng)絡中,這樣同一橋接網(wǎng)絡中的容器就可以通過互相訪問。
1、創(chuàng)建network
[root@iZbp13sno1lc2yxlhjc4b3Z ~]# docker network create my-network [root@iZbp13sno1lc2yxlhjc4b3Z ~]# docker network ls NETWORK ID NAME DRIVER SCOPE e4de24aaf1c2 bridge bridge local 093caaca12b4 host host local a2b05d7d591a my-network bridge local 6e6497f8e311 none null local [root@iZbp13sno1lc2yxlhjc4b3Z ~]#
可以看到my-network已經(jīng)創(chuàng)建好,另外其他3個是docker默認創(chuàng)建的。
2、創(chuàng)建容器時指定網(wǎng)絡
在創(chuàng)建容器時指定使用my-network網(wǎng)絡,并設置網(wǎng)絡別名。
docker run -itd --name mysql --network my-network --network-alias mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7.24
- –network 指定使用的網(wǎng)絡
- –network-alias 設置網(wǎng)絡別名
如果容器已創(chuàng)建好但是之前沒有指定自己的網(wǎng)絡,則使用下面命令修改:
docker network connect --alias mysql my-network mysql
第一個mysql是網(wǎng)絡別名 第二個mysql是容器名
3、通過網(wǎng)絡別名測試訪問
進入web容器,使用ping命令測試
[root@iZbp13sno1lc2yxlhjc4b3Z ~]# docker exec -it tomcat_kq bash root@161eee53356c:/usr/local/tomcat# ping mysql PING mysql (172.18.0.2) 56(84) bytes of data. 64 bytes from mysql.my-network (172.18.0.2): icmp_seq=1 ttl=64 time=0.049 ms
可以看到通過mysql網(wǎng)絡別名可以直接訪問。
另外通過容器id或者主機名也是可以訪問的。但是你不加入這個自定義網(wǎng)絡,則沒法訪問。這個在項目實際應用中非常重要,特別是通過主機名識別服務的項目,如springcoud項目
4、項目實際應用
修改web項目訪問mysql的數(shù)據(jù)庫地址,由ip改為網(wǎng)絡別名,端口為容器內(nèi)部端口:
jdbc:mysql://mysql:3306/kaoqin?allowMultiQueries=true
注意:mysql是前面設置的網(wǎng)絡別名,3306是容器內(nèi)部端口
這里特別提一下springcloud項目,eureka中心一般是通過主機名來中注冊發(fā)現(xiàn)服務的,但是一放到docker容器中,springboot應用就報錯,提示不能發(fā)送心跳到注冊中心,就是因為容器中間的網(wǎng)絡隔離造成的,通過把所有容器加入到自定義網(wǎng)絡就能解決此問題。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
centos7安裝/升級docker和docker compose方式
文章總結了在升級Docker和安裝Docker Compose時遇到的問題,包括舊版安裝和新版安裝的差異、docker-compose的安裝問題以及卸載前的注意事項2024-12-12Docker容器之間數(shù)據(jù)傳輸?shù)膶崿F(xiàn)
本文主要介紹了Docker容器之間數(shù)據(jù)傳輸?shù)膶崿F(xiàn),文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03Ubuntu24.04LTS在線安裝Docker引擎的詳細過程
本文介紹了在Ubuntu 24.04 LTS系統(tǒng)上安裝Docker引擎的步驟,包括卸載舊版本、設置Docker APT倉庫、安裝最新版或指定版本的Docker,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-11-11Docker 部署單機版 Pulsar 和集群架構 Redis(開發(fā)神器)的方法
這篇文章主要介紹了Docker 部署單機版 Pulsar 和集群架構 Redis(開發(fā)神器)的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10