我正在研究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容器以获取数据和所有内容的精确副本,或者我是否以错误的方式处理此问题?
答案 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"