我使用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": {}
},
......
}
]
答案 0 :(得分:12)
如issue 18880中所述,关于ContainerConfig:
您所看到的内容与图像创建历史有关 尝试在图片上投放
docker history ...
,您就会看到完整的历史记录 Docker会将Dockerfile
命令放入CMD
部分,以便跟踪该图层/容器的创建方式。
它实际上只用于缓存查找(内部docker处理),并不打算由用户使用。
在image/image.go
中也可以看到:
// ContainerConfig is the configuration of the container that is committed into the image
ContainerConfig container.Config `json:"container_config,omitempty"`
例如,issue 17780说明了一个空的ContainerConfig
:
图像的ContainerConfig是生成图像的容器 对于您的图片,它不是从容器生成的,而是从运行
docker import
生成的。