如何在Docker容器中获取本地主机IP地址?

4

我正在使用Docker,并通过脚本运行。 我希望在docker中更改一个配置,其中包含主机机器IP地址。

#!/bin/bash
IP=$(echo `ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed   's/addr://'`)
echo Setting xwiki config IP
CONFIG=/xwiki/webapps/xwiki/WEB-INF/xwiki.cfg
sed -i -e "s/^xwiki.authentication.authhost=localhost*/xwiki.authentication.authhost= $IP/"  $CONFIG

/xwiki/start_xwiki.sh -f

我使用以下命令运行docker。

docker run -t -i $EXPOSE_PORTS $IMAGE "$@"

你想要实现什么目标? - Smutje
@Smutje 我想将本地机器的IP地址传递给Docker容器。在我的脚本中,$IP给出的是容器的地址,而不是我的本地主机。 - Pawan Kumar
2个回答

7
正如在 "如何从docker容器内部获取docker主机的IP地址" 中提到的那样,您可以直接从容器中访问它:
/sbin/ip route|awk '/default/ { print $3 }'

但是,正如评论所说的那样,当您在容器中使用docker桥接(默认)时,这会输出桥接IP,例如172.17.42.1,而不是主机的IP,例如192.168.1.x(通常用于家庭NAT)。
您可以通过run --env <key>=<value>命令将实际IP传递为环境变量。
-e "DOCKER_HOST=$(ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+')

(来自 "有没有一种简单的方法可以编程地提取IP地址?")

正如原始发帖人Pawan Sharma评论的:

docker0给出了主机docker ip。我使用了eth0,它给出了我的主机IP。

-e "DOCKER_HOST=$(ip -4 addr show eth0| grep -Po 'inet \K[\d.]+')

感谢您。docker0提供了主机Docker IP地址。我使用eth0,它给出了我的主机IP地址。这是正确的方法还是通用解决方案? - Pawan Kumar
@PawanSharma 好的,我已经相应地编辑了答案,并包含了您的评论以获得更多的可见性。 - VonC
这在我的Windows上不起作用。我总是得到一个172.x.x.x的IP地址,而不是我要找的10.0.75.X的IP地址。 - st.huber
@Huber Strage:您可以提出一个新问题,说明您的确切配置(操作系统、Docker 版本等)。 - VonC

1

docker run -it --net="host" IMAGE 是什么意思?

但我不太确定你想要实现什么。是像一个可以通过主机IP访问的应用程序吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接