1. docker網(wǎng)絡(luò)
參考https://blog.csdn.net/lihongbao80/article/details/108019773
https://www.freecodecamp.org/chinese/news/how-to-get-a-docker-container-ip-address-explained-with-examples/
默認(rèn)網(wǎng)絡(luò)有三種,分別是
1、bridge模式,–net=bridge(默認(rèn))
dokcer網(wǎng)絡(luò)的默認(rèn)設(shè)置,為容器創(chuàng)建獨(dú)立的網(wǎng)絡(luò)命名空間,容器具有獨(dú)立的網(wǎng)卡等所有單獨(dú)的網(wǎng)絡(luò)棧,是最常用的使用方式。在docker run啟動(dòng)容器的時(shí)候,如果不加–net參數(shù),就默認(rèn)采用這種網(wǎng)絡(luò)模式。安裝完docker,系統(tǒng)會(huì)自動(dòng)添加一個(gè)供docker使用的網(wǎng)橋docker0,我們創(chuàng)建一個(gè)新的容器時(shí),容器通過DHCP獲取一個(gè)與docker0同網(wǎng)段的IP地址,并默認(rèn)連接到docker0網(wǎng)橋,以此實(shí)現(xiàn)容器與宿主機(jī)的網(wǎng)絡(luò)互通。
2、host模式,–net=host
Docker使用了Linux的Namespaces技術(shù)來進(jìn)行資源隔離,如PID Namespace隔離進(jìn)程,Mount Namespace隔離文件系統(tǒng),Network Namespace隔離網(wǎng)絡(luò)等。一個(gè)Network Namespace提供了一份獨(dú)立的網(wǎng)絡(luò)環(huán)境,包括網(wǎng)卡、路由、Iptable規(guī)則等都與其他的Network Namespace隔離。一個(gè)Docker容器一般會(huì)分配一個(gè)獨(dú)立的Network Namespace。但如果啟動(dòng)容器的時(shí)候使用host模式,那么這個(gè)容器將不會(huì)獲得一個(gè)獨(dú)立的Network Namespace,而是和宿主機(jī)共用一個(gè)Network Namespace。容器將不會(huì)虛擬出自己的網(wǎng)卡,配置自己的IP等,而是使用宿主機(jī)的IP和端口。。
3、none模式,–net=none
為容器創(chuàng)建獨(dú)立網(wǎng)絡(luò)命名空間,但不為它做任何網(wǎng)絡(luò)配置,容器中只有l(wèi)o,用戶可以在此基礎(chǔ)上,對容器網(wǎng)絡(luò)做任意定制。這個(gè)模式下,dokcer不為容器進(jìn)行任何網(wǎng)絡(luò)配置。需要我們自己為容器添加網(wǎng)卡,配置IP。因此,若想使用pipework配置docker容器的ip地址,必須要在none模式下才可以。
docker network ls
NETWORK ID NAME DRIVER SCOPE
f65bddc829ad bridge bridge local
887f3f66f5dc host host local
7d7c2584672c none null local
所有docker在建立的時(shí)候會(huì)被默認(rèn)分到bridge網(wǎng)絡(luò)空間,并且會(huì)被分配不同IP
我遇到的具體問題就是:在docker A中,訪問dockerB的服務(wù),curl不通。這是因?yàn)槲矣玫哪J(rèn)網(wǎng)關(guān)"172.17.0.1", 不是每個(gè)Docker的IP。因此應(yīng)該配置的時(shí)候用網(wǎng)關(guān)IP。
2. 構(gòu)建自己的網(wǎng)絡(luò)
以下內(nèi)容來自ChatGPT
在 Docker 中,容器名稱不會(huì)自動(dòng)映射為 IP 地址。容器名稱只是一個(gè)方便的標(biāo)識(shí)符,用于在 Docker 環(huán)境中標(biāo)識(shí)和訪問容器。
要在一個(gè)容器中通過容器名稱訪問另一個(gè)容器,你需要確保這兩個(gè)容器連接到同一個(gè)網(wǎng)絡(luò),并且使用容器名稱進(jìn)行通信。
以下是一些步驟來確保容器之間可以通過名稱進(jìn)行通信:
-
創(chuàng)建一個(gè)自定義網(wǎng)絡(luò)(如果還沒有):
docker network create mynetwork
-
啟動(dòng)容器時(shí),將它們連接到相同的網(wǎng)絡(luò)并分配容器名稱:
docker run -d --name containerA --network mynetwork imageA docker run -d --name containerB --network mynetwork imageB
在這個(gè)例子中,我們將容器A和容器B連接到同一個(gè)名為
mynetwork
的網(wǎng)絡(luò),并分別分配了容器名稱containerA
和containerB
。 -
在容器A中通過容器名稱訪問容器B:
ping containerB
Docker 會(huì)自動(dòng)解析容器名稱
containerB
并將其轉(zhuǎn)換為相應(yīng)的 IP 地址。
請確保容器A和容器B都在同一個(gè)網(wǎng)絡(luò)中,并且容器名稱沒有沖突。如果仍然無法訪問,請確認(rèn)網(wǎng)絡(luò)配置和容器名稱是否正確,并確保容器正常運(yùn)行。
對于已經(jīng)啟動(dòng)的Docker放入到指定網(wǎng)絡(luò)
是的,對于已經(jīng)啟動(dòng)的 Docker 容器,你可以通過使用 docker network connect
命令將其連接到指定的網(wǎng)絡(luò)。
以下是將已經(jīng)啟動(dòng)的容器連接到特定網(wǎng)絡(luò)的步驟:
-
首先,使用
docker network ls
命令查看可用的網(wǎng)絡(luò)列表,并找到你想要連接的目標(biāo)網(wǎng)絡(luò)的名稱或 ID。 -
然后,使用以下命令將容器連接到目標(biāo)網(wǎng)絡(luò):
docker network connect <network_name_or_id> <container_name_or_id>
其中
<network_name_or_id>
是目標(biāo)網(wǎng)絡(luò)的名稱或 ID,<container_name_or_id>
是要連接的容器的名稱或 ID。例如,如果要將容器
mycontainer
連接到網(wǎng)絡(luò)mynetwork
,可以運(yùn)行以下命令:docker network connect mynetwork mycontainer
-
連接成功后,容器將能夠與目標(biāo)網(wǎng)絡(luò)中的其他容器進(jìn)行通信。
請注意,連接容器到新網(wǎng)絡(luò)后,容器將具有兩個(gè)或多個(gè)網(wǎng)絡(luò)接口,分別對應(yīng)于每個(gè)連接的網(wǎng)絡(luò)。這樣,容器可以在不同的網(wǎng)絡(luò)之間進(jìn)行通信。你可以使用 docker network disconnect
命令將容器從網(wǎng)絡(luò)中斷開連接。文章來源:http://www.zghlxwxcb.cn/news/detail-639510.html
docker network disconnect <network_name_or_id> <container_name_or_id>
希望這可以幫助到你!如有其他問題,請隨時(shí)提問。文章來源地址http://www.zghlxwxcb.cn/news/detail-639510.html
到了這里,關(guān)于讓ELK在同一個(gè)docker網(wǎng)絡(luò)下通過名字直接訪問的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!