写点什么

查看 Docker 容器的信息

作者:程序员欣宸
  • 2022 年 5 月 25 日
  • 本文字数:8206 字

    阅读完需:约 27 分钟

查看Docker容器的信息

欢迎访问我的 GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos


  • 对于运行在 Docker 环境的容器,有时我们想查询它们的一些基本信息,例如环境变量、hostname、ip 地址等,接下来我们以一个 tomcat 容器为例,看看有哪些方式来取得这些信息;

创建 tomcat 容器

  • 在 docker 环境下执行如下命令,即可创建一个名为 tomcat001 的 tomcat 容器:


docker run --name tomcat001 -idt tomcat
复制代码


  • 执行 docker ps 检查一下,容器创建成功:


root@maven:~# docker psCONTAINER ID    IMAGE   COMMAND             CREATED         STATUS          PORTS       NAMES98d119ed4c73    tomcat  "catalina.sh run"   10 minutes ago  Up 10 minutes   8080/tcp    tomcat001
复制代码


  • 获取信息常用的方式有如下三种:


  1. 进入容器内部获取信息;

  2. 执行 docker exec 命令;

  3. 执行 docker inspect -f 命令**(推荐方式)**;

第一种:进入容器内部获取信息

  • 执行以下命令可进入容器内部:


docker exec -it tomcat001 /bin/bash
复制代码


  • 此时已进入容器内部,所以分别执行 hostname、ip addr、env 这三个命令可以获取相关信息,如下:


root@98d119ed4c73:/usr/local/tomcat# hostname98d119ed4c73root@98d119ed4c73:/usr/local/tomcat# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host        valid_lft forever preferred_lft forever17: eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default     link/ether 02:42:ac:11:00:05 brd ff:ff:ff:ff:ff:ff link-netnsid 0    inet 172.17.0.5/16 scope global eth0       valid_lft forever preferred_lft forever    inet6 fe80::42:acff:fe11:5/64 scope link        valid_lft forever preferred_lft foreverroot@98d119ed4c73:/usr/local/tomcat# envLD_LIBRARY_PATH=/usr/local/tomcat/native-jni-libCATALINA_HOME=/usr/local/tomcatLANG=C.UTF-8HOSTNAME=98d119ed4c73OPENSSL_VERSION=1.1.0f-3+deb9u1TOMCAT_VERSION=8.5.24GPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 713DA88BE50911535FE716F5208B0AB1D63011C7 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23JAVA_HOME=/docker-java-home/jreTOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-libJAVA_VERSION=8u151PWD=/usr/local/tomcatHOME=/rootCA_CERTIFICATES_JAVA_VERSION=20170531+nmu1TOMCAT_MAJOR=8JAVA_DEBIAN_VERSION=8u151-b12-1~deb9u1TOMCAT_SHA1=9e26ba61c5665aafc849073edeb769be555283cdTERM=xtermSHLVL=1TOMCAT_ASC_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz.asc      https://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz.asc    https://www.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz.asc       https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz.ascPATH=/usr/local/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binTOMCAT_TGZ_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz  https://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz        https://www.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz   https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz_=/usr/bin/env
复制代码

第二种:执行 docker exec 命令

  • 不用进入容器,直接在 docker 环境执行 docker exec 容器名 容器内命令的方式也可以获取相关信息,举例如下:


  1. 获取容器的 hostname:docker exec tomcat001 hostname

  2. 获取容器 ip 地址:docker exec tomcat001 ip addr

  3. 获取容器环境变量:docker exec tomcat001 env


  • 执行结果如下所示:


root@maven:~# docker exec tomcat001 hostname98d119ed4c73root@maven:~# docker exec tomcat001 ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host        valid_lft forever preferred_lft forever17: eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default     link/ether 02:42:ac:11:00:05 brd ff:ff:ff:ff:ff:ff link-netnsid 0    inet 172.17.0.5/16 scope global eth0       valid_lft forever preferred_lft forever    inet6 fe80::42:acff:fe11:5/64 scope link        valid_lft forever preferred_lft foreverroot@maven:~# docker exec tomcat001 envPATH=/usr/local/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME=98d119ed4c73LANG=C.UTF-8JAVA_HOME=/docker-java-home/jreJAVA_VERSION=8u151JAVA_DEBIAN_VERSION=8u151-b12-1~deb9u1CA_CERTIFICATES_JAVA_VERSION=20170531+nmu1CATALINA_HOME=/usr/local/tomcatTOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-libLD_LIBRARY_PATH=/usr/local/tomcat/native-jni-libOPENSSL_VERSION=1.1.0f-3+deb9u1GPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 713DA88BE50911535FE716F5208B0AB1D63011C7 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23TOMCAT_MAJOR=8TOMCAT_VERSION=8.5.24TOMCAT_SHA1=9e26ba61c5665aafc849073edeb769be555283cdTOMCAT_TGZ_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz  https://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz        https://www.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz   https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gzTOMCAT_ASC_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz.asc      https://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz.asc    https://www.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz.asc       https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz.ascHOME=/root
复制代码

第三种:使用 docker inspect 命令

  • 推荐使用 docker inspect 来获取信息,这个命令会返回一个 json 字符串,里面以 key-value 的格式准备了该容器相关的信息,内容十分丰富,可以一次性取得全部内容,也可以返回指定 key 对应的信息;

  • 我们先来看看所有内容,执行命令 docker inspect tomcat001,可以看到如下信息:


root@maven:~# docker inspect tomcat001[    {        "Id": "98d119ed4c73c750e53353e77f7c6942803809a9d5dedc28d8b0f41ce58b8b17",        "Created": "2018-05-06T07:39:45.464492435Z",        "Path": "catalina.sh",        "Args": [            "run"        ],        "State": {            "Status": "running",            "Running": true,            "Paused": false,            "Restarting": false,            "OOMKilled": false,            "Dead": false,            "Pid": 22468,            "ExitCode": 0,            "Error": "",            "StartedAt": "2018-05-06T07:39:46.143092505Z",            "FinishedAt": "0001-01-01T00:00:00Z"        },        "Image": "sha256:3dcfe809147daf54fbdbe1f6886b4c49df63f28e2b3c8ac119fef6a7f7490d3c",        "ResolvConfPath": "/var/lib/docker/containers/98d119ed4c73c750e53353e77f7c6942803809a9d5dedc28d8b0f41ce58b8b17/resolv.conf",        "HostnamePath": "/var/lib/docker/containers/98d119ed4c73c750e53353e77f7c6942803809a9d5dedc28d8b0f41ce58b8b17/hostname",        "HostsPath": "/var/lib/docker/containers/98d119ed4c73c750e53353e77f7c6942803809a9d5dedc28d8b0f41ce58b8b17/hosts",        "LogPath": "/var/lib/docker/containers/98d119ed4c73c750e53353e77f7c6942803809a9d5dedc28d8b0f41ce58b8b17/98d119ed4c73c750e53353e77f7c6942803809a9d5dedc28d8b0f41ce58b8b17-json.log",        "Name": "/tomcat001",        "RestartCount": 0,        "Driver": "aufs",        "MountLabel": "",        "ProcessLabel": "",        "AppArmorProfile": "",        "ExecIDs": [            "cffec99f38514024f6a6e31e0e160d37d295041e4813a2245466be2dbc9c4037"        ],        "HostConfig": {            "Binds": null,            "ContainerIDFile": "",            "LogConfig": {                "Type": "json-file",                "Config": {}            },            "NetworkMode": "default",            "PortBindings": {},            "RestartPolicy": {                "Name": "no",                "MaximumRetryCount": 0            },            "AutoRemove": false,            "VolumeDriver": "",            "VolumesFrom": null,            "CapAdd": null,            "CapDrop": null,            "Dns": [],            "DnsOptions": [],            "DnsSearch": [],            "ExtraHosts": null,            "GroupAdd": null,            "IpcMode": "",            "Cgroup": "",            "Links": null,            "OomScoreAdj": 0,            "PidMode": "",            "Privileged": false,            "PublishAllPorts": false,            "ReadonlyRootfs": false,            "SecurityOpt": null,            "UTSMode": "",            "UsernsMode": "",            "ShmSize": 67108864,            "Runtime": "runc",            "ConsoleSize": [                0,                0            ],            "Isolation": "",            "CpuShares": 0,            "Memory": 0,            "NanoCpus": 0,            "CgroupParent": "",            "BlkioWeight": 0,            "BlkioWeightDevice": null,            "BlkioDeviceReadBps": null,            "BlkioDeviceWriteBps": null,            "BlkioDeviceReadIOps": null,            "BlkioDeviceWriteIOps": null,            "CpuPeriod": 0,            "CpuQuota": 0,            "CpuRealtimePeriod": 0,            "CpuRealtimeRuntime": 0,            "CpusetCpus": "",            "CpusetMems": "",            "Devices": [],            "DiskQuota": 0,            "KernelMemory": 0,            "MemoryReservation": 0,            "MemorySwap": 0,            "MemorySwappiness": -1,            "OomKillDisable": false,            "PidsLimit": 0,            "Ulimits": null,            "CpuCount": 0,            "CpuPercent": 0,            "IOMaximumIOps": 0,            "IOMaximumBandwidth": 0        },        "GraphDriver": {            "Name": "aufs",            "Data": null        },        "Mounts": [],        "Config": {            "Hostname": "98d119ed4c73",            "Domainname": "",            "User": "",            "AttachStdin": false,            "AttachStdout": false,            "AttachStderr": false,            "ExposedPorts": {                "8080/tcp": {}            },            "Tty": true,            "OpenStdin": true,            "StdinOnce": false,            "Env": [                "PATH=/usr/local/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",                "LANG=C.UTF-8",                "JAVA_HOME=/docker-java-home/jre",                "JAVA_VERSION=8u151",                "JAVA_DEBIAN_VERSION=8u151-b12-1~deb9u1",                "CA_CERTIFICATES_JAVA_VERSION=20170531+nmu1",                "CATALINA_HOME=/usr/local/tomcat",                "TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib",                "LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib",                "OPENSSL_VERSION=1.1.0f-3+deb9u1",                "GPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 713DA88BE50911535FE716F5208B0AB1D63011C7 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23",                "TOMCAT_MAJOR=8",                "TOMCAT_VERSION=8.5.24",                "TOMCAT_SHA1=9e26ba61c5665aafc849073edeb769be555283cd",                "TOMCAT_TGZ_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz \thttps://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz \thttps://www.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz \thttps://archive.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz",                "TOMCAT_ASC_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz.asc \thttps://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz.asc \thttps://www.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz.asc \thttps://archive.apache.org/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz.asc"            ],            "Cmd": [                "catalina.sh",                "run"            ],            "ArgsEscaped": true,            "Image": "tomcat",            "Volumes": null,            "WorkingDir": "/usr/local/tomcat",            "Entrypoint": null,            "OnBuild": null,            "Labels": {}        },        "NetworkSettings": {            "Bridge": "",            "SandboxID": "50244517221e6faff4217ff5453919f0c297b10434812ecfbf3decb3ce9860f6",            "HairpinMode": false,            "LinkLocalIPv6Address": "",            "LinkLocalIPv6PrefixLen": 0,            "Ports": {                "8080/tcp": null            },            "SandboxKey": "/var/run/docker/netns/50244517221e",            "SecondaryIPAddresses": null,            "SecondaryIPv6Addresses": null,            "EndpointID": "e9336feece03b1c87e6724253575ee50963e9bdc1f9618609fe641a8a939b87a",            "Gateway": "172.17.0.1",            "GlobalIPv6Address": "",            "GlobalIPv6PrefixLen": 0,            "IPAddress": "172.17.0.5",            "IPPrefixLen": 16,            "IPv6Gateway": "",            "MacAddress": "02:42:ac:11:00:05",            "Networks": {                "bridge": {                    "IPAMConfig": null,                    "Links": null,                    "Aliases": null,                    "NetworkID": "87eb4d08d408c08489db4460915aabed59210d04f8193364420d3719cd308d83",                    "EndpointID": "e9336feece03b1c87e6724253575ee50963e9bdc1f9618609fe641a8a939b87a",                    "Gateway": "172.17.0.1",                    "IPAddress": "172.17.0.5",                    "IPPrefixLen": 16,                    "IPv6Gateway": "",                    "GlobalIPv6Address": "",                    "GlobalIPv6PrefixLen": 0,                    "MacAddress": "02:42:ac:11:00:05"                }            }        }    }]
复制代码


  • 可见内容十分丰富;

  • 如果我们只对其中的一些感兴趣,例如 hostname、ip 地址、环境变量,该如何查看呢?

  • hostname:在返回值中,hostname 的位置如下图红框所示,



由上图可见,hostname 位于 Config.Hostname 这个节点位置,所以执行命令 docker inspect -f {{.Config.Hostname}} tomcat001 即可获取到 hostname,如下所示:


root@maven:~# docker inspect -f {{.Config.Hostname}} tomcat00198d119ed4c73
复制代码


  • ip 地址:执行命令 docker inspect -f {{.NetworkSettings.IPAddress}} tomcat001 即可获取到 ip 地址:


root@maven:~# docker inspect -f {{.NetworkSettings.IPAddress}} tomcat001172.17.0.5
复制代码


  • 环境变量:从完整的 inspect 信息中可以看到环境变量 Config.Env 的内容是个 json 数组,所以除了用 docker inspect -f {{.Config.Env}} tomcat001 获取所有环境变量信息,还可以用 docker inspect -f '{{index .Config.Env 1}}' tomcat001 命令获取数组中的某一条记录,如下:


root@maven:~# docker inspect -f '{{index .Config.Env 1}}' tomcat001LANG=C.UTF-8root@maven:~# docker inspect -f '{{index .Config.Env 2}}' tomcat001 JAVA_HOME=/docker-java-home/jre
复制代码


  • 至此,三种获取容器信息的方式已经全部列出,之所以在本文中推荐第三种,是因为有时我们会在 shell 脚本中获取容器信息,这时候用这种方式最为简单;

欢迎关注 InfoQ:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

发布于: 2022 年 05 月 25 日阅读数: 32
用户头像

搜索"程序员欣宸",一起畅游Java宇宙 2018.04.19 加入

前腾讯、前阿里员工,从事Java后台工作,对Docker和Kubernetes充满热爱,所有文章均为作者原创,个人Github:https://github.com/zq2599/blog_demos

评论

发布
暂无评论
查看Docker容器的信息_Java_程序员欣宸_InfoQ写作社区