docker恢复对容器的更改

pgu*_*rio 6 import load export save docker

我正在尝试对我的docker容器进行快照,以便我可以恢复到单个时间点.

我看过了docker save,docker export但这些似乎都没有做我正在寻找的东西.我错过了什么吗?

Tho*_*eil 7

您可能想要使用docker commit.此命令将从您的一个docker容器创建一个新的docker镜像.这样,您可以稍后根据新图像轻松创建新容器.

请注意,该docker commit命令不会保存存储在Docker 数据卷中的任何数据.对于那些你需要进行备份的人.


例如,如果您正在使用以下Dockerfile声明一个卷,并将每5秒将日期写入两个文件(一个在卷中,另一个不在卷中):

FROM base
VOLUME /data
CMD while true; do date >> /data/foo.txt; date >> /tmp/bar.txt; sleep 5; done
Run Code Online (Sandbox Code Playgroud)

从中构建图像:

$ docker build --force-rm -t so-26323286 .
Run Code Online (Sandbox Code Playgroud)

并从中运行一个新容器:

$ docker run -d so-26323286
Run Code Online (Sandbox Code Playgroud)

稍等一下,以便正在运行的docker容器有机会将日期写入两个文件几次.

$ docker ps
CONTAINER ID        IMAGE                COMMAND                CREATED             STATUS              PORTS               NAMES
07b094be1bb2        so-26323286:latest   "/bin/sh -c 'while t   5 seconds ago       Up 5 seconds                            agitated_lovelace
Run Code Online (Sandbox Code Playgroud)

然后将容器提交到新图像so-26323286:snapshot1:

$ docker commit agitated_lovelace so-26323286:snapshot1
Run Code Online (Sandbox Code Playgroud)

您现在可以看到有两个可用的图像:

$ docker images | grep so-26323286
so-26323286                    snapshot1           03180a816db8        19 seconds ago      175.3 MB
so-26323286                    latest              4ffd141d7d6f        9 minutes ago       175.3 MB
Run Code Online (Sandbox Code Playgroud)

现在让我们验证运行的新容器so-26323286:snapshot1是否具有该/tmp/bar.txt文件:

$ docker run --rm so-26323286:snapshot1 cat /tmp/bar.txt
Sun Oct 12 09:00:21 UTC 2014
Sun Oct 12 09:00:26 UTC 2014
Sun Oct 12 09:00:31 UTC 2014
Sun Oct 12 09:00:36 UTC 2014
Sun Oct 12 09:00:41 UTC 2014
Sun Oct 12 09:00:46 UTC 2014
Sun Oct 12 09:00:51 UTC 2014
Run Code Online (Sandbox Code Playgroud)

并且见证这样的容器没有任何/data/foo.txt文件(就像/data数据卷一样):

$ docker run --rm so-26323286:snapshot1 cat /data/foo.txt
cat: /data/foo.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)

最后,如果要访问/data/foo.txt第一个(仍在运行)容器中的文件,可以使用docker run --volumes-from选项:

$ docker run --rm --volumes-from agitated_lovelace base cat /data/foo.txt
Sun Oct 12 09:00:21 UTC 2014
Sun Oct 12 09:00:26 UTC 2014
Sun Oct 12 09:00:31 UTC 2014
Sun Oct 12 09:00:36 UTC 2014
Sun Oct 12 09:00:41 UTC 2014
Sun Oct 12 09:00:46 UTC 2014
Sun Oct 12 09:00:51 UTC 2014
Sun Oct 12 09:00:56 UTC 2014
Sun Oct 12 09:01:01 UTC 2014
Sun Oct 12 09:01:06 UTC 2014
Sun Oct 12 09:01:11 UTC 2014
Sun Oct 12 09:01:16 UTC 2014
Run Code Online (Sandbox Code Playgroud)

  • 您应该研究该wordpress图片的Dockerfile,以了解它是否使用卷来存储帖子数据。同样,wordpress容器可能依赖于第二个数据库容器来存储其数据,如果是这种情况,那么您要保存数据库容器,而不是wordpress容器。 (2认同)
  • 或者您可以备份该卷,拍摄您的mysql数据库的快照. (2认同)