在看到Docker Networking部分時,開始有些吃力,一是相關image未能成功下載無法進行測試,二是其中的概念多,須花大力氣研究。此處討論的是如何找出指定Docker Container(容器)的IP地址。參考自Sébastien Goasguen撰寫的Docker Cookbook (ISBN 978-1-491-91971-2)第三章Page70。

容器中默認分配的IP地址 * 172.[17-31].42.1/16 * 10.[0-255].42.1/16 * 192.168.[42-44].1/24

查找IP主要有以下幾種方式 * 使用docker inspect和Go template(模版)查找IP * 使用docker exec執行ip addr查找IP * 通過/etc/hosts執行cat /etc/hosts查找

docker ps * -l, --latest: Show the latest created container (includes all states)

Examples

Nginx

使用nginx鏡像,可通作docker pull nginx下載

#運行nginx鏡像
[flying@lemp ~]$ docker run -d --name nginx nginx
c2ac93d7de16305be1edd054f868b82c86710837f81b9a0894111c481d33c05d

#查看容器ID
[flying@lemp ~]$ docker ps -qa
c2ac93d7de16

#通過模版查看年IP,因模版報錯,將.NetworkSettings.IPAddress改稱NetworkSettings.IPAddress,須加點
[flying@lemp ~]$ docker inspect --format '{{ NetworkSettings.IPAddress }}' nginx
172.17.0.2

#通過ip add查看IP
[flying@lemp ~]$ docker exec -ti nginx ip add | grep global
    inet 172.17.0.2/16 scope global eth0

#在/etc/hosts中通過容器ID查找IP
[flying@lemp ~]$ docker exec -ti nginx cat /etc/hosts | grep nginx
[flying@lemp ~]$ docker exec -ti nginx cat /etc/hosts | grep 70c2d0cb7837
172.17.0.2	c2ac93d7de16
[flying@lemp ~]$ docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
c2ac93d7de16        nginx               "nginx -g 'daemon off"   About a minute ago   Up About a minute   80/tcp, 443/tcp     nginx
[flying@lemp ~]$

可以看到,此處有三種方式 * docker inspect --format '{{ NetworkSettings.IPAddress }}' nginx * 因模版報錯,將.NetworkSettings.IPAddress改稱NetworkSettings.IPAddress,須加點 * docker exec -ti nginx ip add | grep global * docker exec -ti nginx cat /etc/hosts | grep 70c2d0cb7837 * 此處的ID號可用docker ps -ql指代

CentOS7

使用centos7鏡像,可通過docker pull centos下載

#創建名爲centos的容器
[flying@lemp ~]$ docker run -d -ti --name centos centos7 /bin/sh
49aa6d96ce2d8118f58d8d1c45eb4316a1d53123c60dcd09a84613e3ee435214

#查看容器信息
[flying@lemp ~]$ docker ps -a | grep centos
49aa6d96ce2d        centos7             "/bin/sh"                10 seconds ago      Up 8 seconds                            centos

#方式1,因模版報錯,將.NetworkSettings.IPAddress改稱NetworkSettings.IPAddress,須加點
[flying@lemp ~]$ docker inspect --format '{{ NetworkSettings.IPAddress }}' centos
172.17.0.3

#方式2
[flying@lemp ~]$ docker exec -ti centos cat /etc/hosts | grep 49aa6d96ce2d
172.17.0.3	49aa6d96ce2d

#方式3 使用docker ps -lq獲取最近運行的容器ID
[flying@lemp ~]$ docker exec -ti centos cat /etc/hosts | grep `docker ps -ql`
172.17.0.3	49aa6d96ce2d
[flying@lemp ~]$

#方式4
[flying@lemp ~]$ docker exec -ti centos cat /etc/hosts | grep `docker ps -a | grep centos | awk '{print $1}'`
172.17.0.3	49aa6d96ce2d
[flying@lemp ~]$

實現方式與示例Nginx中相同。

其它實現方式,諸如構建函數之類,基本是這3種方式的衍生。

Bibliography


Change Log

  • 2016.04.06 21:52 Wed Asia/Beijing
    • 初稿完成

  • Note Time: 2016.04.06 21:52 Wed
  • Note Location: Asia/Beijing
  • Writer: lempstacker