docker检查的Config和ContainerConfig有什么不同?

我使用docker inspect来获取图像信息。 我发现输出中有ConfigContainerConfig ,除了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