Docker命令行参考(30) – docker network inspect显示详细的网络信息

  1. Usage:  docker network inspect [OPTIONS] NETWORK [NETWORK…]
  2.  
  3. Display detailed information on one or more networks
  4.  
  5. Options:
  6.   -f, –format string   Format the output using the given go template
  7.       –help            Print usage

返回一个或多个网络的信息。默认下,这个命令以JSON格式输出网络信息。例如,连接两个容器到默认的bridge网络:

  1. $ sudo docker run -itd –name=container1 busybox
  2. f2870c98fd504370fb86e59f32cd0753b1ac9b69b7d80566ffc7192a82b3ed27
  3.  
  4. $ sudo docker run -itd –name=container2 busybox
  5. bda12f8922785d1f160be70736f26c1e331ab8aaf8ed8d56728508f2e2fd4727

docker network inspect命令在其输出结果中包含容器ID。对于由多主机网络驱动程序支持的网络(如Overlay),此命令还会显示集群中其他主机上的容器endpoints。这些endpoints在输出中表示为“ep-{endpoint-id}”。 但是,对于群集范围的网络,仅显示该节点本地的endpoints。

  1. $ sudo docker network inspect bridge
  2. [
  3.     {
  4.         "Name": "bridge",
  5.         "Id": "b2b1a2cba717161d984383fd68218cf70bbbd17d328496885f7c921333228b0f",
  6.         "Scope": "local",
  7.         "Driver": "bridge",
  8.         "IPAM": {
  9.             "Driver": "default",
  10.             "Config": [
  11.                 {
  12.                     "Subnet": "172.17.42.1/16",
  13.                     "Gateway": "172.17.42.1"
  14.                 }
  15.             ]
  16.         },
  17.         "Internal": false,
  18.         "Containers": {
  19.             "bda12f8922785d1f160be70736f26c1e331ab8aaf8ed8d56728508f2e2fd4727": {
  20.                 "Name": "container2",
  21.                 "EndpointID": "0aebb8fcd2b282abe1365979536f21ee4ceaf3ed56177c628eae9f706e00e019",
  22.                 "MacAddress": "02:42:ac:11:00:02",
  23.                 "IPv4Address": "172.17.0.2/16",
  24.                 "IPv6Address": ""
  25.             },
  26.             "f2870c98fd504370fb86e59f32cd0753b1ac9b69b7d80566ffc7192a82b3ed27": {
  27.                 "Name": "container1",
  28.                 "EndpointID": "a00676d9c91a96bbe5bcfb34f705387a33d7cc365bac1a29e4e9728df92d10ad",
  29.                 "MacAddress": "02:42:ac:11:00:01",
  30.                 "IPv4Address": "172.17.0.1/16",
  31.                 "IPv6Address": ""
  32.             }
  33.         },
  34.         "Options": {
  35.             "com.docker.network.bridge.default_bridge": "true",
  36.             "com.docker.network.bridge.enable_icc": "true",
  37.             "com.docker.network.bridge.enable_ip_masquerade": "true",
  38.             "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
  39.             "com.docker.network.bridge.name": "docker0",
  40.             "com.docker.network.driver.mtu": "1500"
  41.         }
  42.     }
  43. ]

返回关于用户定义网络的信息:

  1. $ docker network create simple-network
  2. 69568e6336d8c96bbf57869030919f7c69524f71183b44d80948bd3927c87f6a
  3. $ docker network inspect simple-network
  4. [
  5.     {
  6.         "Name": "simple-network",
  7.         "Id": "69568e6336d8c96bbf57869030919f7c69524f71183b44d80948bd3927c87f6a",
  8.         "Scope": "local",
  9.         "Driver": "bridge",
  10.         "IPAM": {
  11.             "Driver": "default",
  12.             "Config": [
  13.                 {
  14.                     "Subnet": "172.22.0.0/16",
  15.                     "Gateway": "172.22.0.1/16"
  16.                 }
  17.             ]
  18.         },
  19.         "Containers": {},
  20.         "Options": {}
  21.     }
  22. ]

Docker命令行参考(29) – docker network create创建一个网络

  1. Usage:  docker network create [OPTIONS] NETWORK
  2.  
  3. Create a network
  4.  
  5. Options:
  6.       –aux-address value    Auxiliary IPv4 or IPv6 addresses used by Network
  7.                              driver (default map[])
  8.   -d, –driver string        Driver to manage the Network (default "bridge")
  9.       –gateway value        IPv4 or IPv6 Gateway for the master subnet (default [])
  10.       –help                 Print usage
  11.       –internal             Restrict external access to the network
  12.       –ip-range value       Allocate container ip from a sub-range (default [])
  13.       –ipam-driver string   IP Address Management Driver (default "default")
  14.       –ipam-opt value       Set IPAM driver specific options (default map[])
  15.       –ipv6                 Enable IPv6 networking
  16.       –label value          Set metadata on a network (default [])
  17.   -o, –opt value            Set driver specific options (default map[])
  18.       –subnet value         Subnet in CIDR format that represents a
  19.                              network segment (default [])

docker network create用来创建一个新的网络。其中–driver可以指定bridge或内置网络驱动overlay。如果安装了第三方的或自己编写的网络驱动,也可以指定到这里。如果不指定–driver选项,这个命令将自动为你创建一个bridge网络。当安装docker engine时它自动创建了一个bridge网络。这个网络对应于Engine传统上依赖的docker0 bridge。当使用docker run启动一个容器时会自动连接到这个bridge网络。不可以删除这个默认的bridge网络,不过可以使用docker network create命令来创建一个新的。

  1. $ docker network create -d bridge my-bridge-network

bridge网络是在单台Engine安装上的隔离网络。如果想创建一个跨多个运行着Engine的docker主机,必须创建一个overlay网络。不像bridge网络,在创建overlay网络之前,需要一些预存在的条件。这些条件是:

  • 一个能够访问的键值存储。Engine支持Consul, Etcd, 和ZooKeeper (分布式的存储)键值存储.
  • 集群中的节点能够连接到这个键值存储。
  • 在集群中的每台主机正确地配置Engine daemon。
  • dockerd支持overlay网络的选项是:

  • –cluster-store
  • –cluster-store-opt
  • –cluster-advertise
  • 虽然不是必须的,但推荐安装docker swarm来管理组成你的网络的集群。Swarm提供了成熟的发现和服务器管理工具,可以帮助你更好地管理集群。
    一旦满足了overlay网络的配置前提条件,只需要在集群中的任何一台主机执行创建网络命令:

    1. $ docker network create -d overlay my-multihost-network

    网络名称必须是唯一的。docker daemon虽然会尝试识别名称冲突,但无法保证都会工作。避免名称冲突这个是用户的责任。

    连接容器

    当运行一个容器时,使用–network标志来连接它到一个网络。下面的示例是把busybox容器添加到mynet网络:

    1. $ docker run -itd –network=mynet busybox

    如果想在容器已经在运行时把它添加到一个网络,使用docker network connect子命令。
    可以连接多个容器到一个相同的网络。一旦连接成功,这些容器就可以使用另一个容器的IP地址或名称来互相通信。对于支持多主机连接的overlay网络或自定义插件,那些连接到相同的多主机网络但在不同的Engine启动的容器也能够以这种方式来互相通信。
    可以使用docker network disconnect命令来从一个网络断开一个容器。

    指定高级选项

    当创建一个网络时,Engine默认为这个网络创建一个不重叠的子网。这个子网不是现有网络的细分。 它纯粹是为了寻址目的。可以直接使用–subnet选项来覆盖这个默认行为并指定一个子网。在一个bridge网络上创建一个单独的子网:

    1. $ docker network create –driver=bridge –subnet=192.168.0.0/16 br0

    除此之外,可以指定–gateway –ip-range和–aux-address选项。

    1. $ docker network create
    2.   –driver=bridge
    3.   –subnet=172.28.0.0/16
    4.   –ip-range=172.28.5.0/24
    5.   –gateway=172.28.5.254
    6.   br0

    如果没有指定–gateway,那么Engine将从首选的ip池中为你选择一个gateway。对于overlay网络和及类似功能的网络驱动,可以创建多个子网。

    1. $ docker network create -d overlay
    2.   –subnet=192.168.0.0/16
    3.   –subnet=192.170.0.0/16
    4.   –gateway=192.168.0.100
    5.   –gateway=192.170.0.100
    6.   –ip-range=192.168.1.0/24
    7.   –aux-address="my-router=192.168.1.5" –aux-address="my-switch=192.168.1.6"
    8.   –aux-address="my-printer=192.170.1.5" –aux-address="my-nas=192.170.1.6"
    9.   my-multihost-network

    要确保子网没有重叠。如果重叠了,网络创建将失败,然后Engine返回一个错误。

    bridge驱动选项

    当创建一个自定义的网络时,默认的网络驱动(如bridge)可以传递额外的选项。下面是这些选项且有与docker daemon选项等同的选项:

    选项 等同 描述
    com.docker.network.bridge.name 创建Linux bridge使用的bridge名称
    com.docker.network.bridge.enable_ip_masquerade –ip-masq 启用IP伪装
    com.docker.network.bridge.enable_icc –icc 启用或禁用容器间连接
    com.docker.network.bridge.host_binding_ipv4 –ip 绑定容器端口时默认绑定的IP
    com.docker.network.driver.mtu –mtu 设置容器网络MTU

    下面这些参数可以传递给docker network create,可以用于任何网络驱动。

    参数 等同 描述
    –gateway 主子网的IPv4或IPv6网关
    –ip-range –fixed-cidr 从一个IP范围分配IP
    –internal 限制外网网络连接到这个网络
    –ipv6 –ipv6 启用Ipv6网络
    –subnet –bip 子网

    例如,使用-o或–opt选项当发布端口时绑定的IP地址:

    1. $ docker network create
    2.     -o "com.docker.network.bridge.host_binding_ipv4"="172.19.0.1"
    3.     simple-network

    网络内部模式

    默认下,当连接一个容器到一个overlay网络时,docker同时也连接到bridge网络来提供外部连接。如果想创建一个与外部隔离的overlay网络,可以指定–internal选项。

    Docker命令行参考(28) – docker network connect连接容器到一个网络

    1. Usage:  docker network connect [OPTIONS] NETWORK CONTAINER
    2.  
    3. Connect a container to a network
    4.  
    5. Options:
    6.       –alias value           Add network-scoped alias for the container (default [])
    7.       –help                  Print usage
    8.       –ip string             IP Address
    9.       –ip6 string            IPv6 Address
    10.       –link value            Add link to another container (default [])
    11.       –link-local-ip value   Add a link-local address for the container (default [])

    这个命令用来连接一个容器到一个网络。可以通过名称或ID来连接容器。一旦连接成功,这个容器就能够与在同一网络的其它容器通信。

    1. $ docker network connect multi-host-network container1

    也可以使用docker run –network=命令启动一个容器并立即连接它到一个网络。

    1. $ docker run -itd –network=multi-host-network busybox

    可以指定你想分配到这个容器接口的IP地址。

    1. $ docker network connect –ip 10.10.36.122 multi-host-network container2

    可以使用–link选项来指定一个首选别名来连接到另一个容器。

    1. $ docker network connect –link container1:c1 multi-host-network container2

    –alias选项用来指定一个可以在将要连接的网络使用的别名。

    1. $ docker network connect –alias db –alias mysql multi-host-network container2

    可以暂停,重启和停止那么已连接到一个网络的容器。当容器运行时将立即连接到它所配置的网络。
    如果指定了容器IP,当重新启动已停止的容器时将重新应用这个IP。如果Ip地址不可用,容器将启动失败。保证这个IP一直可用的一个方法是在创建网络时指定一个–ip-range,然后从这个IP范围外选择一个静态IP地址。这样就确保了当容器不在这个网络时(容器停止时)这个IP地址不会分配给其它容器。

    1. $ docker network create –subnet 172.20.0.0/16 –ip-range 172.20.240.0/20 multi-host-network
    1. $ docker network connect –ip 172.20.128.2 multi-host-network container2

    要验证这个容器是否已连接到网络,使用docker network inspect命令。使用docker network disconnect来从网络删除容器。

    Docker命令行参考(27) – docker update更新容器配置

    1. Usage:  docker update [OPTIONS] CONTAINER [CONTAINER…]
    2.  
    3. Update configuration of one or more containers
    4.  
    5. Options:
    6.       –blkio-weight value          Block IO (relative weight), between 10 and 1000
    7.       –cpu-period int              Limit CPU CFS (Completely Fair Scheduler) period
    8.       –cpu-quota int               Limit CPU CFS (Completely Fair Scheduler) quota
    9.   -c, –cpu-shares int              CPU shares (relative weight)
    10.       –cpuset-cpus string          CPUs in which to allow execution (0-3, 0,1)
    11.       –cpuset-mems string          MEMs in which to allow execution (0-3, 0,1)
    12.       –help                        Print usage
    13.       –kernel-memory string        Kernel memory limit
    14.   -m, –memory string               Memory limit
    15.       –memory-reservation string   Memory soft limit
    16.       –memory-swap string          Swap limit equal to memory plus swap: ‘-1’ to enable unlimited swap
    17.       –restart string              Restart policy to apply when a container exits

    docker update命令可以动态地更新容器配置。可以使用这个命令限制容器在docker主机上使用太多的资源。可以在命令后台加一个或多个容器来批量更新配置。多个容器名称或ID之间使用空格分隔。
    除了–kernel-memory选项,其它的选项可以应用在运行或停止的容器。–kernel-memory只可以应用在已停止的容器。当在已停止的容器运行docker update命令时,更新的配置将在下一次重启容器时生效。
    另一个可以更新的命令是restart策略,当执行docker update之后,新的restart策略将立即生效。

    示例

    更新一个容器为cpu-shares=512

    1. $ docker update –cpu-shares 512 abebf7571666

    更新容器的cpu-shares和memory

    1. $ docker update –cpu-shares 512 -m 300M abebf7571666 hopeful_morse

    更新容器restart策略

    1. $ docker update –restart=on-failure:3 abebf7571666 hopeful_morse

    Docker命令行参考(26) – docker stats实时显示容器资源使用统计

    1. Usage:  docker stats [OPTIONS] [CONTAINER…]
    2.  
    3. Display a live stream of container(s) resource usage statistics
    4.  
    5. Options:
    6.   -a, –all         Show all containers (default shows just running)
    7.       –help        Print usage
    8.       –no-stream   Disable streaming stats and only pull the first result

    docker stats命令返回运行中的容器的实时数据流。要限制显示一个或多个指定的容器,以空格分隔指定容器名称或ID列表。可以指定一个已停止的容器,不过不会返回任何数据。
    如果想要更多详细的关于容器资源使用的信息。使用/containers/(id)/stats API endpoint。

    示例

    运行docker stats查看所有运行中的容器资源使用情况

    1. $ docker stats
    2. CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O
    3. 1285939c1fd3        0.07%               796 KiB / 64 MiB        1.21%               788 B / 648 B       3.568 MB / 512 KB
    4. 9c76f7834ae2        0.07%               2.746 MiB / 64 MiB      4.29%               1.266 KB / 648 B    12.4 MB / 0 B
    5. d1ea048f04e4        0.03%               4.583 MiB / 64 MiB      6.30%               2.854 KB / 648 B    27.7 MB / 0 B

    查看多个容器资源使用

    1. $ docker stats fervent_panini 5acfcb1b4fd1
    2. CONTAINER           CPU %               MEM USAGE/LIMIT     MEM %               NET I/O
    3. 5acfcb1b4fd1        0.00%               115.2 MiB/1.045 GiB   11.03%              1.422 kB/648 B
    4. fervent_panini      0.02%               11.08 MiB/1.045 GiB   1.06%               648 B/648 B

    Docker命令行参考(25) – docker rm删除容器

    1. Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER…]
    2.  
    3. Remove one or more containers
    4.  
    5. Options:
    6.   -f, –force     Force the removal of a running container (uses SIGKILL)
    7.       –help      Print usage
    8.   -l, –link      Remove the specified link
    9.   -v, –volumes   Remove the volumes associated with the container

    示例

    1. $ docker rm /redis
    2. /redis

    这将删除在link /redis下引用的容器。

    1. $ docker rm –link /webapp/redis
    2. /webapp/redis

    这将删除/webapp和/redis容器之间的底层链接,删除所有网络通信。

    1. $ docker rm –force redis
    2. redis

    在link /redis下引用的容器中的主进程将收到SIGKILL,然后容器将被删除。

    1. $ docker rm $(docker ps -a -q)

    这个命令将删除所有已停止的容器。命令docker ps -a -q返回所有退出的容器ID并传递它们到rm命令,然后删除。任何正在运行中的容器不会被删除。

    1. $ docker rm -v redis
    2. redis

    这个命令将删除redis容器及与之关联的数据卷。注意如果数据卷指定了一个名称,将不会被删除。

    1. $ docker create -v awesome:/foo -v /bar –name hello redis
    2. hello
    3. $ docker rm -v hello

    在这个示例中,/foo数据卷仍然保留,不过/bar数据卷将被删除。–volumes-from将继承这样的行为。

    Docker命令行参考(24) – docker ps列出容器

    1. Usage: docker ps [OPTIONS]
    2.  
    3. List containers
    4.  
    5. Options:
    6.   -a, –all             Show all containers (default shows just running)
    7.   -f, –filter value    Filter output based on conditions provided (default [])
    8.                         – exited=<int> an exit code of <int>
    9.                         – label=<key> or label=<key>=<value>
    10.                         – status=(created|restarting|running|paused|exited)
    11.                         – name=<string> a container’s name
    12.                         – id=<ID> a container’s ID
    13.                         – before=(<container-name>|<container-id>)
    14.                         – since=(<container-name>|<container-id>)
    15.                         – ancestor=(<image-name>[:tag]|<image-id>|<image@digest>)
    16.                           containers created from an image or a descendant.
    17.       –format string   Pretty-print containers using a Go template
    18.       –help            Print usage
    19.   -n, –last int        Show n last created containers (includes all states) (default -1)
    20.   -l, –latest          Show the latest created container (includes all states)
    21.       –no-trunc        Don’t truncate output
    22.   -q, –quiet           Only display numeric IDs
    23.   -s, –size            Display total file sizes

    运行docker ps –no-trunc显示两2个链接容器。

    1. $ docker ps –no-trunc
    2.  
    3. CONTAINER ID        IMAGE                        COMMAND                CREATED              STATUS              PORTS               NAMES
    4. 4c01db0b339c        ubuntu:12.04                 bash                   17 seconds ago       Up 16 seconds       3300-3310/tcp       webapp
    5. d7886598dbe2        crosbymichael/redis:latest   /redis-server –dir    33 minutes ago       Up 33 minutes       6379/tcp            redis,webapp/db

    docker ps命令默认只显示运行中的容器。要查看所有的容器,使用-a (或–all)标志:

    1. $ docker ps -a

    docker ps将暴露的端口组合到单个范围中(如果可能)。 例如,暴露TCP端口100,101,102的容器在PORTS列中显示100-102 / tcp。

    过滤

    过滤标志(-f或–filter)格式是key=value。如果超过一个过滤,就传递多个标志(如–filter “foo=bar” –filter “bif=baz”)
    目前支持的过滤有:

  • id(容器id)
  • label(label=或label=<key=>)
  • name(容器名称)
  • exited(整数 – 容器退出码。只在使用–all才有用)
  • status (created restarting running paused exited dead)
  • ancestor([:], or ) – 过滤从指定镜像创建的容器。
  • before (容器的名称或id) – 过滤在给定id或名称之前创建的容器。
  • since (容器的名称或id) – 过滤在给定id或名称之后创建的容器。
  • isolation (default process hyperv) (Windows daemon only)
  • volume (数据卷名称或挂载点) – 过滤挂载有指定数据卷的容器。
  • network (网络id或名称) – 过滤连接到指定网络的容器。
  • Label

    label过滤器基于一个label的存在或label和值来匹配容器。
    下面的过滤器指定label color不管它什么值来匹配容器。

    1. $ docker ps –filter "label=color"
    2.  
    3. CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    4. 673394ef1d4c        busybox             "top"               47 seconds ago      Up 45 seconds                           nostalgic_shockley
    5. d85756f57265        busybox             "top"               52 seconds ago      Up 51 seconds                           high_albattani

    下面过滤器指定label color及值blue来匹配容器。

    1. $ docker ps –filter "label=color=blue"
    2.  
    3. CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
    4. d85756f57265        busybox             "top"               About a minute ago   Up About a minute                       high_albattani

    Name

    name过滤器全匹配或部分匹配容器名称。
    下面的过滤器匹配容器名称包含nostalgic_stallman字符串的容器。

    1. $ docker ps –filter "name=nostalgic_stallman"
    2.  
    3. CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    4. 9b6247364a03        busybox             "top"               2 minutes ago       Up 2 minutes                            nostalgic_stallman

    也可以匹配名称中的部分字符:

    1. $ docker ps –filter "name=nostalgic"
    2.  
    3. CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    4. 715ebfcee040        busybox             "top"               3 seconds ago       Up 1 seconds                            i_am_nostalgic
    5. 9b6247364a03        busybox             "top"               7 minutes ago       Up 7 minutes                            nostalgic_stallman
    6. 673394ef1d4c        busybox             "top"               38 minutes ago      Up 38 minutes                           nostalgic_shockley

    Exited

    exited过滤器基于容器退出码匹配。例如,过滤那么成功退出的容器。

    1. $ docker ps -a –filter ‘exited=0’
    2.  
    3. CONTAINER ID        IMAGE             COMMAND                CREATED             STATUS                   PORTS                      NAMES
    4. ea09c3c82f6e        registry:latest   /srv/run.sh            2 weeks ago         Exited (0) 2 weeks ago   127.0.0.1:5000->5000/tcp   desperate_leakey
    5. 106ea823fe4e        fedora:latest     /bin/sh -c ‘bash -l’   2 weeks ago         Exited (0) 2 weeks ago                              determined_albattani
    6. 48ee228c9464        fedora:20         bash                   2 weeks ago         Exited (0) 2 weeks ago                              tender_torvalds

    Killed容器

    可以使用一个过滤器来过滤出那么以退出码137退出的容器,意味着此容器收到了SIGKILL(9)信号。

    1. $ docker ps -a –filter ‘exited=137’
    2. CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                       PORTS               NAMES
    3. b3e1c0ed5bfe        ubuntu:latest       "sleep 1000"           12 seconds ago      Exited (137) 5 seconds ago                       grave_kowalevski
    4. a2eb5558d669        redis:latest        "/entrypoint.sh redi   2 hours ago         Exited (137) 2 hours ago                         sharp_lalande

    下面的任何一种情况都会导致以137代码退出:

  • 手动终止容器的init进程
  • docker kill终止容器
  • docker daemon重启终止了所有运行中的容器
  • Status

    status过滤器通过status来匹配容器。可以使用created, restarting, running, paused, exited 和 dead来过滤。例如,过滤状态码running的容器:

    1. $ docker ps –filter status=running
    2.  
    3. CONTAINER ID        IMAGE                  COMMAND             CREATED             STATUS              PORTS               NAMES
    4. 715ebfcee040        busybox                "top"               16 minutes ago      Up 16 minutes                           i_am_nostalgic
    5. d5c976d3c462        busybox                "top"               23 minutes ago      Up 23 minutes                           top
    6. 9b6247364a03        busybox                "top"               24 minutes ago      Up 24 minutes                           nostalgic_stallman

    过滤paused容器:

    1. $ docker ps –filter status=paused
    2.  
    3. CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    4. 673394ef1d4c        busybox             "top"               About an hour ago   Up About an hour (Paused)                       nostalgic_shockley

    Ancestor

    ancestor过滤器基于容器的镜像来匹配容器。过滤器支持以下镜像表示方式:

  • image
  • image:tag
  • image:tag@digest
  • short-id
  • full-id
  • 如果不指定tag,就使用latest tag。例如,过滤那么使用latest ubuntu镜像的容器:

    1. $ docker ps –filter ancestor=ubuntu
    2.  
    3. CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
    4. 919e1179bdb8        ubuntu-c1           "top"               About a minute ago   Up About a minute                       admiring_lovelace
    5. 5d1e4a540723        ubuntu-c2           "top"               About a minute ago   Up About a minute                       admiring_sammet
    6. 82a598284012        ubuntu              "top"               3 minutes ago        Up 3 minutes                            sleepy_bose
    7. bab2a34ba363        ubuntu              "top"               3 minutes ago        Up 3 minutes                            focused_yonath

    匹配基于ubuntu-c1镜像的容器,在这里ubuntu-c1是基于ubuntu创建的。

    1. $ docker ps –filter ancestor=ubuntu-c1
    2.  
    3. CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
    4. 919e1179bdb8        ubuntu-c1           "top"               About a minute ago   Up About a minute                       admiring_lovelace

    匹配基于ubuntu,版本12.04.5镜像的容器:

    1. $ docker ps –filter ancestor=ubuntu:12.04.5
    2.  
    3. CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
    4. 82a598284012        ubuntu:12.04.5      "top"               3 minutes ago        Up 3 minutes                            sleepy_bose

    下面匹配基于数据层d0e008c6cf02或在数据层堆栈中有这个数据层的镜像的容器。

    1. $ docker ps –filter ancestor=d0e008c6cf02
    2.  
    3. CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
    4. 82a598284012        ubuntu:12.04.5      "top"               3 minutes ago        Up 3 minutes                            sleepy_bose

    Before

    before过滤器显示在给定容器id或名称之前创建的容器。例如,目前有这些容器:

    1. $ docker ps
    2.  
    3. CONTAINER ID        IMAGE       COMMAND       CREATED              STATUS              PORTS              NAMES
    4. 9c3527ed70ce        busybox     "top"         14 seconds ago       Up 15 seconds                          desperate_dubinsky
    5. 4aace5031105        busybox     "top"         48 seconds ago       Up 49 seconds                          focused_hamilton
    6. 6e63f6ff38b0        busybox     "top"         About a minute ago   Up About a minute                      distracted_fermat

    过滤在容器9c3527ed70ce之前创建的容器:

    1. $ docker ps -f before=9c3527ed70ce
    2.  
    3. CONTAINER ID        IMAGE       COMMAND       CREATED              STATUS              PORTS              NAMES
    4. 4aace5031105        busybox     "top"         About a minute ago   Up About a minute                      focused_hamilton
    5. 6e63f6ff38b0        busybox     "top"         About a minute ago   Up About a minute                      distracted_fermat

    Since

    since过滤器显示在给定容器id或名称之后创建的容器。例如,过滤出在6e63f6ff38b0之后创建的容器:

    1. $ docker ps -f since=6e63f6ff38b0
    2.  
    3. CONTAINER ID        IMAGE       COMMAND       CREATED             STATUS              PORTS               NAMES
    4. 9c3527ed70ce        busybox     "top"         10 minutes ago      Up 10 minutes                           desperate_dubinsky
    5. 4aace5031105        busybox     "top"         10 minutes ago      Up 10 minutes                           focused_hamilton

    Volume

    volume过滤器显示挂载有指定数据卷或有一个数据卷挂载到指定路径的容器:

    1. $ docker ps –filter volume=remote-volume –format "table {{.ID}}t{{.Mounts}}"
    2. CONTAINER ID        MOUNTS
    3. 9c3527ed70ce        remote-volume
    4.  
    5. $ docker ps –filter volume=/data –format "table {{.ID}}t{{.Mounts}}"
    6. CONTAINER ID        MOUNTS
    7. 9c3527ed70ce        remote-volume

    Network

    network过滤器显示连接到指定网络的容器。
    下面过滤出匹配连接到网络为net1的容器:

    1. $ docker run -d –net=net1 –name=test1 ubuntu top
    2. $ docker run -d –net=net2 –name=test2 ubuntu top
    3.  
    4. $ docker ps –filter network=net1
    5.  
    6. CONTAINER ID        IMAGE       COMMAND       CREATED             STATUS              PORTS               NAMES
    7. 9d4893ed80fe        ubuntu      "top"         10 minutes ago      Up 10 minutes                           test1

    network过滤器可以基于网络名称和id来匹配。下面的示例显示连接到net1网络的容器,使用的是网络id来匹配:

    1. $ docker network inspect –format "{{.ID}}" net1
    2.  
    3.  
    4. 8c0b4110ae930dbe26b258de9bc34a03f98056ed6f27f991d32919bfe401d7c5
    5.  
    6. $ docker ps –filter network=8c0b4110ae930dbe26b258de9bc34a03f98056ed6f27f991d32919bfe401d7c5
    7.  
    8. CONTAINER ID        IMAGE       COMMAND       CREATED             STATUS              PORTS               NAMES
    9. 9d4893ed80fe        ubuntu      "top"         10 minutes ago      Up 10 minutes                           test1

    格式化

    格式化选项(–format)使用Go模板来美化打印容器输出。
    Go模板有效的占位符如下:

  • .ID 容器ID
  • .Image 镜像ID
  • .Command Quoted command
  • .CreatedAt 创建容器的时间点.
  • .RunningFor 从容器创建到现在过去的时间.
  • .Ports 暴露的端口.
  • .Status 容器状态.
  • .Size 容器占用硬盘大小.
  • .Names 容器名称.
  • .Labels 容器所有的标签.
  • .Label 指定label的值 例如'{{.Label “com.docker.swarm.cpu”}}’
  • .Mounts 挂载到这个容器的数据卷名称
  • 示例1:

    1. $ docker ps –format "{{.ID}}: {{.Command}}"
    2.  
    3.  
    4. a87ecb4f327c: /bin/sh -c #(nop) MA
    5. 01946d9d34d8: /bin/sh -c #(nop) MA
    6. c1d3b0166030: /bin/sh -c yum -y up
    7. 41d50ecd2f57: /bin/sh -c #(nop) MA

    示例2:

    1. $ docker ps –format "table {{.ID}}t{{.Labels}}"
    2.  
    3.  
    4. CONTAINER ID        LABELS
    5. a87ecb4f327c        com.docker.swarm.node=ubuntu,com.docker.swarm.storage=ssd
    6. 01946d9d34d8
    7. c1d3b0166030        com.docker.swarm.node=debian,com.docker.swarm.cpu=6
    8. 41d50ecd2f57        com.docker.swarm.node=fedora,com.docker.swarm.cpu=3,com.docker.swarm.storage=ssd

    Docker命令行参考(23) – docker port列出容器的端口映射

    1. Usage:  docker port CONTAINER [PRIVATE_PORT[/PROTO]]
    2.  
    3. List port mappings or a specific mapping for the container
    4.  
    5. Options:
    6.       –help   Print usage

    docker port用来找出容器所有的端口映射,或指定一个端口的映射关系。
    例如:

    1. $ docker ps
    2. CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                            NAMES
    3. b650456536c7        busybox:latest      top                 54 minutes ago      Up 54 minutes       0.0.0.0:1234->9876/tcp, 0.0.0.0:4321->7890/tcp   test
    4. $ docker port test
    5. 7890/tcp -> 0.0.0.0:4321
    6. 9876/tcp -> 0.0.0.0:1234
    7. $ docker port test 7890/tcp
    8. 0.0.0.0:4321
    9. $ docker port test 7890/udp
    10. 2014/06/24 11:53:36 Error: No public port ‘7890/udp’ published for test
    11. $ docker port test 7890
    12. 0.0.0.0:4321

    Docker命令行参考(22) – docker pause暂停容器内所有的进程

    1. Usage:  docker pause CONTAINER [CONTAINER…]
    2.  
    3. Pause all processes within one or more containers
    4.  
    5. Options:
    6.       –help   Print usage

    docker pause命令使用cgroups freezer挂起容器中的所有进程。传统上使用SIGSTOP信号来挂起一个进程,不过进程会察觉到挂起操作。使用cgroups freezer时,进程感知不到和无法捕获它正在挂起和随后的恢复。
    更多的信息查看cgroups freezer文档

    Docker命令行参考(21) – docker logs获取容器的日志

    1. Usage:  docker logs [OPTIONS] CONTAINER
    2.  
    3. Fetch the logs of a container
    4.  
    5. Options:
    6.       –details        Show extra details provided to logs
    7.   -f, –follow         Follow log output
    8.       –help           Print usage
    9.       –since string   Show logs since timestamp
    10.       –tail string    Number of lines to show from the end of the logs (default "all")
    11.   -t, –timestamps     Show timestamps

    docker logs命令批量获取运行时出现的日志。

    注意:这个命令只对那么使用json-file和journald日志驱动的容器有效。

    docker logs –follow命令将持续从容器STDOUT和STDERR输出新的日志。
    对–tail参数指定负数或非正整数是无效的,在这种情况下将设置这个值为all。
    docker logs –timestamps命令将为每条日志添加一个RFC3339Nano时间戳,例如2014-09-16T06:17:46.000000000Z。
    docker logs –details命令将添加额外的属性,例如环境变量和labels,这些额外的属性是在创建容器时通过–log-opt选项指定的。
    –since选项显示从一个给定日期之后的容器日志。这个选项可以与–follow,–tail混合使用。