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

Paw*_*mar 4 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
Run Code Online (Sandbox Code Playgroud)

/xwiki/start_xwiki.sh -f

我用以下命令运行我的docker.

docker run -t -i $EXPOSE_PORTS $IMAGE "$@"
Run Code Online (Sandbox Code Playgroud)

Von*_*onC 7

如" 如何从docker容器中获取docker主机的ip地址"中所述,您可以直接从容器访问它:

/sbin/ip route|awk '/default/ { print $3 }'
Run Code Online (Sandbox Code Playgroud)

但是,正如所评论的那样,当您使用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.]+')
Run Code Online (Sandbox Code Playgroud)

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

正如OP Pawan Sharma 评论:

docker0给主机docker ip.我用过eth0,它给我的主机ip.

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