【问题标题】:Change volume configuration in docker-compose without losing the data在不丢失数据的情况下更改 docker-compose 中的卷配置
【发布时间】:2017-01-27 17:18:47
【问题描述】:

我的 docker-compose 有一个数据容器,它没有映射到主机中的本地目录,我想从以下位置进行更改:

volumes:
  - /var/www/html

volumes:
  - /html:/var/www/html

但是当我重新启动容器时,它会移除当前的数据容器并用一个新的替换它。

我知道容器实际上仍然存在,但有没有一种简单的方法可以在不创建新数据容器的情况下做到这一点。

我的 docker-compose 版本是 1.7.1(在 boot2docker 下)。

谢谢。

【问题讨论】:

标签: docker docker-compose docker-volume


【解决方案1】:

风险自负:

  • 根据需要创建主机目录/html
  • docker inspect {container_name} | grep Source 并在主机系统上获取您的卷路径。类似于/var/lib/docker/volumes/abdb15a2eff[...]/_data
  • 将该目录的内容复制到您的主机目录
  • 根据需要重新创建容器。

【讨论】:

  • 听起来很合理。我会试试的:)
  • 我试过了,我可以确认它工作正常。必须销毁容器并创建另一个容器才能工作,但不会丢失数据。
【解决方案2】:

执行此操作的一种安全方法是从 Docker 映像内部创建数据备份。然后将该备份恢复到主机上的目录。 Docker Volumes Tutorial 在底部附近提到了这样的过程。

你会这样做:

首先,如果您还没有挂载一个目录,请将主机上的目录挂载到容器中。可能是像./:/backup 这样的卷。接下来,运行如下备份命令:

docker-compose run service-name tar czvf /backup/html_data.tar.gz /var/www/html

现在您的当前目录中有html_data.tar.gz。随时随地提取它!

(根据您指定卷的方式,我假设您正在使用 docker-compose。该过程与 vanilla Docker 类似。)


另一种方法,--volumes-from

获取包含您要复制的数据的容器的名称(或哈希)。您可以使用docker ps 执行此操作。对于这个例子,我们称之为container1。现在运行这个命令来备份它的数据:

docker run --rm --volumes-from container1 -v $(pwd):/backup ubuntu:latest tar czvf /backup/html_data.tar.gz /var/www/html

请注意,您使用的图像 (ubuntu:latest) 并不重要,只要它可以 tar 即可。

【讨论】:

  • 为此,我需要使用一个额外的容器,因为更改数据容器的卷部分会将其替换为新的。我错了吗?
  • 嗯...我不知道;我得试试看。如果编辑卷不起作用,您可以采用与--volumes-from 等效的方法。我将在上面添加详细信息。
  • 是的,我也是这么想的。先前的答案与我的阿联酋案例更相关,但这也很方便。谢谢!
猜你喜欢
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 2012-05-29
  • 2015-07-03
  • 1970-01-01
相关资源
最近更新 更多