You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose中Solr容器卷跨重启无法持久化数据问题排查

问题:Docker Compose中Solr卷无法在容器重启后持久化数据

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

问题描述

  • 为每个Solr容器定义了命名卷solrcloud1_data、solrcloud2_data、solrcloud3_data用于持久化数据。
  • 创建集合并索引数据后,执行docker-compose down停止并移除所有容器。
  • 执行docker-compose up重启容器后,集合、索引数据及核心未被保留,卷似乎未正确挂载。
  • 已通过docker volume ls验证命名卷存在。

原因分析与解决方案

核心原因

  1. Solr Cloud元数据依赖ZK持久化:Solr Cloud的集群配置(集合、核心信息)存储在ZooKeeper中,如果ZK的卷未正确持久化元数据,重启后Solr节点无法读取集群配置,就会丢失集合信息。
  2. Solr卷权限不匹配:Solr镜像默认以solr用户(UID 8983)运行,而Docker命名卷默认所有者为root,导致Solr进程无法读取/写入卷中的数据,即使卷存在也无法正常加载数据。
  3. 容器启动顺序问题:depends_on仅保证容器启动顺序,不保证ZK服务就绪,Solr节点启动时如果ZK未完全就绪,会导致元数据注册失败。

解决方案

1. 验证ZK卷的持久化状态

  • 检查ZK卷中的数据是否存在:
    docker run --rm -v 1zk_3sc_zk_data:/data busybox ls -la /data
    
    正常情况下应看到version-2目录、myid文件等ZK数据文件。如果为空,说明ZK卷未正确持久化,需重新确认ZK容器的卷挂载配置。
  • 验证ZK服务状态:启动ZK容器后,使用ZK客户端连接检查集群配置:
    docker exec zk zkCli.sh ls /solr
    
    应返回Solr集群的配置节点列表。

2. 修复Solr卷的权限问题

方法一:在Docker Compose中添加权限初始化命令

修改每个Solr服务的command,先修正卷的权限再启动Solr:

solrcloud1:
  # 其他配置不变
  command:
    - bash
    - -c
    - |
      chown -R solr:solr /var/solr
      exec solr start -f -c -z zk:2181

对solrcloud2、solrcloud3执行同样的修改。

方法二:手动修改卷权限

在启动容器前,手动设置卷的所有者为Solr用户:

# 处理solrcloud1_data卷
docker run --rm -v solrcloud1_data:/var/solr busybox chown -R 8983:8983 /var/solr
# 处理solrcloud2_data卷
docker run --rm -v solrcloud2_data:/var/solr busybox chown -R 8983:8983 /var/solr
# 处理solrcloud3_data卷
docker run --rm -v solrcloud3_data:/var/solr busybox chown -R 8983:8983 /var/solr

3. 确保容器启动顺序与服务就绪状态

在ZK服务中添加健康检查,确保Solr仅在ZK就绪后启动:

zk:
  # 其他配置不变
  healthcheck:
    test: ["CMD", "zkServer.sh", "status"]
    interval: 10s
    timeout: 5s
    retries: 5

solrcloud1:
  # 其他配置不变
  depends_on:
    zk:
      condition: service_healthy

对另外两个Solr服务的depends_on做同样修改。

4. 验证Solr卷数据

  • 重启前,进入Solr容器查看数据目录:
    docker exec solrcloud1 ls -la /var/solr/data
    
    应看到对应集合的数据目录。
  • 重启后再次执行上述命令,确认数据目录内容是否保留,以此验证卷是否正常工作。

内容的提问来源于stack exchange,提问作者Arjun Parmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 14:55:59