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

初始职位

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

他们都运行图像哈希01e95e0a93af 。 他们都应该curl。 一个不。 这似乎是不可能的。

好的服务器

 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# 

完整的日志可在这个要点 。 我把坏服务器从我们的生产集群中拿走了,但是如果有人想要我做其他的研究的话,它仍然会运行。

已添加2015-12-04

我已经在两台服务器上运行docker tag gcr.io/surveyadmin-001/wolfgang:commit_e78e07eb6ce5727af6ffeb4ca3e903907e3ab83a weird-image ,使一切更具可读性。

curl

你能做一个curl的第一个组件来检查它发现curl吗? 看看这个文件是否存在于第二个组件中。 – 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工人

你有任何机会在坏箱上设置别名? 运行别名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 

我已经看到了许多Docker镜像在镜像中随机出现一些损坏的情况(导致像这里描述的那样的奇怪的不一致),删除和重新拉取镜像“修复”了这个问题。

要testing这个,你要确保你不只是docker rmi gcr.io/surveyadmin-001/wolfgang:commit_e78e07eb6ce5727af6ffeb4ca3e903907e3ab83a (这将最低限度地输出Untagged: gcr.io/surveyadmin-001/wolfgang:commit_e78e07eb6ce5727af6ffeb4ca3e903907e3ab83a ),但也删除单独的图层(以及任何其他可能的标签),以致于它们被迫重新拉动。