首页 > 解决方案 > Docker,是否可以将主机的数据复制到 docker 卷?

问题描述

目前我正在使用主机的目录作为弹性搜索数据的挂载点(?)(/var/lib/elasticsearch:/usr/share/elasticsearch/data)

 version: '3'

 services:
  elasticsearch:
   build:
     context: .
     dockerfile: ./compose/elasticsearch/Dockerfile
     args:
       - VERSION=${VERSION}
       - ELASTICSEARCH_PORT=${ELASTICSEARCH_PORT}
       - MEM=${MEM}
       - CLUSTER_NAME=${CLUSTER_NAME}
       - ENV=${ENV}
   container_name: elasticsearch
   network_mode: host
   environment:
     - discovery.type=single-node
   volumes:
    - /var/lib/elasticsearch:/usr/share/elasticsearch/data

我想使用 docker 的音量如下。

/var/lib/elasticsearch是否可以将数据移入data:

 services:
  elasticsearch:
   build:
     context: .
     dockerfile: ./compose/elasticsearch/Dockerfile
     args:
       - VERSION=${VERSION}
       - ELASTICSEARCH_PORT=${ELASTICSEARCH_PORT}
       - MEM=${MEM}
       - CLUSTER_NAME=${CLUSTER_NAME}
       - ENV=${ENV}
   container_name: elasticsearch
   network_mode: host
   environment:
     - discovery.type=single-node
   volumes:
     - data:/usr/share/elasticsearch/data

  volumes:
    data:

标签: dockerelasticsearch

解决方案


创建挂载卷的新容器后,您可以使用docker cp命令从主机复制文件。data

docker cp /var/lib/elasticsearch/. elasticsearch:/usr/share/elasticsearch/data/

您还可以在启动 elasticsearch 容器之前创建一个虚拟容器,以防您希望在启动 elasticsearch 容器之前存在数据。如果您使用 docker-compose 启动 elasticsearch,这将不起作用,因为 docker-compose 通过预先挂起项目名称来命名卷。

docker container create --name dummy -v data:/root hello-world
docker cp /var/lib/elasticsearch/. dummy:/root/`
docker rm dummy

推荐阅读