Docker部署Drupal与Solr时Solr容器每次启动生成新卷如何解决
Solr 容器每次启动生成新卷的解决方案
该问题的核心原因是你没有为 Solr 服务显式绑定固定的命名卷,默认生成的匿名卷每次重启都会新建,导致卷数量堆积。你可以按照以下步骤修改配置:
1. 修改 docker-compose.yml 配置
打开项目根目录的 docker-compose.yml 文件,做两处调整:
- 在文件顶层添加命名卷声明,自定义卷名比如
solr_data:
volumes: solr_data: # 若需要将数据存在宿主机指定路径,可取消下方注释修改路径 # driver: local # driver_opts: # type: none # o: bind # device: /home/你的用户名/local-solr-data
- 找到 solr 服务的配置块,修改 volumes 字段,把原来的匿名卷挂载替换为绑定上面声明的命名卷:
services: solr: # 原有镜像、端口、环境变量等配置保持不变 volumes: - solr_data:/var/solr # 原有其他挂载(比如自定义配置文件)保留即可
2. 历史数据迁移(可选)
如果之前的匿名卷里有需要保留的 Solr 索引数据,可按以下步骤迁移,不需要保留可直接跳过:
- 执行
docker volume ls找到你之前使用的 Solr 匿名卷 ID - 执行命令将旧卷数据复制到新的命名卷:
docker run --rm -v 你查到的旧卷ID:/from -v solr_data:/to alpine cp -a /from/. /to/
3. 验证配置生效
- 执行
docker compose down停止现有容器(不要加-v参数,否则会删除已有的卷数据) - 执行
docker compose up -d重新启动服务 - 执行
docker volume ls检查,不会再生成新的匿名卷,后续所有启动都会复用solr_data这个固定卷
注意事项
- 启动容器时不要加
--renew-anon-volumes(简写-V)参数,该参数会强制重新生成匿名卷 - 如果你没有用 compose,而是直接用
docker run命令启动,每次启动时指定同一个命名卷即可:docker run -d --name solr -v solr_data:/var/solr 你使用的solr镜像名
内容的提问来源于stack exchange,提问作者Gaetano de Roberto
相关产品推荐
相关产品推荐

