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

时间:2015-10-13 12:32:25

标签: bash shell docker

我正在使用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 "$@"

2 个答案:

答案 0 :(得分:7)

如" How to get the ip address of the docker host from inside a docker container"中所述,您可以直接从容器访问它:

/sbin/ip route|awk '/default/ { print $3 }'

但是,as commented,当您使用容器的docker bridge(默认)时,这将输出网桥IP,如172.17.42.1,而不是主机的IP,如192.168.1。 x(典型的家庭NAT)

您可以将实际IP作为环境变量传递run --env <key>=<value>

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

(来自&#34; Is there an easy way to programmatically extract IP address?&#34;)

OP Pawan Sharma comments

  

docker0为主机提供了docker ip。我使用eth0,它给我的主机ip。

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

答案 1 :(得分:1)

docker run -it --net="host" IMAGE

但我不太清楚你想要达到什么目标。 类似于应该可以通过主机IP访问的应用程序?