docker容器間的互聯(lián)問題
docker容器間互聯(lián)
單機(jī)部署的時(shí)候考慮,能不能使docker各個(gè)容器間互通呢。比如我的web應(yīng)用容器可以和db容器間互通,而不是現(xiàn)在這樣再web應(yīng)用調(diào)用本機(jī)ip去訪問。
網(wǎng)上查了一下還真有這種方法。
還有兩種方法:
1、links
在容器啟動(dòng)時(shí),啟動(dòng)命令中加入links指定鏈接的容器:
docker run -itd --name nginx-web02 --link nginx-web:nginx01 -p 81:81 sunmmi/nginx nginx
run容器nginx-web02時(shí),link容器nginx-web,其中nginx-web:nginx01前面是鏈接哪個(gè)容器名,后面是對(duì)這個(gè)容器別名.
進(jìn)入nginx-web02容器,查看hosts文件,nginx-web,nginx01已經(jīng)增加到hosts文件中.
[root@37e693a5f7a3 /]# 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 nginx01 7d89f9196f78 nginx-web 172.17.0.3 37e693a5f7a3
此時(shí)在容器1中就能通過別名直接Ping通容器2了。
測(cè)試:
[root@37e693a5f7a3 /]# ping nginx01 PING nginx01 (172.17.0.2) 56(84) bytes of data. 64 bytes from nginx01 (172.17.0.2): icmp_seq=1 ttl=64 time=0.071 ms 64 bytes from nginx01 (172.17.0.2): icmp_seq=2 ttl=64 time=0.170 ms
2、network
第二種也是在容器啟動(dòng)時(shí),啟動(dòng)命令中加入network指定局域網(wǎng)絡(luò):
首先創(chuàng)建一個(gè)新的 Docker 網(wǎng)絡(luò):
$ docker network create -d bridge my-net
運(yùn)行一個(gè)容器并連接到新建的 my-net 網(wǎng)絡(luò)
$ docker run -it --rm --name busybox1 --network my-net busybox sh
打開新的終端,再運(yùn)行一個(gè)容器并加入到 my-net 網(wǎng)絡(luò)
$ docker run -it --rm --name busybox2 --network my-net busybox sh
下面通過 ping 來證明 busybox1 容器和 busybox2 容器建立了互聯(lián)關(guān)系。在 busybox1 容器輸入以下命令
/ # ping busybox2 PING busybox2 (172.19.0.3): 56 data bytes 64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.072 ms 64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.118 ms
用 ping 來測(cè)試連接 busybox2 容器,它會(huì)解析成 172.19.0.3。同理在 busybox2 容器執(zhí)行 ping busybox1,
/ # ping busybox1 PING busybox1 (172.19.0.2): 56 data bytes 64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.064 ms 64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.143 ms
這樣,busybox1 容器和 busybox2 容器建立了互聯(lián)關(guān)系。
network 官方 docker-compose.yml ,替換links的方法:
network固定子網(wǎng)絡(luò)Ip
適用于鏈接redis等需要固定ip的場(chǎng)景,需要設(shè)置兩點(diǎn)1、容器的networks:ipv4_address,再單獨(dú)配置networks:config:subnet,gateway,參照下面實(shí)例:
version: "3.9" networks: loki: ipam: driver: default config: # 子網(wǎng)絡(luò) - subnet: "172.22.0.0/24" gateway: 172.22.0.1 services: resty: image: beyond147896/resty:latest ports: - "80:80" - "443:443" networks: loki: # 固定子網(wǎng)ip,網(wǎng)段必須在子網(wǎng)絡(luò)172.22.*.* ipv4_address: 172.22.0.2 redis: image: redis:latest ports: - "6379:6379" networks: loki: # 固定子網(wǎng)ip,網(wǎng)段必須在子網(wǎng)絡(luò)172.22.*.* ipv4_address: 172.22.0.99
在web應(yīng)用的配置中也可以直接寫上面配置的ipv4_address固定Ip連通。
如果首次啟動(dòng)出現(xiàn)報(bào)錯(cuò),可能是docker-compose的版本不夠高,升級(jí)版本后可能可以解決。
如果第二次啟動(dòng)出現(xiàn)報(bào)錯(cuò),可能是網(wǎng)絡(luò)占用,使用docker-compose up之后,docker-compose會(huì)創(chuàng)建一個(gè)名稱為: {項(xiàng)目名}_{網(wǎng)絡(luò)名} 的網(wǎng)絡(luò),一旦創(chuàng)建了這個(gè)網(wǎng)絡(luò),docker-compose 將永遠(yuǎn)不會(huì)刪除它。
所以當(dāng)修改了docker-compose.yaml文件后,第二次運(yùn)行docker-compose up時(shí),使用的還是之前創(chuàng)建的loki_loki網(wǎng)絡(luò)。
解決方法
將之前創(chuàng)建的網(wǎng)絡(luò)手動(dòng)刪除:
$ docker network rm loki_loki $ docker-compose up
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker搭建Redis5.0并掛載數(shù)據(jù)
本文主要介紹了Docker搭建Redis5.0并掛載數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-07-07更改docker默認(rèn)數(shù)據(jù)目錄的方法步驟
本文主要介紹了更改docker默認(rèn)數(shù)據(jù)目錄的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01解決nacos啟動(dòng)時(shí)防火墻開啟8848的坑
最近操作Nacos時(shí)遭遇8848端口無法訪問的問題,嘗試通過安全組和firewall配置仍無法解決,最終發(fā)現(xiàn),firewall對(duì)Docker使用專門的作用域,需要在相應(yīng)作用域下開放端口,務(wù)必檢查firewall中針對(duì)Docker的設(shè)置,確保8848端口在正確的作用域內(nèi)被允許通行2022-10-10Docker中優(yōu)化Mysql運(yùn)行內(nèi)存的操作
這篇文章主要介紹了Docker當(dāng)中優(yōu)化Mysql運(yùn)行內(nèi)存的操作,經(jīng)過一番操作可以優(yōu)化為只占用100mb內(nèi)存,具體優(yōu)化方法及技巧跟隨小編一起看看吧2022-01-01Deepin使用docker安裝mysql數(shù)據(jù)庫過程詳解
這篇文章主要介紹了Deepin使用docker安裝mysql數(shù)據(jù)庫過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06詳解在Docker容器中運(yùn)行Spring Boot應(yīng)用
本文將以一個(gè)最簡(jiǎn)單的Spring Boot開發(fā)的Web應(yīng)用為例,講解如何將其容器化運(yùn)行。本文的重點(diǎn)是構(gòu)建Docker鏡像、運(yùn)行Docker容器。2017-06-06docker容器中布置靜態(tài)網(wǎng)站的實(shí)現(xiàn)
這篇文章主要介紹了docker容器中布置靜態(tài)網(wǎng)站的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01