如何管理Docker容器?
如何运行不同的Docker容器。
在向我们展示一些管理Docker容器的命令行示例之前,让我简要介绍一下重要术语
Docker守护程序:管理Docker容器和镜像的守护程序。
我们简称为Docker。Docker引擎:这是Docker基础架构和工作流程
Docker主机或者Docker节点:这是运行Docker引擎的机器。
Docker 镜像:
这是我们可以作为容器运行的内容或者包。
它提供了基本的操作系统和应用程序,并且仅包含只读层,不包含读写层。Container:
镜像的实例化版本。
这是我们在图像顶部运行的实例,它包含所有只读层以及添加在顶部的读写层。
注意:因此,镜像被实例化,并且在Docker上运行时称为容器。
图像只是不可变的内容,实例化了容器,在顶部添加了一个可变层,它可以具有停止,启动和运行等状态。
检查Docker的状态
在开始配置之前,重要的是要确保我们的docker服务正在运行
[root@node1 ~]# systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2016-12-20 20:20:49 IST; 16h ago Docs: https://docs.docker.com Main PID: 1153 (dockerd) Tasks: 32 Memory: 147.3M CGroup: /system.slice/docker.service ├─1153 /usr/bin/dockerd -H unix:// ├─1289 containerd --config /var/run/docker/containerd/containerd.toml --log-level info └─4299 containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/3cf05b3c26b75eb15f181b9c35d55808e49e1935c4e9d3dedbc71... Dec 21 12:29:12 node1.example.com dockerd[1153]: time="2016-12-21T12:29:12.179448931+05:30" level=info msg="shim reaped" id=9c79938cb73755e96de571bcd3a513a6262e1005f5e2679...25b48357aa2 Dec 21 12:29:12 node1.example.com dockerd[1153]: time="2016-12-21T12:29:12.189968766+05:30" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/task...TaskDelete" Dec 21 12:29:22 node1.example.com dockerd[1153]: time="2016-12-21T12:29:22.762710751+05:30" level=info msg="shim containerd-shim started" address="/containerd-shim/moby/e2...se pid=3843 Dec 21 12:29:23 node1.example.com dockerd[1153]: time="2016-12-21T12:29:23.180260570+05:30" level=info msg="shim reaped" id=e28f5a6fd1cbf8c04cefd94fdf8cdf8cdc40dd7723f83e8...4ee43925900 Dec 21 12:29:23 node1.example.com dockerd[1153]: time="2016-12-21T12:29:23.190553007+05:30" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/task...TaskDelete" Dec 21 12:29:41 node1.example.com dockerd[1153]: time="2016-12-21T12:29:41.052677343+05:30" level=info msg="shim containerd-shim started" address="/containerd-shim/moby/9e...se pid=3957 Dec 21 12:29:41 node1.example.com dockerd[1153]: time="2016-12-21T12:29:41.383996326+05:30" level=info msg="shim reaped" id=9edcb088fe31716fc727b7291e7972f4cb030ff51e29db8...cdaa53bd807 Dec 21 12:29:41 node1.example.com dockerd[1153]: time="2016-12-21T12:29:41.394072301+05:30" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/task...TaskDelete" Dec 21 12:31:31 node1.example.com dockerd[1153]: time="2016-12-21T12:31:31.571196111+05:30" level=error msg="Error setting up exec command in container 9edcb088fe31716fc72...ot running" Dec 21 12:33:12 node1.example.com dockerd[1153]: time="2016-12-21T12:33:12.263039550+05:30" level=info msg="shim containerd-shim started" address="/containerd-shim/moby/13...se pid=4299 Hint: Some lines were ellipsized, use -l to show in full.
使用普通用户管理Docker
一旦安装了docker,我们的系统上就会有一个组" docker"可用。
属于docker组的任何用户都将被允许执行docker相关命令
[root@node1 ~]# grep docker /etc/group docker:x:980:hynman
因此,让我们将"hynman
"添加到Docker组中
[root@node1 ~]# usermod -aG docker hynman
下一步将用户切换为'hynman
'
[root@node1 ~]# su - hynman Last login: Wed Dec 19 15:41:51 IST 2016 from 10.0.2.2 on pts/1
获取有关可用Docker容器的信息
Docker信息提供了有关我们正在运行的当前Docker环境的信息。
因此,我们没有存储在该计算机上的容器和镜像,我们可以看到刚刚配置的"存储驱动程序",以及所有不同的存储容量,例如所使用的数据空间,并且可以找到有关该磁盘的更多信息。
整个docker环境。
docker info命令是一个有用的命令,用于验证docker当前正在执行的操作到底是什么
[hynman@node1 ~]$docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 18.09.0 Storage Driver: devicemapper Pool Name: vg_docker-thinpool Pool Blocksize: 524.3kB Base Device Size: 10.74GB Backing Filesystem: xfs Udev Sync Supported: true Data Space Used: 20.45MB Data Space Total: 8.154GB Data Space Available: 8.133GB Metadata Space Used: 8.434MB Metadata Space Total: 83.89MB Metadata Space Available: 75.45MB Thin Pool Minimum Free Space: 815.3MB Deferred Removal Enabled: true Deferred Deletion Enabled: true Deferred Deleted Device Count: 0 Library Version: 1.02.149-RHEL7 (2016-07-20) Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: c4446665cb9c30056f4998ed953e6d4ff22c7c39 runc version: 4fc53a81fb7c994640722ac585fa9ca548971871 init version: fec3683 Security Options: seccomp Profile: default Kernel Version: 3.10.0-957.1.3.el7.x86_64 Operating System: CentOS Linux 7 (Core) OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 3.701GiB Name: node1.example.com ID: 2JHJ:HICZ:HHVG:NUOA:FCAK:EFJI:RDAF:LFPH:XZUA:WFER:DI7I:LOEI Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false Product License: Community Engine
Docker Hello World
现在让我们从第一个命令开始,即docker run hello-world。
Docker Hub提供了一个名为hello world
的docker镜像,允许我们运行hello world。
由于docker镜像在我们的系统上不可用,因此它正在从存储库中提取(下载)该镜像,这将需要一些时间。
[hynman@node1 ~]$docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world d1725b59e92d: Pull complete Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.
我们可以在屏幕上看到此图片的摘要。
所以
Docker client
连接了Docker daemon
,Docker daemon从Docker Hub中拉开了世界,
和Docker daemon从该镜像创建了一个新容器,该容器运行可执行文件,该可执行文件生成我们当前正在读取的输出。
"因此,基本上,它下载了一个图像,启动了容器,运行了命令,然后退出了。
"
要获得当前正在运行的Docker容器的概述,请使用'docker ps
'
[hynman@node1 ~]$docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
如果我们想获得所有正在运行但已退出的Docker容器的概述,请使用'docker ps -a
'
[hynman@node1 ~]$docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ea540759dd3c hello-world "/hello" 31 seconds ago Exited (0) 29 seconds ago eloquent_chandrasekhar
现在这也是有用的信息,因为我们可以看到用来运行命令" hello"的hello世界图像。
它是在31秒前创建的,而在29秒前退出的,其逻辑名称是eloquent_chandrasekhar。
这些逻辑名称是自动生成的,我们可以使用它们以更简单的方式来管理容器。
我的意思是,令人眼花gate乱的盖茨比该容器ID的键入要容易一些。
下载ubuntu容器镜像
要尝试更具野心的东西,我们可以使用" bash"运行" Ubuntu容器"。
如果本地计算机上尚不存在Ubuntu镜像,则此命令将下载Ubuntu镜像,它将启动"交互"终端模式,在该模式下执行bash命令,结果是我们突然进入了bash shell。
[hynman@node1 ~]$docker run -it ubuntu bash Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu 32802c0cfa4d: Pull complete da1315cffa03: Pull complete fa83472a3562: Pull complete f85999a86bef: Pull complete Digest: sha256:6d0e0c26489e33f5a6f0020edface2727db9489744ecc9b4f50c7fa671f23c49 Status: Downloaded newer image for ubuntu:latest
root@3cf05b3c26b7:/# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.3 0.0 18496 2004 pts/0 Ss 05:53 0:00 bash root 10 0.0 0.0 34388 1464 pts/0 R+ 05:53 0:00 ps aux
另外,其他命令的确与该容器中的内容有关。
我们可以看到此容器正在使用的精简配置卷,大小为10 GB,使用的大小为107 MB。
它是精简配置的,因此实际上并没有使用计算机上的任何存储。
root@3cf05b3c26b7:/# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/docker-253:0-529717-a4cf6f4fbccc8c390d4558e357ecb99574fc8bcebaf6b0df498a6a1811ada898 10G 107M 9.9G 2% / tmpfs 64M 0 64M 0% /dev tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/centos-root 16G 8.2G 6.5G 56% /etc/hosts shm 64M 0 64M 0% /dev/shm tmpfs 1.9G 0 1.9G 0% /proc/acpi tmpfs 1.9G 0 1.9G 0% /proc/scsi tmpfs 1.9G 0 1.9G 0% /sys/firmware
如何从容器中退出?
要从容器中退出,请先使用control + p,再使用control + q,这将使我们回到正常的shell环境。
root@3cf05b3c26b7:/# [hynman@node1 ~]$
现在,如果我们使用ps检查任何正在运行的容器,我们将看到'ubuntu`。
[hynman@node1 ~]$docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3cf05b3c26b7 ubuntu "bash" 2 minutes ago Up 2 minutes suspicious_lamport
如何停止容器?
现在要停止容器,我们只需运行" docker stop",然后运行容器的名称,对我们来说就是" suspicious_lamport"。
[hynman@node1 ~]$docker stop suspicious_lamport suspicious_lamport
接下来,再次检查状态,什么都不显示。
因此,目前没有正在运行的容器
[hynman@node1 ~]$docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
现在让我们获得在系统上运行的容器的历史记录。
它显示" ubuntu"是在" 4分钟前"创建的,但在" 33秒前"退出了。
[hynman@node1 ~]$docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3cf05b3c26b7 ubuntu "bash" 4 minutes ago Exited (0) 33 seconds ago suspicious_lamport ea540759dd3c hello-world "/hello" 7 minutes ago Exited (0) 7 minutes ago eloquent_chandrasekhar [hynman@node1 ~]$docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3cf05b3c26b7 ubuntu "bash" 9 seconds ago Up 9 seconds suspicious_lamport
如何连接到Docker容器?
一旦启动了非交互模式的docker容器,如果要其中运行某些内容,则可以使用docker exec。
[hynman@node1 ~]$docker exec -it suspicious_lamport bash root@3cf05b3c26b7:/# read escape sequence
因此,docker exec
是一个有用的命令,可让我们进入容器并在容器内执行特定任务。
现在要退出容器,请先使用" control + p",再使用" control + q",这将使我们回到正常的shell环境。
如何删除Docker容器?
如果要从系统中删除Docker容器以节省一些磁盘空间,也可以这样做。
我们应该使用docker rm,后跟容器的名称,在本例中为suspicious_lamport。
[hynman@node1 ~]$docker rm suspicious_lamport suspicious_lamport
这已删除了容器。
[hynman@node1 ~]$docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ea540759dd3c hello-world "/hello" 7 minutes ago Exited (0) 7 minutes ago eloquent_chandrasekhar
如果我们还想删除镜像,那也是可能的,我们将使用docker rmi
来删除镜像。
因此docker rmi ubuntu
将删除Ubuntu镜像中可用的所有不同层
[hynman@node1 ~]$docker rmi ubuntu Untagged: ubuntu:latest Untagged: ubuntu@sha256:6d0e0c26489e33f5a6f0020edface2727db9489744ecc9b4f50c7fa671f23c49 Deleted: sha256:93fd78260bd1495afb484371928661f63e64be306b7ac48e2d13ce9422dfee26 Deleted: sha256:1c8cd755b52d6656df927bc8716ee0905853fada7ca200e4e6954bd010e792bb Deleted: sha256:9203aabb0b583c3cf927d2caf6ba5b11124b0a23f8d19afadb7b071049c3cf26 Deleted: sha256:32f84095aed5a2e947b12a3813f019fc69f159cb5c7eae5dad69b2d98ffbeca4 Deleted: sha256:bc7f4b25d0ae3524466891c41cefc7c6833c533e00ba80f8063c68da9a8b65fe
如何查询Docker Hub?
现在让我们进一步查询Docker Hub
。
这使我们可以查找可用的不同CentOS镜像。
[hynman@node1 ~]$docker search CentOS NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The official build of CentOS. 5062 [OK] ansible/centos7-ansible Ansible on Centos7 119 [OK] jdeathe/centos-ssh CentOS-6 6.10 x86_64/CentOS-7 7.5.1804 x86… 102 [OK] consol/centos-xfce-vnc Centos container with "headless" VNC session… 73 [OK] imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 48 [OK] centos/mysql-57-centos7 MySQL 5.7 SQL database server 44 tutum/centos Simple CentOS docker image with SSH access 43 gluster/gluster-centos Official GlusterFS Image [ CentOS-7 + Glust… 38 [OK] openshift/base-centos7 A Centos7 derived base image for Source-To-I… 37 centos/postgresql-96-centos7 PostgreSQL is an advanced Object-Relational … 35 centos/python-35-centos7 Platform for building and running Python 3.5… 32 kinogmt/centos-ssh CentOS with SSH 25 [OK] openshift/jenkins-2-centos7 A Centos7 based Jenkins v2.x image for use w… 19 centos/php-56-centos7 Platform for building and running PHP 5.6 ap… 17 pivotaldata/centos-gpdb-dev CentOS image for GPDB development. Tag names… 9 openshift/wildfly-101-centos7 A Centos7 based WildFly v10.1 image for use … 6 openshift/jenkins-1-centos7 DEPRECATED: A Centos7 based Jenkins v1.x ima… 4 darksheer/centos Base Centos Image -- Updated hourly 3 [OK] pivotaldata/centos Base centos, freshened up a little with a Do… 2 pivotaldata/centos-mingw Using the mingw toolchain to cross-compile t… 2 pivotaldata/centos-gcc-toolchain CentOS with a toolchain, but unaffiliated wi… 1 blacklabelops/centos CentOS Base Image! Built and Updates Daily! 1 [OK] smartentry/centos centos with smartentry 0 [OK] pivotaldata/centos7-build CentosOS 7 image for GPDB compilation 0 pivotaldata/centos7-test CentosOS 7 image for GPDB testing 0
其中我们可以看到名称是CentOS,描述是CentOS的正式版本。
如果说它是CentOS的正式版本,通常是由软件提供者创建的。
开始表示升值水平,它有5,062个开始,这意味着这是一个非常可靠的图像。
我们还可以看到其他图像,例如该图像,这些图像从一开始就没有被欣赏,这意味着到目前为止,还没有人认可它。
这没有任何意义,仅表示这不是常用的容器镜像。
因此,如果我们使用可靠的东西,那可能就是我们想要使用的东西。
正式表明它是正式版本。
同样,如果我们要查找特定的操作系统或者搜索解决方案(例如docker search mariadb),则可以看到正在显示很多mariadb结果。
现在让我们下载mariadb的不同图像层,并在该系统上运行Docker容器。
[root@node1 ~]# docker run mariadb Unable to find image 'mariadb:latest' locally latest: Pulling from library/mariadb 32802c0cfa4d: Already exists da1315cffa03: Already exists fa83472a3562: Already exists f85999a86bef: Already exists a2434d5c8419: Already exists 181debc3d23d: Already exists 7b5b2b6de4ee: Already exists 6f830a8cb936: Already exists c6becfb25371: Already exists a57998e3e98d: Already exists 26444682043c: Already exists 9bbb07a72de5: Pull complete 84b75eddf6b1: Pull complete 9f45ae7e5c8d: Pull complete Digest: sha256:12e32f8d1e8958cd076660bc22d19aa74f2da63f286e100fb58d41b740c57006 Status: Downloaded newer image for mariadb:latest error: database is uninitialized and password option is not specified You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
现在我们可以看到该容器在抱怨数据库,未指定此未初始化的被动选项,因此该容器显然需要更多信息才能完成其工作。
其中我们可以看到我们的mariadb容器在17分钟前退出了。
[hynman@node1 ~]$docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4e67a25166ff mariadb "docker-entrypoint.s…" 17 minutes ago Exited (1) 17 minutes ago angry_poitras ea540759dd3c hello-world "/hello" About an hour ago Exited (0) About an hour ago eloquent_chandrasekhar
如何查看Docker日志?
我还想讨论有关管理容器的另一件事,那就是调试,找出容器中正在发生的事情。
Docker日志可能很有用。
我们可以在容器上使用以下命令从标准输出中获取信息,并在容器的控制台上获取标准错误,前提是已生成任何此类信息
[hynman@node1 ~]$docker logs suspicious_lamport
这里suspicious_lamport是我们的ubuntu容器。
现在,由于没有错误,因此输出为空白。
让我们检查一下mariadb容器的日志
[hynman@node1 ~]$docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3cf05b3c26b7 ubuntu "bash" 2 minutes ago Up 2 minutes suspicious_lamport 4e67a25166ff mariadb "docker-entrypoint.s…" 37 minutes ago Exited (1) 37 minutes ago angry_poitras ea540759dd3c hello-world "/hello" About an hour ago Exited (0) About an hour ago eloquent_chandrasekhar
现在,当我们看到运行" mariadb"容器时观察到的错误消息
[hynman@node1 ~]$docker logs angry_poitras error: database is uninitialized and password option is not specified You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
获取有关容器的更多信息。
这是创建容器时已使用的所有信息。
[hynman@node1 ~]$docker inspect suspicious_lamport [ { "Id": "3cf05b3c26b75eb15f181b9c35d55808e49e1935c4e9d3dedbc7180261c41fe2", "Created": "2016-12-21T07:03:12.007684767Z", "Path": "bash", "Args": [], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 4318, "ExitCode": 0, "Error": "", "StartedAt": "2016-12-21T07:03:12.548723701Z", "FinishedAt": "0001-01-01T00:00:00Z" }, "Image": "sha256:93fd78260bd1495afb484371928661f63e64be306b7ac48e2d13ce9422dfee26", "ResolvConfPath": "/var/lib/docker/containers/3cf05b3c26b75eb15f181b9c35d55808e49e1935c4e9d3dedbc7180261c41fe2/resolv.conf", "HostnamePath": "/var/lib/docker/containers/3cf05b3c26b75eb15f181b9c35d55808e49e1935c4e9d3dedbc7180261c41fe2/hostname", "HostsPath": "/var/lib/docker/containers/3cf05b3c26b75eb15f181b9c35d55808e49e1935c4e9d3dedbc7180261c41fe2/hosts", "LogPath": "/var/lib/docker/containers/3cf05b3c26b75eb15f181b9c35d55808e49e1935c4e9d3dedbc7180261c41fe2/3cf05b3c26b75eb15f181b9c35d55808e49e1935c4e9d3dedbc7180261c41fe2-json.log", "Name": "/suspicious_lamport", "RestartCount": 0, "Driver": "devicemapper", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "", "ExecIDs": [ "cb6e6974f1513f7ea509a1f657838741b129a167771779c078119dbbc79a6129" ], "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": "shareable", "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": [], "BlkioDeviceReadBps": null, "BlkioDeviceWriteBps": null, "BlkioDeviceReadIOps": null, "BlkioDeviceWriteIOps": null, "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpusetCpus": "", "CpusetMems": "", "Devices": [], "DeviceCgroupRules": null, "DiskQuota": 0, "KernelMemory": 0, "MemoryReservation": 0, "MemorySwap": 0, "MemorySwappiness": null, "OomKillDisable": false, "PidsLimit": 0, "Ulimits": null, "CpuCount": 0, "CpuPercent": 0, "IOMaximumIOps": 0, "IOMaximumBandwidth": 0, "MaskedPaths": [ "/proc/acpi", "/proc/kcore", "/proc/keys", "/proc/latency_stats", "/proc/timer_list", "/proc/timer_stats", "/proc/sched_debug", "/proc/scsi", "/sys/firmware" ], "ReadonlyPaths": [ "/proc/asound", "/proc/bus", "/proc/fs", "/proc/irq", "/proc/sys", "/proc/sysrq-trigger" ] }, "GraphDriver": { "Data": { "DeviceId": "36", "DeviceName": "docker-253:0-529717-1443554881a9ad438000d94d8b883ca60ed5a75ebcdd9e9a1f8ed40b2840b03b", "DeviceSize": "10737418240" }, "Name": "devicemapper" }, "Mounts": [], "Config": { "Hostname": "3cf05b3c26b7", "Domainname": "", "User": "", "AttachStdin": true, "AttachStdout": true, "AttachStderr": true, "Tty": true, "OpenStdin": true, "StdinOnce": true, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "bash" ], "Image": "ubuntu", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": {} }, "NetworkSettings": { "Bridge": "", "SandboxID": "e30994015e7aca47e373bc0a45daed8b46b7b62ee5c78a6842ed35d17513619f", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": {}, "SandboxKey": "/var/run/docker/netns/e30994015e7a", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "d51c7efd781bbec0524030c731d5bcefe1677a5ddc5a31fde1f51effb23d0ab5", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:02", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "5a92284fb69d2fff9dd226e8dd962e199b8e6f76b92737e9cf867f21bbbb84ac", "EndpointID": "d51c7efd781bbec0524030c731d5bcefe1677a5ddc5a31fde1f51effb23d0ab5", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:02", "DriverOpts": null } } } } ] ]
这样我们就可以看到一些当前状态信息。
我们可以看到当前使用的镜像。
我们还可以看到它在var lib容器中使用的存储,然后是容器ID。
我们可以看到有关容器配置的信息,例如,如果向下滚动,还可以看到有关联网的信息。
因此,其中我们可以看到网络设置,包括该容器正在使用的IP地址" 172.17.0.2"。