2015-10-13 356 views
4

我正在使用docker並使用腳本運行。我想在Docker中用主機IP地址更改其中一個配置。如何在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 run -t -i $EXPOSE_PORTS $IMAGE "[email protected]" 
+0

你想實現什麼? – Smutje

+0

@Smutje我想將本地機器IP地址傳遞給碼頭集裝箱。在我的腳本中$ IP給出的容器地址不是我的本地主機。 –

回答

5

正如在「How to get the ip address of the docker host from inside a docker container」所提到的,您可以直接從容器訪問:

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

但是,as commented,當您使用泊塢窗橋(默認)的容器,這將輸出的橋樑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.]+') 

(摘自 「Is there an easy way to programmatically extract IP address?」)

由於OP Pawan Sharmacomments

docker0給主機泊塢窗IP。我用eth0,它給我的主機IP。

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

謝謝。 docker0給主機碼頭IP。我用eth0它給我的主機ip。這是正確還是通用的解決方案? –

+0

@PawanSharma好的。我已經編輯了相應的答案,幷包含您的評論以獲取更多可見性。 – VonC

+0

這在Windows上不適用於我。我總是得到一個172.x.x.x IP,但不是我正在尋找的10.0.75.X IP。 – Huber

1

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

但我不太清楚你想要什麼。 類似於應通過主機IP訪問的應用程序?