更改docker-compose中的卷configuration,而不会丢失数据

我的docker-compose有一个数据容器,它没有映射到主机上的一个本地目录,我想把它改成:

volumes: - /var/www/html 

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

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

我知道容器实际上还在那里,但有没有一种简单的方法来创build一个新的数据容器。

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

谢谢。

尝试自己的风险:

  • 根据需要创build你的主机目录/html
  • docker inspect {container_name} | grep Source docker inspect {container_name} | grep Source并获取主机系统上的卷path。 它会像/var/lib/docker/volumes/abdb15a2eff[...]/_data
  • 将该目录的内容复制到主机目录
  • 根据需要重新创build容器。

一个安全的方法是从Docker镜像中创build数据的备份。 然后将该备份恢复到主机上的目录。 Docker Volumes Tutorial在底部提到了类似这样的过程。

以下是你如何做到这一点:

首先,从你的主机上挂载一个目录到容器中,如果你还没有挂载一个目录的话。可能是一个像./:/backup这样的./:/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的东西。