docker容器間的互聯(lián)問題
docker容器間互聯(lián)
單機(jī)部署的時候考慮,能不能使docker各個容器間互通呢。比如我的web應(yīng)用容器可以和db容器間互通,而不是現(xiàn)在這樣再web應(yīng)用調(diào)用本機(jī)ip去訪問。
網(wǎng)上查了一下還真有這種方法。
還有兩種方法:
1、links
在容器啟動時,啟動命令中加入links指定鏈接的容器:
docker run -itd --name nginx-web02 --link nginx-web:nginx01 -p 81:81 sunmmi/nginx nginx
run容器nginx-web02時,link容器nginx-web,其中nginx-web:nginx01前面是鏈接哪個容器名,后面是對這個容器別名.
進(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
此時在容器1中就能通過別名直接Ping通容器2了。
測試:
[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
第二種也是在容器啟動時,啟動命令中加入network指定局域網(wǎng)絡(luò):
首先創(chuàng)建一個新的 Docker 網(wǎng)絡(luò):
$ docker network create -d bridge my-net
運行一個容器并連接到新建的 my-net 網(wǎng)絡(luò)
$ docker run -it --rm --name busybox1 --network my-net busybox sh
打開新的終端,再運行一個容器并加入到 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 來測試連接 busybox2 容器,它會解析成 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的場景,需要設(shè)置兩點1、容器的networks:ipv4_address,再單獨配置networks:config:subnet,gateway,參照下面實例:
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連通。
如果首次啟動出現(xiàn)報錯,可能是docker-compose的版本不夠高,升級版本后可能可以解決。
如果第二次啟動出現(xiàn)報錯,可能是網(wǎng)絡(luò)占用,使用docker-compose up之后,docker-compose會創(chuàng)建一個名稱為: {項目名}_{網(wǎng)絡(luò)名} 的網(wǎng)絡(luò),一旦創(chuàng)建了這個網(wǎng)絡(luò),docker-compose 將永遠(yuǎn)不會刪除它。
所以當(dāng)修改了docker-compose.yaml文件后,第二次運行docker-compose up時,使用的還是之前創(chuàng)建的loki_loki網(wǎng)絡(luò)。
解決方法
將之前創(chuàng)建的網(wǎng)絡(luò)手動刪除:
$ docker network rm loki_loki $ docker-compose up
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(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ì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01Docker中優(yōu)化Mysql運行內(nèi)存的操作
這篇文章主要介紹了Docker當(dāng)中優(yōu)化Mysql運行內(nèi)存的操作,經(jīng)過一番操作可以優(yōu)化為只占用100mb內(nèi)存,具體優(yōu)化方法及技巧跟隨小編一起看看吧2022-01-01Deepin使用docker安裝mysql數(shù)據(jù)庫過程詳解
這篇文章主要介紹了Deepin使用docker安裝mysql數(shù)據(jù)庫過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06詳解在Docker容器中運行Spring Boot應(yīng)用
本文將以一個最簡單的Spring Boot開發(fā)的Web應(yīng)用為例,講解如何將其容器化運行。本文的重點是構(gòu)建Docker鏡像、運行Docker容器。2017-06-06docker容器中布置靜態(tài)網(wǎng)站的實現(xiàn)
這篇文章主要介紹了docker容器中布置靜態(tài)網(wǎng)站的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01