從主機(jī)獲取Docker容器IP地址的四種方法
從主機(jī)獲取Docker容器IP地址的方法
實(shí)現(xiàn)步驟
方法一:使用docker inspect命令結(jié)合格式化選項(xiàng)
現(xiàn)代Docker客戶端語(yǔ)法:
docker inspect \ -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
舊的Docker客戶端語(yǔ)法:
docker inspect \ --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
這些命令將返回Docker容器的IP地址。如果在Windows上使用,需將單引號(hào)'
替換為雙引號(hào)"
。
方法二:通過(guò)docker ps和docker inspect命令手動(dòng)查找
1. 首先獲取容器ID:
docker ps
(第一列是容器ID)
2. 使用容器ID運(yùn)行:
docker inspect <container ID>
在輸出的底部,NetworkSettings
下可以找到IPAddress
。
或者在UNIX系統(tǒng)上使用:
docker inspect <container id> | grep "IPAddress"
在Windows CMD中使用:
docker inspect <container id> | findstr "IPAddress"
方法三:使用腳本獲取所有容器的IP地址
docker inspect -f '{{.Name}} - {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
如果使用docker-compose
,命令如下:
docker inspect -f '{{.Name}} - {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
方法四:通過(guò)docker exec命令在容器內(nèi)查詢
在Linux容器中:
docker exec [container-id or container-name] cat /etc/hosts
在Windows容器中:
docker exec [container-id or container-name] ipconfig
核心代碼
以下是一個(gè)Python腳本示例,用于獲取容器的網(wǎng)絡(luò)信息:
#!/usr/bin/python import json import subprocess import sys try: CONTAINER = sys.argv[1] except Exception as e: print "\n\tSpecify the container name, please." print "\t\tEx.: script.py my_container\n" sys.exit(1) # Inspecting container via Subprocess proc = subprocess.Popen(["docker","inspect",CONTAINER], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) out = proc.stdout.read() json_data = json.loads(out)[0] net_dict = {} for network in json_data["NetworkSettings"]["Networks"].keys(): net_dict['mac_addr'] = json_data["NetworkSettings"]["Networks"][network]["MacAddress"] net_dict['ipv4_addr'] = json_data["NetworkSettings"]["Networks"][network]["IPAddress"] net_dict['ipv4_net'] = json_data["NetworkSettings"]["Networks"][network]["IPPrefixLen"] net_dict['ipv4_gtw'] = json_data["NetworkSettings"]["Networks"][network]["Gateway"] net_dict['ipv6_addr'] = json_data["NetworkSettings"]["Networks"][network]["GlobalIPv6Address"] net_dict['ipv6_net'] = json_data["NetworkSettings"]["Networks"][network]["GlobalIPv6PrefixLen"] net_dict['ipv6_gtw'] = json_data["NetworkSettings"]["Networks"][network]["IPv6Gateway"] for item in net_dict: if net_dict[item] == "" or net_dict[item] == 0: net_dict[item] = "null" print "\n[%s]" % network print "\n{}{:>13} {:>14}".format(net_dict['mac_addr'],"IP/NETWORK","GATEWAY") print "--------------------------------------------" print "IPv4 settings:{:>16}/{:<5} {}".format(net_dict['ipv4_addr'],net_dict['ipv4_net'],net_dict['ipv4_gtw']) print "IPv6 settings:{:>16}/{:<5} {}".format(net_dict['ipv6_addr'],net_dict['ipv6_net'],net_dict['ipv6_gtw'])
最佳實(shí)踐
- 使用格式化選項(xiàng):使用
docker inspect
的--format
選項(xiàng)可以直接獲取所需的IP地址,避免手動(dòng)解析大量輸出。 - 腳本化操作:將常用的命令封裝成腳本或別名,提高操作效率。例如,在
~/.bashrc
中添加以下腳本:
docker-ip() { docker inspect --format '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@" }
然后,要獲取容器的IP地址,只需執(zhí)行:
docker-ip YOUR_CONTAINER_ID
常見(jiàn)問(wèn)題
docker inspect
返回<no value>
:可能是容器未正確分配IP地址,或者使用的網(wǎng)絡(luò)配置有問(wèn)題。檢查容器是否正常運(yùn)行,以及網(wǎng)絡(luò)設(shè)置是否正確。- 在Windows上使用單引號(hào)導(dǎo)致錯(cuò)誤:Windows系統(tǒng)需要使用雙引號(hào)
"
替換單引號(hào)'
。 - 容器連接多個(gè)網(wǎng)絡(luò)時(shí)獲取IP問(wèn)題:使用
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
可能會(huì)返回多個(gè)IP地址??梢允褂?code>jq工具來(lái)解析網(wǎng)絡(luò)JSON,以更好地處理這種情況。
以上就是從主機(jī)獲取Docker容器IP地址的四種方法的詳細(xì)內(nèi)容,更多關(guān)于主機(jī)獲取Docker IP地址的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Docker?Windows下如何安裝詳細(xì)介紹(圖文)
這篇文章主要介紹了Docker?Windows下如何安裝詳細(xì)介紹(圖文)的相關(guān)資料,需要的朋友可以參考下2016-12-12一文教你輕松搞定Docker無(wú)法拉取鏡像問(wèn)題
這篇文章主要介紹了當(dāng)Docker無(wú)法成功拉取鏡像時(shí)可能遇到的問(wèn)題以及解決方法,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)遇到這個(gè)問(wèn)題的同學(xué)們具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2025-02-02Docker開(kāi)啟遠(yuǎn)程安全訪問(wèn)的圖文教程詳解
這篇文章主要介紹了Docker開(kāi)啟遠(yuǎn)程安全訪問(wèn)的詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Docker Compose搭建Redis主從復(fù)制環(huán)境的實(shí)現(xiàn)步驟
在Docker中搭建Redis主從架構(gòu)非常方便,下面是一個(gè)示例,演示如何使用Docker Compose設(shè)置一個(gè)Redis主從復(fù)制環(huán)境,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下2023-09-09docker在Centos上做DNS服務(wù)器的配置全過(guò)程
這篇文章主要介紹了docker在Centos上做DNS服務(wù)器的配置全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-06-06解決docker拉取鏡像報(bào)錯(cuò):error pulling image configurat
在使用Docker拉取Kafka鏡像時(shí)可能會(huì)遇到"error pulling image configuration"的錯(cuò)誤,這可以通過(guò)編輯Docker配置文件并重啟Docker服務(wù)來(lái)解決,具體步驟包括:1. 編輯Docker配置文件;2. 使用命令systemctl restart docker重啟Docker服務(wù)2024-11-11Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)
這篇文章介紹了Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03