從主機(jī)獲取Docker容器IP地址的四種方法
從主機(jī)獲取Docker容器IP地址的方法
實現(xiàn)步驟
方法一:使用docker inspect命令結(jié)合格式化選項
現(xiàn)代Docker客戶端語法:
docker inspect \
-f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
舊的Docker客戶端語法:
docker inspect \
--format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
這些命令將返回Docker容器的IP地址。如果在Windows上使用,需將單引號'替換為雙引號"。
方法二:通過docker ps和docker inspect命令手動查找
1. 首先獲取容器ID:
docker ps
(第一列是容器ID)
2. 使用容器ID運行:
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)
方法四:通過docker exec命令在容器內(nèi)查詢
在Linux容器中:
docker exec [container-id or container-name] cat /etc/hosts
在Windows容器中:
docker exec [container-id or container-name] ipconfig
核心代碼
以下是一個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'])
最佳實踐
- 使用格式化選項:使用
docker inspect的--format選項可以直接獲取所需的IP地址,避免手動解析大量輸出。 - 腳本化操作:將常用的命令封裝成腳本或別名,提高操作效率。例如,在
~/.bashrc中添加以下腳本:
docker-ip() {
docker inspect --format '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@"
}
然后,要獲取容器的IP地址,只需執(zhí)行:
docker-ip YOUR_CONTAINER_ID
常見問題
docker inspect返回<no value>:可能是容器未正確分配IP地址,或者使用的網(wǎng)絡(luò)配置有問題。檢查容器是否正常運行,以及網(wǎng)絡(luò)設(shè)置是否正確。- 在Windows上使用單引號導(dǎo)致錯誤:Windows系統(tǒng)需要使用雙引號
"替換單引號'。 - 容器連接多個網(wǎng)絡(luò)時獲取IP問題:使用
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'可能會返回多個IP地址??梢允褂?code>jq工具來解析網(wǎng)絡(luò)JSON,以更好地處理這種情況。
以上就是從主機(jī)獲取Docker容器IP地址的四種方法的詳細(xì)內(nèi)容,更多關(guān)于主機(jī)獲取Docker IP地址的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Docker?Windows下如何安裝詳細(xì)介紹(圖文)
這篇文章主要介紹了Docker?Windows下如何安裝詳細(xì)介紹(圖文)的相關(guān)資料,需要的朋友可以參考下2016-12-12
Docker Compose搭建Redis主從復(fù)制環(huán)境的實現(xiàn)步驟
在Docker中搭建Redis主從架構(gòu)非常方便,下面是一個示例,演示如何使用Docker Compose設(shè)置一個Redis主從復(fù)制環(huán)境,文中有詳細(xì)的代碼示例,具有一定的參考價值,需要的朋友可以參考下2023-09-09
docker在Centos上做DNS服務(wù)器的配置全過程
這篇文章主要介紹了docker在Centos上做DNS服務(wù)器的配置全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-06-06
解決docker拉取鏡像報錯:error pulling image configurat
在使用Docker拉取Kafka鏡像時可能會遇到"error pulling image configuration"的錯誤,這可以通過編輯Docker配置文件并重啟Docker服務(wù)來解決,具體步驟包括:1. 編輯Docker配置文件;2. 使用命令systemctl restart docker重啟Docker服務(wù)2024-11-11
Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)
這篇文章介紹了Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03

