Docker:文件系统更改不导出

时间:2015-01-19 19:58:58

标签: docker boot2docker

TL; DR我的docker save/export没有工作,我也不知道为什么。

我正在使用boot2docker for Mac。

我已经创建了Wordpress安装概念证明,并且使用BusyBox作为MySQL容器以及主文件系统容器。我使用以下方法创建了这些容器:

> docker run -v /var/lib/mysql --name=wp_datastore -d busybox
> docker run -v /var/www/html --name=http_root -d busybox

正在运行docker ps -a会显示两个基于busybox:latest的容器。到现在为止还挺好。然后我创建了Wordpress和MySQL容器,指向它们各自的数据容器:

>docker run \
--name mysql_db \
-e MYSQL_ROOT_PASSWORD=somepassword \
--volumes-from wp_datastore \
-d mysql

>docker run \
--name=wp_site \
--link=mysql_db:mysql \
-p 80:80 \
--volumes-from http_root \
-d wordpress

我转到我的网址(boot2docker ip),然后是一个全新的Wordpress应用程序。我继续通过添加主题和一些图像来设置Wordpress网站。然后我docker inspect http_root确定文件系统的更改都在那里。

然后我提交更改的容器:

>docker commit http_root evilnode/http_root:dev
>docker commit wp_datastore evilnode/wp_datastore:dev

我确认我的新图片在那里。然后我保存图像:

> docker save -o ~/tmp/http_root.tar evilnode/http_root:dev
> docker save -o ~/tmp/wp_datastore.tar evilnode/wp_datastore:dev

我验证了tar文件也在那里。到目前为止,非常好。

这是我有点困惑的地方。我不确定是否需要,但我也导出容器:

> docker export http_root > ~/tmp/http_root_snapshot.tar
> docker export wp_datastore > ~/tmp/wp_datastore_snapshot.tar

所以我现在有4个tar文件:

  • http_root.tar(已保存的图片)
  • wp_datastore.tar(已保存的图片)
  • http_root_snapshot.tar(导出的容器)
  • wp_datastore_snapshot.tar(导出的容器)

我把这些tar文件发送到另一台机器,然后继续构建如下:

>docker load -i ~/tmp/wp_datastore.tar
>docker load -i ~/tmp/http_root.tar

已加载图片evilnode/wp_datastore:devevilnode/http_root:dev

>docker run -v /var/lib/mysql --name=wp_datastore -d evilnode/wp_datastore:dev
>docker run -v /var/www/html --name=http_root -d evilnode/http_root:dev

如果我理解正确,则只根据我的图片创建容器

果然,容器在那里。但是,如果我docker inspect http_root,并转到/var/www/html别名的文件位置,则该目录完全为空。 OK ......

因此,我认为我需要导入新容器,因为图像不包含文件系统更改。我这样做:

>cat http_root.snapshot.tar | docker import - http_root

我理解这是指我将文件系统增量从一个容器导入另一个容器。但是,当我回到/var/www/html别名的位置时,我看到相同的空目录。

如何从这些容器中导出更改?

1 个答案:

答案 0 :(得分:2)

不会使用新图像导出卷。在Docker中管理数据的正确方法是使用数据容器并使用docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdatadocker cp之类的命令来备份数据并将其传输。 https://docs.docker.com/userguide/dockervolumes/#backup-restore-or-migrate-data-volumes