![](/img/trans.png)
[英]How can i access the website running inside a Docker container using IP address of container
[英]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-get
或yum
或發行版的包管理器安裝它。 獲取 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。 您可以使用awk
或sed
刪除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_IP
內CONTAINER_IP
環境變量的計算值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.