發現 Docker 的 IP 地址

51test2015 8年前發布 | 10K 次閱讀 Docker

使用Eclipse Che,我們用Docker容器編寫了很多實用程序。 它們占用空間且輕便,可以在許多不同的操作系統上運行,而無需用戶安裝附加軟件。

我們的許多實用程序還需要創建和管理Docker容器,所以當我們的代碼在Docker容器中運行時,我們需要與管理我們的Docker守護進程進行交互。 這意味著我們需要得到它的IP地址。

Docker有許多不同的風格——boot2docker,Docker for Windows / Mac和native for Linux。

你可以使用docker run -net = host codenvy / che-ip來測試實用程序。 這將下載Eclipse Che IP實用程序。 它的大小約為4.8 MB。

$ docker run — net=host codenvy/che-ip
192.168.65.2
$ docker images
REPOSITORY          TAG    IMAGE ID     CREATED     SIZE
codenvy/che-ip      latest a6bbac2f56dc 5 weeks ago 4

Dockerfile很簡單——它添加了一個shell腳本并將其作為命令的一部分運行。

FROM alpine:3.4 
COPY getip.sh /bin/getip.sh 
CMD [“/bin/getip.s

執行的腳本是一個簡單的腳本。 它首先確定docker綁定的網絡接口,然后使用該網絡接口獲取IP地址。 給定一個特定的網絡接口,docker容器使用ip實用程序獲取主機的IP地址(注意—net = host是 允許我們使用主機的網絡配置,而不是容器的網絡地址):

ip a show “${NETWORK_IF}” | grep ‘inet' | cut -d/ -f1 | awk ‘{print $2}'

Docker的不同實現將自己綁定到不同的網絡接口。 一些是可預測的,而另一些不是。 因此,我們需要根據底層的主機配置來確定使用的適當的網絡接口。

如果安裝的是Windows的 Docker 或Mac的 Docker ,那么我們要保證Docker在eth0上運行。

if uname -r | grep -q ‘moby’; then 
  if [ -d “/sys/class/net/eth0” ]; then 
    NETWORK_IF=eth0 
  fi
fi

否則,檢查會有點棘手。在這種情況下,Docker可以綁定到不同的 Ethernet 接口。我們知道Docker在非系統管理的VM中運行,因此我們在/ sys / class / net目錄下查詢,然后遍歷所有返回的值,找到綁定在eth的第一個接口,然后這是Docker的網絡接口。我們將要使用到的。

# If the NETWORK_IF has not been set, then search for it
if test -z ${NETWORK_IF}; then 
  for i in $(ls /sys/class/net); do 
    if [ ${i:0:3} = eth ]; then 
      NETWORK_IF=${i} 
    fi 
  done
fi

然而,如果這兩個函數都不返回有效的網絡接口,那么這是因為一些Linux發行版為其接口提供了專門的名稱,如CentOS的ensp0s3。在這種情況下,Docker通常綁定到docker0接口

# If the NETWORK_IF still not set, then search for docker0
if test -z ${NETWORK_IF} then 
  if [ -d “/sys/class/net/docker0” ]; then 
    NETWORK_IF=”docker0" 
  fi
fi

然而,如果該測試還是失敗,那么就無法確定當前的接口。我們實例程序搜索Docker的ip時,我們將獲取到位1的退出值,這個時候我們需要跟管理員交流,了解更多的信息。

Great work by Florent Benoit ,Florent Benoit開發的這個實用程序。 Dockerfile的相關腳本和源代碼在Che的GitHub庫上 Che’s GitHub repository 。

 

來自:https://www.oschina.net/translate/discovering-dockers-ip-address

 

 本文由用戶 51test2015 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!