如何在Docker Compose中实现Elasticsearch容器文件反向挂载到本地?
解决Docker挂载本地目录覆盖Elasticsearch容器文件的问题
问题原因
Docker的绑定挂载(bind mount)特性:当你将本地目录挂载到容器内目录时,本地目录的内容会直接覆盖容器内目标目录的内容,而非自动双向同步。所以直接挂载空的本地./config会导致容器内原本的配置文件被隐藏。
解决步骤
停止当前运行的容器
docker-compose down创建本地config目录(若不存在)
mkdir -p ./config从临时容器复制容器内的config文件到本地
启动一个临时Elasticsearch容器,将容器内默认的配置文件复制到本地目录:docker run --rm -v $(pwd)/config:/tmp/config elasticsearch:7.9.2 bash -c "cp -r /usr/share/elasticsearch/config/* /tmp/config/"调整本地目录权限
Elasticsearch容器内部使用UID为1000的用户运行,需要给本地目录设置对应权限,否则容器启动会报错:chown -R 1000:1000 ./config保留原挂载配置并启动容器
你的docker-compose.yml中的挂载配置无需修改,保持原样即可:volumes: - ./config:/usr/share/elasticsearch/config启动容器:
docker-compose up -d
后续说明
现在本地./config目录已经包含容器原本的配置文件,挂载后容器会读取本地目录的内容,后续你修改本地文件会同步到容器内,容器内若在挂载目录下生成新文件也会同步到本地。
内容的提问来源于stack exchange,提问作者Smile
相关产品推荐
相关产品推荐

