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. 验证与使用
- 重启Druid集群:
docker-compose down && docker-compose up -d
- 进入MiddleManager容器验证目录:
docker exec -it middlemanager ls /opt/shared
如果能看到宿主机上的文件,说明绑定成功。
- 在Ingestion Spec中使用容器内路径:
编写数据摄入任务时,inputSource的路径要填容器内的绑定路径(比如/opt/shared),示例:
"inputSource": { "type": "local", "baseDir": "/opt/shared", "filter": "*.csv" }
内容的提问来源于stack exchange,提问作者DrGenius
相关产品推荐
相关产品推荐

