Docker:文件系统更改不导出

TL; DR我的docker save/export不起作用,我不知道为什么。

我正在使用Mac的boot2docker。

我已经创build了一个Wordpress安装概念certificate,并使用BusyBox作为MySQL容器以及主文件系统容器。 我创build这些容器使用:

 > 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 。 到现在为止还挺好。 然后我创buildWordpress和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 

我去我的url( 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文件SCP SCP到另一台机器,然后继续构build如下:

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

evilnode/wp_datastore:dev和“ evilnode/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 

如果我理解正确,容器是根据我的图像创build的

果然,集装箱在那里。 但是,如果我的docker inspect http_root ,并去由/var/www/html别名的文件位置,目录是完全空的。 好…

所以我想我需要导入到新的容器,因为图像不包含文件系统的变化。 我这样做:

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

我明白这意味着我正在将文件系统delta从一个容器导入到另一个容器中 。 但是,当我回到由/var/www/html别名的位置时,我看到相同的空目录。

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

卷不会与新映像一起导出。 在Docker中pipe理数据的正确方法是使用数据容器,并使用像docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata这样的命令docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata或者docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata docker cp备份数据并将其传输。 https://docs.docker.com/userguide/dockervolumes/#backup-restore-or-migrate-data-volumes