從主機(jī)獲取Docker容器IP地址的四種方法
從主機(jī)獲取Docker容器IP地址的方法
實(shí)現(xiàn)步驟
方法一:使用docker inspect命令結(jié)合格式化選項(xiàng)
現(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上使用,需將單引號(hào)'替換為雙引號(hào)"。
方法二:通過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)
方法四:通過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
常見問題
docker inspect返回<no value>:可能是容器未正確分配IP地址,或者使用的網(wǎng)絡(luò)配置有問題。檢查容器是否正常運(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問題:使用
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'可能會(huì)返回多個(gè)IP地址。可以使用jq工具來解析網(wǎng)絡(luò)JSON,以更好地處理這種情況。
以上就是從主機(jī)獲取Docker容器IP地址的四種方法的詳細(xì)內(nèi)容,更多關(guān)于主機(jī)獲取Docker IP地址的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Docker設(shè)置獲取環(huán)境變量的方法實(shí)現(xiàn)
本文主要介紹了Docker設(shè)置獲取環(huán)境變量的方法實(shí)現(xiàn),包含設(shè)置環(huán)境變量到使用獲取,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
Docker構(gòu)建鏡像的兩種方式實(shí)現(xiàn)
從 docker 鏡像倉庫中下載的鏡像不能滿足我們的需求時(shí),可以通過以下兩種方式對(duì)鏡像進(jìn)行更改。本文就詳細(xì)的介紹了這兩種方法,感興趣的可以了解一下2021-09-09
基于CentOS8系統(tǒng)使用Docker搭建Gitlab的詳細(xì)教程
這篇文章主要介紹了基于CentOS8系統(tǒng)使用Docker搭建Gitlab教程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10
Docker 使用 Supervisor 來管理進(jìn)程操作
這篇文章主要介紹了Docker 使用 Supervisor 來管理進(jìn)程操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Docker跨平臺(tái)和環(huán)境部署的過程詳解
Docker是一個(gè)開放源代碼的容器化平臺(tái),它能夠?qū)崿F(xiàn)應(yīng)用及其依賴的打包,從而實(shí)現(xiàn)跨平臺(tái)和環(huán)境的快速部署,本文介紹了Docker的基本概念、優(yōu)勢(shì)和基本使用方法,包括安裝、啟動(dòng)、構(gòu)建鏡像和部署應(yīng)用等步驟2024-11-11
如何刪除docker-register鏡像及none無效鏡像詳解
這篇文章主要給大家介紹了關(guān)于如何刪除docker-register鏡像及none無效鏡像的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09
docker將本地鏡像發(fā)布到阿里云的實(shí)現(xiàn)方法
本文主要介紹了docker將本地鏡像發(fā)布到阿里云的實(shí)現(xiàn)方法,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
使用docker打包項(xiàng)目的完整流程記錄(小白可懂)
這篇文章主要介紹了使用docker打包項(xiàng)目的完整流程,并詳細(xì)解釋了Dockerfile、構(gòu)建鏡像和創(chuàng)建容器的步驟,通過實(shí)戰(zhàn)項(xiàng)目大家可以掌握基本的Docker打包流程,需要的朋友可以參考下2025-04-04

