docker - Docker:文件系统更改未导出

标签 docker boot2docker

TL; DR我的docker save/export无法正常工作,我也不知道为什么。

我在Mac上使用boot2docker。

我已经创建了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文件SCP放入另一台计算机,然后按以下步骤进行构建:
    >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别名的文件位置,则该目录将完全为空。好...

    因此,我认为我需要导入新容器,因为镜像不包含文件系统更改。我这样做:
    >cat http_root.snapshot.tar | docker import - http_root
    

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

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

    最佳答案

    卷不随新镜像一起导出。在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

    关于docker - Docker:文件系统更改未导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28032579/

    相关文章:

    docker - Docker Registry 和 Docker Index 有什么区别?

    macos - 尝试启动docker时不断收到无法读取CA证书

    postgresql - 主机上的 Docker Postgres 数据量

    docker - 从 Docker 容器内部,如何连接到机器的本地主机?

    linux - Docker:如何更新容器内的变量?

    docker - 如何在 docker compose 中设置覆盖网络

    docker - 在 boot2docker 中的 docker 中运行 kafka 时使用 JMX 监控 kafka

    debian - debian 中的 Tomcat7 :wheezy Docker instance fails to start

    docker - 如何通过 docker 机器在 Centos 6 docker 容器中使用 kvm

    bash - 如何使用 docker 容器运行 nginx?