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

时间:2016-03-25 08:04:04

标签: docker

我使用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": {}
    },
    ......
}
]

1 个答案:

答案 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生成的。