2

我已经尝试了多种方法,但仍然无法正常工作。我读过的文档表明这是不可能的,但这让我很困扰,所以我继续挖掘。这是设置:

  • 我有一个数据容器
    • docker build -t databox .
    • docker run -d -v /data -v /data/db --name databox databox
    • (/data 和 /data/db 是我正在共享的数据箱容器中的卷)
  • 我有一个测试容器来访问数据容器
    • docker run --volumes-from databox -it --name bbdb busybox /bin/sh
    • /data我在and/data/db目录中编辑了一个文件

现在我想对我的数据箱容器进行快照,将快照推送到注册表,从本地删除它,然后恢复我之前推送的图像,以便恢复我编辑的两个文件。

我的注册服务器位于 127.0.0.1:5000。这是我的保存:

docker tag databox 127.0.0.1:5000/databox:latest
docker commit databox 127.0.0.1:5000/databox:latest
docker push 127.0.0.1:5000/databox:latest

我的恢复就像:

docker run -d -v /data -v /data/db --name databox databox

当我执行恢复时,我所做的编辑丢失了。当我查看图像和容器以及 docker 历史记录时,我看不到我的编辑。我试图在不同的文件夹中编辑数据框容器,它们都恢复到原来的状态。

嗯....这是什么意思?

4

2 回答 2

3

您缺少的是 Docker 数据卷的工作方式。

数据卷是容器中不属于容器分层文件系统的位置。数据卷也不是 Docker 镜像的一部分。数据卷实际上存储在/var/lib/docker/volumes.

Docker 命令,如exportcp、或无权访问数据卷。savediffcommit

从 Docker 数据卷备份数据的正确方法是运行可以访问该数据卷的 Docker 容器,并从容器内运行命令以生成数据存档。有关此主题的更多信息,请阅读有关管理数据的 Docker 用户指南

于 2014-10-24T08:59:23.167 回答
2

呵呵 - 我想分享一下我是如何做到这一点的。

我想为开发容器预先填充一个 postgres 数据卷。

  1. 创建数据箱容器(空但在 Dockerfile 中声明 VOLUME)
  2. 使用 --volumes-from 数据框运行 bbdb 容器
  3. 根据需要修改数据框容器卷内容
  4. 导出/备份数据框内容(备份、恢复或迁移数据卷
  5. 重新创建数据箱容器,但将以前的备份添加到 /

数据框图像现在已经获得了您想要的内容。我将其推送到本地托管注册表并在启动 bbdb 容器(等效)并将其用作 --volumes-from 参考之前将其拉下。

于 2015-04-09T22:08:49.000 回答