两个相同的Docker镜像如何安装不同的软件包?

时间:2015-12-04 00:51:58

标签: docker kubernetes coreos

初始帖子

我在两个不同的CoreOS服务器上运行相同的docker镜像。 (他们在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。我将坏服务器从我们的生产集群中取出,但如果有人要我做任何其他研究,它仍会运行。

已添加2015-12-04

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

卷曲

  

你能在第一个组件中做一个卷曲来检查它发现卷曲的位置吗?并查看该文件是否存在于第二个组件中。 - 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# 

alias docker

  

你有没有机会在坏盒子上设置别名?运行别名docker来检查 - 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

1 个答案:

答案 0 :(得分:2)

我见过很多案例,其中磁盘上的Docker镜像会随机出现损坏(引起奇怪的不一致,如此处所描述的那样),删除并重新拉动图像会“解决”问题。

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