更改docker-compose中的卷配置而不会丢失数据

时间:2017-01-27 17:18:47

标签: docker docker-compose docker-volume

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

volumes:
  - /var/www/html

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

但是当我重新启动容器时,它将删除当前数据容器并将其替换为新容器。

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

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

感谢。

2 个答案:

答案 0 :(得分:1)

自担风险:

  • 根据需要创建主机目录/html
  • docker inspect {container_name} | grep Source并抓住主机系统上的卷路径。它会像/var/lib/docker/volumes/abdb15a2eff[...]/_data
  • 之类的东西
  • 将该目录的内容复制到您的主机目录
  • 根据需要重新创建容器。

答案 1 :(得分:0)

一种安全的方法是从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)并不重要,只要它可以解决问题。