为什么docker-machine在重新启动时清除数据?

我在OSX上使用Docker Toolbox。

我创build了一个用于存储持久数据的数据卷容器: https : //docs.docker.com/userguide/dockervolumes/#creating-and-mounting-a-data-volume-container 。

我检查了这个数据确实存储在boot2docker虚拟机(由docker-machine创build)上,而不是在容器上,所以它会一直存在。 然而,“docker-machine restart”会清除虚拟机上的这个自定义数据。

我无法find正在发生的事情的文档。 我发现有一个论坛post提到/ var / lib / docker中的数据将被保留,但是我找不到任何官方文档指出这一点,而且考虑到上面的持久存储指南并不使用这个path,甚至提到你的数据将被删除。

这是预期的,如果是这样的话,是否有正确的path来存储持久性数据的官方文档?


编辑:添加失败的senario的例子

$ docker-machine ssh alt docker@alt:~$ docker run -v /data:/var/lib/mysql --name mydata busybox sh -c "echo 'hello' > /var/lib/mysql/hello" docker@alt:~$ docker run --rm --volumes-from mydata busybox sh -c "cat /var/lib/mysql/hello" hello docker@alt:~$ exit $ docker-machine restart alt Starting VM... $ docker-machine ssh alt docker@alt:~$ docker run --rm --volumes-from mydata busybox sh -c "cat /var/lib/mysql/hello" cat: can't open '/var/lib/mysql/hello': No such file or directory 

这绝对应该工作:

 $ docker-machine ssh default docker@default:~$ docker run -v /data --name mydata busybox true docker@default:~$ docker run --volumes-from mydata busybox sh -c "echo hello >/data/hello" docker@default:~$ docker run --volumes-from mydata busybox cat /data/hello hello docker@default:~$ exit $ docker-machine restart default Starting VM... $ docker-machine ssh default docker@default:~$ docker run --volumes-from mydata busybox cat /data/hello hello 

你能否详细说明重现问题的步骤?

boot2docker有一个只读的文件系统(将在重新启动时被擦除),除了:

  1. 容器及其数据(卷) – 这是你读到关于/var/lib/docker
  2. Docker镜像
  3. Docker的configuration(比如/var/lib/boot2docker/profile可以调整守护进程的标志)

我不使用boot2docker,但是如果/ data在重新启动时被擦除,这就是你的卷被存储的地方( docker run -v /data:/var/lib/mysql ),所以它将会丢失。

你在做什么也是结合两种不同的模式来处理卷的持久性。 为了获得持久性,容器可以从主机系统上的指定位置装载卷(推测是持久的),或者它们可以与数据容器关联,并使用--volumes-from装入。 这听起来像主机文件系统的方法是不适合boot2docker,你应该使用数据卷模式(仅)。

大概你应该用-v /var/lib/mysql来创build你的数据容器,而不是-v /data:/var/lib/mysql

请注意,我使用docker for mac beta正在使用xhyve vm。

/ var / lib / boot2docker的内容将在机器重新启动之间持续存在。 所以,如果你想要某些文件在你的虚拟机上可用,把它们放在这个目录下。

如果您希望在不同位置可以访问它们以运行Docker容器,则可以将以下内容添加到/ var / lib / boot2docker / profile:

 mkdir -p /desired/path ln -s /var/lib/boot2docker/your.file /desire/path/your.file 

如果您想要将其他configuration添加到系统文件中,这些文件将在vm重新启动之间持续存在,例如hosts文件中的额外值,则可以在/ var / lib / boot2docker / profile中添加如下所示的命令:

 echo '127.0.0.1 your.domain.com' >> /etc/hosts 

希望能帮助到你