如何通过docker-compose运行Diskover?连接Elasticsearch遇故障
问题描述
尝试通过docker-compose运行Diskover,初始使用linuxserver/diskover镜像官方提供的docker-compose文件时无法连接Elasticsearch;修改配置后,Diskover 2.2.2可启动,前端能打开且可修改密码,但启动日志中出现错误:cp: cannot stat '/app/diskover-web/public/*.sample': No such file or directory。Elasticsearch容器无报错,且可通过localhost:9200访问,但问题仍未解决。
使用的docker-compose配置
services: diskover: image: lscr.io/linuxserver/diskover container_name: diskover environment: - PUID=1000 - PGID=1000 - TZ=America/New_York - ES_HOST=elasticsearch - ES_PORT=9200 volumes: - /path/to/diskover/config:/config - /home/:/data ports: - 8000:80 mem_limit: 4096m restart: unless-stopped depends_on: - elasticsearch elasticsearch: image: elasticsearch:8.8.0 container_name: elasticsearch ports: - 9200:9200 - 9300:9300 environment: - discovery.type=single-node - xpack.security.enabled=false
容器启动日志
Attaching to diskover, elasticsearch-1 diskover | [migrations] started diskover | [migrations] 01-nginx-site-confs-default: skipped diskover | [migrations] done diskover | ─────────────────────────────────────── diskover | diskover | ██╗ ███████╗██╗ ██████╗ diskover | ██║ ██╔════╝██║██╔═══██╗ diskover | ██║ ███████╗██║██║ ██║ diskover | ██║ ╚════██║██║██║ ██║ diskover | ███████╗███████║██║╚██████╔╝ diskover | ╚══════╝╚══════╝╚═╝ ╚═════╝ diskover | diskover | Brought to you by linuxserver.io diskover | ─────────────────────────────────────── diskover | diskover | To support LSIO projects visit: diskover | https://www.linuxserver.io/donate/ diskover | diskover | ─────────────────────────────────────── diskover | GID/UID diskover | ─────────────────────────────────────── diskover | diskover | User UID: 1000 diskover | User GID: 1000 diskover | ─────────────────────────────────────── diskover | diskover | using keys found in /config/keys diskover | cp: cannot stat '/app/diskover-web/public/*.sample': No such file or directory diskover | [custom-init] No custom files found, skipping... diskover | [ls.io-init] done.
解决方案
1. 修复*.sample文件缺失报错
这个错误是容器启动脚本尝试复制不存在的示例文件导致的,可通过以下两种方式处理:
- 手动创建缺失文件
进入diskover容器:
docker exec -it diskover bash
创建目录并生成空示例文件:
mkdir -p /app/diskover-web/public touch /app/diskover-web/public/placeholder.sample
退出容器后重启:
docker restart diskover
- 注释启动脚本中的复制命令
进入容器找到启动脚本(通常在/etc/cont-init.d/目录下),找到执行cp /app/diskover-web/public/*.sample的行,注释后保存并重启容器。
2. 验证容器间网络连通性
虽然本地能访问ES,但需确认diskover容器能否和elasticsearch容器通信:
执行命令检查连通性:
docker exec diskover ping elasticsearch
如果无法ping通,检查docker-compose的网络配置——同一compose文件的服务默认在同一网络,若仍有问题,可显式添加网络配置。
同时检查挂载的Diskover配置文件/path/to/diskover/config/diskover/config.ini,确保ES配置与环境变量一致:
[elasticsearch] host = elasticsearch port = 9200
3. 调整Elasticsearch版本
Diskover 2.2.2与ES 8.x版本存在兼容性问题,建议切换到ES 7.x稳定版(如7.17.x),修改docker-compose中elasticsearch的镜像:
elasticsearch: image: elasticsearch:7.17.12 container_name: elasticsearch ports: - 9200:9200 - 9300:9300 environment: - discovery.type=single-node - xpack.security.enabled=false
修改后重新部署:
docker-compose down && docker-compose up -d
内容的提问来源于stack exchange,提问作者Soerendip
相关产品推荐
相关产品推荐

