我可以导出包含数据的容器以及在另一台计算机上生成完整副本的所有内容吗?

时间:2017-01-04 09:50:52

标签: docker

我正在研究Docker并试图绕过它,所以我可能误解了这个概念。

我已经安装了sebp/elk(ElasticSearch-Logstash-Kibana)并且正在运行一个工作容器。我已经设置了一些索引并将一些数据发布到logstash,后者与容器一起存储。如果我重新启动容器,一切都按预期工作。现在我有兴趣按原样导出容器,在另一台计算机上使用我设置的配置和数据启动。

所以我尝试了export容器,import将其作为新图像,并run新图像中的容器。容器可以正常工作,但它作为一个没有所有数据的新容器启动,我将其放入原始容器中。

我还尝试commit我对图片的更改,然后save图片和load再次,然后run新图片中的容器。这也有效,但又没有任何数据。

所以,当我inspect原始容器时,我可以看到它有一个已安装的卷,所以我想我应该尝试将elasticsearch数据导出到.tar文件,然后导入到新容器中。但这也不起作用。

这是原始容器的装载检查:

"Mounts": [
        {
            "Name": "fe17e920f9d17e177ac899b1617a8c51231c8a3b34007f463d082e5be2677412",
            "Source": "/var/lib/docker/volumes/fe17e920f9d17e177ac899b1617a8c51231c8a3b34007f463d082e5be2677412/_data",
            "Destination": "/var/lib/elasticsearch",
            "Driver": "local",
            "Mode": "",
            "RW": true,
            "Propagation": ""
        }
    ]

以下是我尝试导出它的方法:

docker run --rm --volumes-from elk -v $(pwd):/volumes original/sebp/elk:exported tar cvf /volumes/elk-volume.tar /var/lib/elasticsearch

...这就是我尝试导入它的方式:

docker run --rm --volumes-from elk-imported -v $(pwd):/volumes original/sebp/elk:exported bash -c "cd /volumes && tar xvf /volumes/elk-volume.tar --strip 1"

是否可以导出Docker容器以获取数据和所有内容的精确副本,或者我是否以错误的方式处理此问题?

1 个答案:

答案 0 :(得分:0)

您的方法是正确的,docker export命令不会导出与容器关联的卷的内容,因此您必须导出容器而不是备份卷数据。

在进行卷恢复之前,请确保已经运行elk导入的容器。

docker run -v /volumes --name elk-imported  original/sebp/elk:exported /bin/bash
docker run --rm --volumes-from elk-imported -v $(pwd):/volumes original/sebp/elk:exported bash -c "cd /volumes && tar xvf /volumes/elk-volume.tar --strip 1"