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

Apache Druid读取本地文件失败:Docker容器目录绑定配置求助

Apache Druid Docker部署读取本地文件的目录绑定配置方案

你遇到的核心问题是当前Docker Compose使用的是Docker命名卷(如druid_shared),而非宿主机本地目录的直接绑定,导致Druid容器无法访问你宿主机上的文件。以下是具体配置步骤:

1. 调整Docker Compose的卷映射

修改docker-compose.yml,将原来的命名卷替换为宿主机本地路径与容器路径的绑定:

修改后的完整配置示例

version: "2.2"

volumes:
  metadata_data: {}
  middle_var: {}
  historical_var: {}
  broker_var: {}
  coordinator_var: {}
  router_var: {}
  # 移除druid_shared命名卷,改用宿主机路径绑定

services:
  postgres:
    container_name: postgres
    image: postgres:latest
    ports:
      - "5432:5432"
    volumes:
      - metadata_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=FoolishPassword
      - POSTGRES_USER=druid
      - POSTGRES_DB=druid

  zookeeper:
    container_name: zookeeper
    image: zookeeper:3.5.10
    ports:
      - "2181:2181"
    environment:
      - ZOO_MY_ID=1

  coordinator:
    image: apache/druid:29.0.1
    container_name: coordinator
    volumes:
      # 替换为宿主机实际路径,比如/Users/xxx/druid_local_files
      - /你的宿主机本地文件目录:/opt/shared
      - coordinator_var:/opt/druid/var
    depends_on:
      - zookeeper
      - postgres
    ports:
      - "8081:8081"
    command:
      - coordinator
    env_file:
      - environment

  broker:
    image: apache/druid:29.0.1
    container_name: broker
    volumes:
      - broker_var:/opt/druid/var
    depends_on:
      - zookeeper
      - postgres
      - coordinator
    ports:
      - "8082:8082"
    command:
      - broker
    env_file:
      - environment

  historical:
    image: apache/druid:29.0.1
    container_name: historical
    volumes:
      # 同样绑定宿主机本地目录
      - /你的宿主机本地文件目录:/opt/shared
    depends_on: 
      - zookeeper
      - postgres
      - coordinator
    ports:
      - "8083:8083"
    command:
      - historical
    env_file:
      - environment

  middlemanager:
    image: apache/druid:29.0.1
    container_name: middlemanager
    volumes:
      # MiddleManager负责数据摄入,必须绑定本地目录
      - /你的宿主机本地文件目录:/opt/shared
      - middle_var:/opt/druid/var
    depends_on: 
      - zookeeper
      - postgres
      - coordinator
    ports:
      - "8091:8091"
      - "8100-8105:8100-8105"
    command:
      - middleManager
    env_file:
      - environment

  router:
    image: apache/druid:29.0.1
    container_name: router
    volumes:
      - router_var:/opt/druid/var
    depends_on:
      - zookeeper
      - postgres
      - coordinator
    ports:
      - "8888:8888"
    command:
      - router
    env_file:
      - environment

2. 配置宿主机目录权限

Druid容器内部默认使用druid用户(UID=1000)运行,需要确保宿主机目录有对应读写权限:

chown -R 1000:1000 /你的宿主机本地文件目录

3. 验证与使用

  1. 重启Druid集群:
docker-compose down && docker-compose up -d
  1. 进入MiddleManager容器验证目录:
docker exec -it middlemanager ls /opt/shared

如果能看到宿主机上的文件,说明绑定成功。

  1. 在Ingestion Spec中使用容器内路径:
    编写数据摄入任务时,inputSource的路径要填容器内的绑定路径(比如/opt/shared),示例:
"inputSource": {
  "type": "local",
  "baseDir": "/opt/shared",
  "filter": "*.csv"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:39:51