Docker容器之間互訪

2021-10-09 11:01:25 字數 2266 閱讀 7651

準備部署基於springboot+nacos+redis+mysql程式,每個元件都分別放到指定容器中,此時就遇到了乙個問題,那就是容器之間怎麼才能互相訪問?下面介紹一下容器互訪的解決方式。本文使用的centos是自定義的centos映象,可以直接在容器中使用vim,ifconfig命令,該映象對應的dockerfile見鏈結 方式

一、通過ip直接訪問  

在宿主機上通過ifconfig可以看到,當我們在宿主機上安裝docker時,會預設建立乙個內部的橋接網路docker0,每建立乙個容器就會對應的分配乙個虛擬網絡卡,容器之間可以通過ip直接訪問

3、在兩個容器之間互相ping對方,或者ping宿主機都能ping通

這樣就可以實現容器之間及宿主機之間的互訪了,但是這種方式在面對集群部署就顯得不友好了,所以實際應用中很少用

方式二、通過使用link實現訪問

通過link引數實現訪問

1、使用命令docker run -it --name lcg mycentos:1.3  啟動第一容器

2、啟動第二個容器時,使用link引數 

docker run -it --name lcg1  --link lcg:lcgsky  mycentos:1.3 

第二個容器命名lcg1,並將其連線到lcg容器中。注意--link lcg:lcgsky,lcg為容器名稱,lcgsky表示網路/容器別名。實際使用過程中建議用相同名稱,docker run -it --name lcg1  --link lcg:lcg mycentos:1.3 ,容器名稱和別名一致的時候可以直接寫成 docker run -it --name lcg1--link lcg mycentos:1.3

3、檢視 容器二中的hosts檔案,cat  /etc/hosts

可以看到 172.17.0.2 與 lcg 對應

4、在lcg1中ping lcg,及ping 172.17.0.2 

可以正常ping通

5、在lcg容器中ping lcg1及172.17.0.3

可以發現ping lcg1不通,ping 172.17.0.3,可以ping通,這說明採用link方式有先後順序,實際應用中如果多容器互訪使用可能就不方便了。

方式三、通過自定義bridge訪問

1、執行 docker network create lcgnet 建立乙個新的bridge網路,並通過 docker network ls檢視

2、通過指定網路的方式建立容器lcg

docker run -it --name lcg --network lcgnet --network-alias lcgsky mycentos:1.3

--network lcgnet :表示使用lcgnet網路

--network-alias lcgsky: 表示網路別名為lcgsky

2、使用相同方式建立容器lcg1

docker run -it --name lcg1 --network lcgnet --network-alias lcgsky1 mycentos:1.3

3、兩個容器之間互訪

4.推薦使用這種方法,若訪問容器中服務,可以使用 網路別名加埠號訪問 這用方式訪問

docker 繫結固定ip 跨主機容器互訪

之前使用pipework 分配靜態ip是暫時的,重啟之後就會失效,並且使用pipework繫結的ip 物理機,虛擬機器,docker容器的ip都在同一網段,這在生產環境是很困難的,下面使用docker自帶的network實現固定ip分配,並且重啟不會消失。伺服器ip 容器分配網段 啟動容器的id 1...

Docker 容器之間的通訊

預設情況容器和主機之間的網路通訊是封閉的,如果要讓容器能夠被外部網路訪問,需要在啟動容器的時候指定要開放的埠,這樣我們就能通過主機的網路訪問容器內提供的的服務了.我們在容器中執行了乙個web伺服器,使用者需要訪問這個容器內的資源,這裡為了方便,直接使用官方手冊裡的示例 1 命令列分解 本文把dock...

docker容器之間的訪問

乙個簡單的python web應用,需要訪問redis,web應用與redis應用在不同的容器中,下面實現兩個容器的訪問。from flask import flask from redis import redis import os import socket dockerfile 2 啟動re...