使用 Docker Compose 时,我遇到了 Docker 卷在容器重新启动之间不保留数据的问题。这是我的设置和我面临的问题的细分:
Docker Compose 配置:
version: '3.7'
services:
solrcloud1:
image: solr:8.11.2
container_name: solrcloud1
ports:
- "8981:8983"
environment:
- ZK_HOST=zk:2181
networks:
- solr
depends_on:
- zk
volumes:
- solrcloud1_data:/var/solr
solrcloud2:
image: solr:8.11.2
container_name: solrcloud2
ports:
- "8982:8983"
environment:
- ZK_HOST=zk:2181
networks:
- solr
depends_on:
- zk
volumes:
- solrcloud2_data:/var/solr
solrcloud3:
image: solr:8.11.2
container_name: solrcloud3
ports:
- "8983:8983"
environment:
- ZK_HOST=zk:2181
networks:
- solr
depends_on:
- zk
volumes:
- solrcloud3_data:/var/solr
zk:
image: zookeeper:3.6.2
container_name: zk
restart: always
hostname: zk
ports:
- 2181:2181
- 7001:7000
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zk:2888:3888;2181
ZOO_4LW_COMMANDS_WHITELIST: mntr, conf, ruok
ZOO_CFG_EXTRA: "metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider metricsProvider.httpPort=7000 metricsProvider.exportJvmInfo=true"
networks:
- solr
volumes:
- zk_data:/data
networks:
solr:
volumes:
solrcloud1_data:
external: false
solrcloud2_data:
external: false
solrcloud3_data:
external: false
zk_data:
external: false
我确认正在创建卷:
$ docker volume ls
DRIVER VOLUME NAME
local 1zk_3sc_solrcloud1_data
local 1zk_3sc_solrcloud2_data
local 1zk_3sc_solrcloud3_data
local 1zk_3sc_zk_data
local 8a1dadc9debf247e3b5b11d64367438806ac839e9bf99566916a473110782f80
local 15e8ec0fb6052d0458d9f1bba9812326a0eccfe844d75cb7fbf0019ab1cc03f1
local a242b48bedc509504825dcf9ec5d300692282a80cb87bbb0f694c67c2ad969f2
local b8183473dd64a163dc91c6eb9d878675344b6655fd766837fe92e1c1f1381060
问题:
可能导致此问题的原因是什么?如何确保我的 Docker 卷在容器重新启动之间正确保留数据?
任何见解或建议将不胜感激。预先感谢您!
通过在 docker-compose 文件中使用
external: false
,它告诉 docker-compose 管理这些卷,以便当使用这些卷的容器停止(docker-compose down)时,该卷将被删除。如果您希望卷和数据持久存在,则需要使用 external: true
并使用 docker volume create 创建卷。