Docker实践(23) – 找出容器IP

虽然Docker命令让你能够访问有关镜像和容器的信息,但有时你想要了解这些Docker对象的内部元数据,如IP地址。

问题

你想找出容器IP地址。

解决方法

使用docker inspect命令获取和过滤容器元数据。

讨论

通过docker inspect命令能得到JSON格式的docker内部元数据。这会得到很多数据,所以下面只列出一部分。
镜像的原始数据:

  1. $ docker inspect ubuntu | head
  2. [{
  3.     "Architecture": "amd64",
  4.     "Author": "",
  5.     "Comment": "",
  6.     "Config": {
  7.         "AttachStderr": false,
  8.         "AttachStdin": false,
  9.         "AttachStdout": false,
  10.         "Cmd": [
  11.             "/bin/bash"
  12. $

你可以通过名称或ID来查看镜像和容器的信息。当然它们的元数据会有所不同 – 比如容器会有“state”字段,而镜像没有。
你可以通过docker inspect命令,带一个format参数来找出容器的IP:

  1. docker inspect –format ‘{{.NetworkSettings.IPAddress}}’

这个命令对于自动化可能会比较有用,而且这个命令获取的IP比通过其它docker命令要可靠得多。下面的命令是获取所有运行的容器的IP并尝试ping它们。

  1. $ docker ps -q | xargs docker inspect –format='{{.NetworkSettings.IPAddress}}’ | xargs -l1 ping -c1
  2. PING 172.17.0.5 (172.17.0.5) 56(84) bytes of data.
  3. 64 bytes from 172.17.0.5: icmp_seq=1 ttl=64 time=0.095 ms
  4. — 172.17.0.5 ping statistics —
  5. 1 packets transmitted, 1 received, 0% packet loss, time 0ms
  6. rtt min/avg/max/mdev = 0.095/0.095/0.095/0.000 ms