docker检查的Config和ContainerConfig有什么不同?
我使用docker inspect
来获取图像信息。 我发现输出中有Config
和ContainerConfig
,除了CMD
,其他值都是一样的。
实际上, Config
生效。 我必须在运行命令中添加cmd。 $ docker run -it debian bash
我想知道这两个项目有什么不同?
$ docker inspect debian [ { "Id": "7abab0fd74f97b6b398a1aca68735c5be153d49922952f67e8696a2225e1d8e1", ...... "ContainerConfig": { "Hostname": "e5c68db50333", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": null, "Cmd": [ "/bin/sh", "-c", "#(nop) CMD [\"/bin/bash\"]" ], "Image": "d8bd0657b25f17eef81a3d52b53da5bda4de0cf5cca3dcafec277634ae4b38fb", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": {} }, "Config": { "Hostname": "e5c68db50333", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": null, "Cmd": [ "/bin/bash" ], "Image": "d8bd0657b25f17eef81a3d52b53da5bda4de0cf5cca3dcafec277634ae4b38fb", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": {} }, ...... } ]
如问题18880所述 ,关于ContainerConfig:
你所看到的与图像的创build历史有关。
尝试运行docker history ...
在您的形象,你会看到完整的历史。
Docker会将Dockerfile
命令放入CMD
部分,作为跟踪如何创build该层/容器的一种方式。
它真的只用于caching查找目的(内部docker处理),并不意味着用户使用。
它也可以在image/image.go
看到:
// ContainerConfig is the configuration of the container that is committed into the image ContainerConfig container.Config `json:"container_config,omitempty"`
例如, 问题17780说明了一个空的ContainerConfig
:
图像的ContainerConfig是图像生成的容器。
在你的图像的情况下,它不是从一个容器生成,而是从运行的docker import
。