北京微信網(wǎng)站建設公司大連企業(yè)網(wǎng)站建站模板
本文由Markdown語法編輯器編輯完成。
1. 需求背景:
最近在啟動一個服務時,突然發(fā)現(xiàn)它的一個接口,被另一個服務ip頻繁的請求。
按理說,之前設置的是,每隔1分鐘請求一次接口。但從日志來看,則是1秒鐘請求一次,明顯是不太正常的。
但是,我需要定位一下,這個ip對應的是哪個服務,因為有可能有多個服務,來請求這個接口。
因此,需求的背景就是,如何根據(jù)docker服務日志中展示的ip, 快速地查找出,它是docker-compose.yml中的哪個服務。
2. 解決方案:
2.1 docker inspect
如果一個docker-compose.yml里面的服務數(shù)量比較少,我們是可以通過 docker inspect的指令,來查看某個服務被分配的ip地址是多少的。
這里舉一個簡單的例子,假設我有一個容器的名稱, container-abc, 那么我如果想知道它在啟動狀態(tài)下分配的ipv4的地址,可以輸入以下指令:
docker inspect {your-container-name} |grep -i ip
這樣就可以查看到這個容器對應的服務的ip地址了。
如下示例:
可以看到,在截圖中,
serverIP, 是宿主機的ip地址;
而IPAddress, 就是這個容器,在docker內(nèi)部的ip地址。
docker-compose.yml中的服務之間,相互調(diào)用接口,就是通過這個ip來訪問的。
2.2 組合docker的指令
第一種方法,僅限于當docker里面的服務數(shù)量較少時,可以使用。但是如果服務較多,肯定不是很現(xiàn)實。于是咨詢了一下豆包,她給出了我一些建議。
通過將豆包給出的shell腳本,創(chuàng)建一個shell文件,比如:
touch docker-ip.sh
vim docker-ip.sh
# 獲取容器 ID 列表
container_ids=$(docker-compose ps -q)# 循環(huán)處理每個容器 ID
for container_id in $container_ids; do# 獲取容器對應的服務名(通過解析容器名稱來獲取,容器名稱包含服務名相關信息)service_name=$(docker inspect --format='{{.Name}}' $container_id | sed 's/^\///')# 獲取容器的 IP 地址ip_address=$(docker inspect --format='{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $container_id)echo "服務名: $service_name,IP 地址: $ip_address"
done
將上述腳本寫入 docker-ip.sh文件后,再次運行:
bash docker-ip.sh
就可以看到如下面的截圖了,這里會顯示每個服務對應的容器的名稱,以及容器被分配的ip地址。
(完)