Что отличается от Config и ContainerConfig проверки докеров?
Я использую docker inspect
для получения информации об изображении. Я нахожу, что на выходе есть Config
и ContainerConfig
, и большинство значений одинаковы, кроме CMD
.
На практике эффект Config
вступает в силу. Я должен добавить cmd в команду run.
$ 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": {}
},
......
}
]
Ответы
Ответ 1
Как упоминалось в issue 18880, в отношении ContainerConfig:
То, что вы видите там, связано с историей создания образа.
Попробуйте запустить docker history ...
на вашем изображении, и вы увидите полную историю.
Docker поместит команды Dockerfile
в раздел CMD
как способ отслеживания того, как был создан этот слой/контейнер.
Он действительно используется только для целей поиска кеша (внутренняя обработка докеров) и не предназначен для использования пользователем.
Это также видно в 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
.