在Docker容器中保留弹性搜索数据

Cas*_*son 11 elasticsearch docker

我有一个正在运行的ES docker容器,我这样运行

docker run -p 80:9200 -p 9300:9300 --name es-loaded-with-data --privileged=true --restart=always es-loaded-with-data
Run Code Online (Sandbox Code Playgroud)

我用一堆测试数据加载了ES并希望将它保存在那个状态,所以我跟进了

docker commit containerid es-tester
docker save es-tester > es-tester.tar
Run Code Online (Sandbox Code Playgroud)

然后,当我把它加载回数据时,一切都消失了......是什么给出的?

docker load < es-tester.tar
Run Code Online (Sandbox Code Playgroud)

cre*_*ack 13

如果从官方ES图像开始,它使用的是体积(https://github.com/docker-library/elasticsearch/blob/7d08b8e82fb8ca19745dab75ee32ba5a746ac999/2.1/Dockerfile#L41).因此,Docker不会提交写入该卷的任何数据.要备份数据,您需要将数据复制出容器:docker cp <container name>:/usr/share/elasticsearch/data <dest>

  • 如果你像我一样,使用 docker-compose.yml 并给出了安装卷的路径,但它不起作用,那么 `sudo chown -R 1000:1000 /path/to/volume` 应该可以工作。在我的案例中起作用。 (3认同)
  • 我最终想出来并感谢答案.我的问题的真正关键在于我正在查看的Dockerfile被检查到github没有VOLUME语句但用于构建我正在使用的ES docker镜像的那个...这引起了我严重的困惑.是的我使用了docker cp,现在有一个版本可以使用-v在docker run上加载数据,而且还没有使用卷但是obvioulsy会生成一个巨大的docker镜像.谢谢creack (2认同)