簡體   English   中英

我可以在我的 docker 容器中獲取 IP 地址嗎?

[英]Can I get ip address inside my docker container?

如何獲取此容器內的容器IP地址?

'docker inspect $hostname ...' 不合適,因為我不將 /var/run/docker.sock 主機文件共享到容器。

我可以找到IP地址

hostname -i

當然,如果有多個接口,那可能並不完全准確。

編輯

注意:根據hostname man page, hostname -i使用DNS 解析ip 地址,其中hostname -I顯示除loopback 之外的所有地址,不依賴DNS,推薦使用。

在我所有的 Docker 容器中, -i-I返回相同的結果(但在我的桌面上不是這種情況)。

由於 IP 地址在 /etc/hosts 的第一行,您可以在容器中執行 awk 命令,打印 /etc/hosts 第一行的第一個單詞

$ awk 'END{print $1}' /etc/hosts
172.17.0.14

為什么不是像這樣簡單的事情:

grep "`hostname`" /etc/hosts|awk '{print $1}'

或者

grep "$HOSTNAME" /etc/hosts|awk '{print $1}'

通常,您可以使用 linux 程序ifconfig來獲取 IP 地址和其他網絡詳細信息。 您的容器可能沒有它,在這種情況下,您需要通過apt-getyum或發行版的包管理器安裝它。 獲取 IP 地址的基本管道是

ifconfig eth0 | grep "inet addr:" | cut -d : -f 2 | cut -d " " -f 1

我找到了解決我的問題的方法:

/sbin/ip route|awk '/scope/ { print $9 }'

它的打印內容類似於:'172.17.0.135'

您還可以在 /etc/hosts 中查找以容器 ID 結尾的行並打印第一個字段:

sed -n 's/^\([0-9\.]*\)[[:blank:]]*[0-9a-f]\{12,\}$/\1/p' /etc/hosts

我會使用 awk,但 dedian:jessie 中的標准 awk 不支持像{12,}這樣的正則表達式量詞。

如果你更喜歡使用ip而不是ifconfig ,在 Linux 上你可以這樣做:

ip addr | grep inet | tr -s ' ' | cut -d ' ' -f 3

這只是獲取所有IP 地址和接口,僅搜索以inet開頭的那些並僅返回第 3 列。

作為一個很好的副作用,這也包括子網掩碼! (例如172.17.0.2/16

如果您不想要子網掩碼,可以使用:

ip addr | grep inet | tr -s ' ' | cut -d ' ' -f 3 | tr -d '/'

注意:這會顯示容器中的所有IP。 您可以使用awksed刪除127.0.0.1/16和其他不需要的 IP。 :)

如果它具有“主機名”命令,這可能適用於某些容器。

docker ps獲取(容器ID)

docker exec -it (container id)主機名 -i

FROM alpine

# Upgrade grep so that it supports -Po flags
RUN apk add --no-cache --upgrade grep

ENV IPADDRESS "ip a show eth0 | grep -Po 'inet \K[\d.]+'"

較舊的答案非常有幫助。

這對我有用; 它將導出命令附加到容器內 home ( ~/ ) 目錄中的.bashrc文件中

# Add this line to Dockerfile
RUN echo 'export CONTAINER_IP="$(hostname -i)"' >> ~/.bashrc

現在您可以訪問CONTAINER_IPCONTAINER_IP環境變量的計算值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM