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

如何解决Docker部署的Superset无法连接Druid的问题?

问题:Superset无法连接Docker部署的Druid数据源

背景

我正在搭建一个由Kafka+Druid+Superset组成的项目,三个组件均通过Docker Compose单独部署,本地单独运行状态正常:Kafka已存入测试数据,Druid运行无异常,Superset能正常加载演示数据。

问题描述

尝试在Superset中添加Apache Druid数据源时,先后使用以下SQLALCHEMY URI:

druid://localhost:8082/druid/v2/sql/
druid+http://localhost:8082/druid/v2/sql/
druid+https://localhost:8082/druid/v2/sql/
druid+https://172.19.0.7:8082/druid/v2/sql/

均出现报错:

ERROR: (builtins.NoneType) None
(Background on this error at: https://sqlalche.me/e/14/dbapi)

仅最后一个URI出现超时问题。

排查测试

为确认Druid本身无异常,我编写了Python测试脚本,使用pydruid连接Druid并执行查询,脚本可正常返回数据:

from pydruid.db import connect

conn = connect(host='localhost', port=8082, path='/druid/v2/sql/', scheme='http')

cursor = conn.cursor()
print(cursor.url)
query = "SELECT * FROM test LIMIT 10"

cursor.execute(query)

rows = cursor.fetchall()

for row in rows:
    print(row)

cursor.close()
conn.close()

我的Superset Docker Compose配置如下:

version: '3.7'
services:
  superset:
    image: apache/superset
    container_name: superset
    ports:
      - "8088:8088"
    environment:
      SUPERSET_LOAD_EXAMPLES: 'yes'  # Load examples to explore Superset features
      SUPERSET_DB_URI: 'sqlite:////superset/superset.db'  # Using SQLite for simplicity
      SUPERSET_SECRET_KEY: 'dsadsadsadsadasdas'
    volumes:
      - superset_home:/superset
    command: ["superset", "run", "-h", "0.0.0.0", "-p", "8088", "--with-threads", "--reload", "--debugger"]

volumes:
  superset_home:

问题原因及解决方法

1. 容器网络互通问题

Superset运行在Docker容器内,使用localhost会指向容器自身而非宿主机。你的测试脚本在宿主机运行能访问Druid,但容器内的Superset无法通过localhost访问宿主机的Druid服务。

  • 解决方法:
    • 如果Druid也运行在Docker容器中,将两者加入同一个Docker网络,然后使用Druid容器名作为主机名,比如druid+http://druid-container:8082/druid/v2/sql/(替换druid-container为你的Druid容器实际名称)。
    • 如果Druid运行在宿主机,Linux/macOS下可使用宿主机Docker内部IP(通常为172.17.0.1),Windows下使用host.docker.internal,URI格式为druid+http://172.17.0.1:8082/druid/v2/sql/。

2. SQLAlchemy URI格式错误

Superset连接Druid的正确URI格式应为druid+http://<host>:<port>/druid/v2/sql/,注意不要额外添加后缀斜杠,同时要确保协议(http/https)与Druid实际配置一致。你的Druid使用http协议,不要用druid+https://格式,避免协议不匹配导致连接失败。

3. Superset依赖缺失

虽然官方镜像通常包含pydruid,但如果镜像版本较旧或依赖损坏,也会导致连接失败。可进入Superset容器升级依赖:

docker exec -it superset pip install --upgrade pydruid

安装完成后重启Superset容器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:52:47