两个相同的 Docker 图像怎么可能安装不同的包?

How is it possible for two identical Docker images to have different packages installed?

初始Post

我在两个不同的 CoreOS 服务器上有相同的 docker 图像 运行ning。 (它们在 Kubernetes 集群中,但我认为这与当前问题无关。)

它们都是 运行宁图像哈希 01e95e0a93af。他们都应该有卷曲。一个没有。这似乎……不可能。

好服务器

core@ip-10-0-0-61 ~ $ docker pull gcr.io/surveyadmin-001/wolfgang:commit_e78e07eb6ce5727af6ffeb4ca3e903907e3ab83a
Digest: sha256:5d8bf456ad2d08ce3cd15f05b62fddc07fda3955267ee0d3ef73ee1a96b98e68
[cut]
Status: Image is up to date for gcr.io/surveyadmin-001/wolfgang:commit_e78e07eb6ce5727af6ffeb4ca3e903907e3ab83a

core@ip-10-0-0-61 ~ $ docker run -it --rm gcr.io/surveyadmin-001/wolfgang:commit_e78e07eb6ce5727af6ffeb4ca3e903907e3ab83a /bin/bash
root@d29cb8783830:/app/bundle# curl
curl: try 'curl --help' or 'curl --manual' for more information
root@d29cb8783830:/app/bundle# 

服务器错误

core@ip-10-0-0-212 ~ $ docker pull gcr.io/surveyadmin-001/wolfgang:commit_e78e07eb6ce5727af6ffeb4ca3e903907e3ab83a
[cut]
Digest: sha256:5d8bf456ad2d08ce3cd15f05b62fddc07fda3955267ee0d3ef73ee1a96b98e68
Status: Image is up to date for gcr.io/surveyadmin-001/wolfgang:commit_e78e07eb6ce5727af6ffeb4ca3e903907e3ab83a

core@ip-10-0-0-212 ~ $ docker run -it --rm gcr.io/surveyadmin-001/wolfgang:commit_e78e07eb6ce5727af6ffeb4ca3e903907e3ab83a /bin/bash
root@fe6a536393f8:/app/bundle# curl
bash: curl: command not found
root@fe6a536393f8:/app/bundle# 

Full logs available on this gist。我从我们的生产集群中取出了坏服务器,但如果有人要我做任何其他研究,它仍然 运行ning。

添加于 2015-12-04

我在两台服务器上 运行 docker tag gcr.io/surveyadmin-001/wolfgang:commit_e78e07eb6ce5727af6ffeb4ca3e903907e3ab83a weird-image 以使所有内容更具可读性。

哪个卷曲

Can you do a which curl in the first component to check where it finds its curl? And see if that file exists in the second component. – VonC

似乎在坏服务器上根本不存在。

好服务器

core@ip-10-0-0-61 ~ $ docker run -it --rm weird-image /bin/bash 
root@529b8f20a610:/app/bundle# which curl
/usr/bin/curl

服务器错误

core@ip-10-0-0-212 ~ $ docker run -it --rm weird-image /bin/bash 
root@ff98c850dbaa:/app/bundle# ls /usr/bin/curl
ls: cannot access /usr/bin/curl: No such file or directory
root@ff98c850dbaa:/app/bundle# 

别名docker

Any chance you have set up an alias on the bad box? Run alias docker to check – morloch

没有。

好服务器

core@ip-10-0-0-61 ~ $ alias docker
-bash: alias: docker: not found

服务器错误

core@ip-10-0-0-212 ~ $ alias docker
-bash: alias: docker: not found

时间

更奇怪:运行 坏服务器上的容器需要更长的时间。

好服务器

core@ip-10-0-0-61 ~ $ time docker run weird-image echo "Done"
Done

real  0m0.422s
user  0m0.015s
sys 0m0.015s

服务器错误

core@ip-10-0-0-212 ~ $ time docker run weird-image echo "Done"
Done

real  0m4.602s
user  0m0.010s
sys 0m0.010s

我见过很多情况,其中 Docker 磁盘上的图像随机损坏(导致奇怪的不一致,就像你在这里描述的那样),然后删除并重新拉取图像 "fixes"问题。

要对此进行测试,您需要确保不仅要 docker rmi gcr.io/surveyadmin-001/wolfgang:commit_e78e07eb6ce5727af6ffeb4ca3e903907e3ab83a(这将最小化输出 Untagged: gcr.io/surveyadmin-001/wolfgang:commit_e78e07eb6ce5727af6ffeb4ca3e903907e3ab83a),还要删除各个层(以及它们可能具有的任何其他标签) ) 以便他们被迫重新拉动。