Docker 镜像不一致

Docker 镜像不一致

Docker 镜像应该是不可变的,但是当我将其中一个镜像导入到另一台机器上时,它的行为有所不同。

为了重现该错误,我将从使用 debootstrap 构建的 debian-wheezy 映像开始。

我使用 Dockerfile 构建图像:

FROM debian-wheezy
RUN apt-get install -y fail2ban
RUN rm /var/run/fail2ban/fail2ban.sock

最后一个命令避免了fail2ban在下次启动时崩溃:出于某种原因,即使我在Dockerfile中手动停止服务,套接字文件在安装fail2ban后仍保留在那里。如果文件仍然存在,Fail2ban 无法重新启动。

启动镜像并启动fail2ban将会成功。我们可以检查一下内容/var/run/fail2ban存储库:

$ docker build -t test/fail2ban .
$ docker run test/fail2ban ls /var/run/fail2ban
fail2ban.pid

但是,如果我导出图像并将其导入到另一台计算机:

$ docker save test/fail2ban > /tmp/fail2ban.tar
$ scp /tmp/fail2ban.tar user@machine:/tmp
$ ssh user@machine "cat /tmp/fail2ban.tar | docker load"
$ ssh user@machine docker run test/fail2ban ls /var/run/fail2ban
fail2ban.pid
fail2ban.sock

这次套接字文件在那里,阻止我启动服务。

有人可以解释这种行为以及如何解决问题吗?

以下是更多信息:

$ uname -a
Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux
$ docker --version
Docker version 1.6.0, build 4749651
$ ssh user@machine uname -a
Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1 x86_64 GNU/Linux
$ ssh user@machine docker --version
Docker version 1.6.0, build 4749651

相关内容