如何将宿主机Postgres、Redis暴露给Docker中的Apache Superset?
配置Docker版Superset连接宿主机的Postgres和Redis
步骤1:移除内置的Redis/Postgres服务
直接删除docker-compose-non-dev.yml里自带的这两段服务代码:
redis: image: redis:7 container_name: superset_cache restart: unless-stopped volumes: - redis:/data db: env_file: docker/.env-non-dev image: postgres:14 container_name: superset_db restart: unless-stopped volumes: - db_home:/var/lib/postgresql/data
同时删除文件顶部volumes段中的redis和db_home定义,避免创建无用的存储卷。
步骤2:修改环境变量配置
打开docker/.env-non-dev文件,替换成宿主机上Postgres和Redis的实际参数:
# Redis连接配置 REDIS_HOST=host.docker.internal # Linux系统也可直接填宿主机实际IP,比如192.168.3.10 REDIS_PORT=6379 REDIS_DB=0 # 若Redis设了密码,取消下面注释并填写密码 # REDIS_PASSWORD=your_redis_password # Postgres连接配置(Superset元数据库用宿主机的Postgres) POSTGRES_HOST=host.docker.internal POSTGRES_PORT=5432 POSTGRES_DB=superset # 提前在宿主机Postgres中创建好这个数据库 POSTGRES_USER=superset_user # 宿主机Postgres中拥有该库权限的用户 POSTGRES_PASSWORD=superset_password
步骤3:调整服务依赖项
找到文件顶部的x-superset-depends-on配置块,删除原有的redis和db依赖,修改后如下:
x-superset-depends-on: &superset-depends-on # 不再依赖内置的redis和db服务
步骤4:开放宿主机服务的访问权限
- Postgres:修改
pg_hba.conf,添加允许Docker网段(如172.17.0.0/16)或host.docker.internal对应IP访问的规则;同时修改postgresql.conf中的listen_addresses为*,允许远程连接,最后重启Postgres服务。 - Redis:若Redis绑定了
127.0.0.1,修改redis.conf中的bind为0.0.0.0(或添加Docker网段IP),确保密码与环境变量配置一致,然后重启Redis服务。
启动Superset
执行以下命令启动服务:
docker-compose -f docker-compose-non-dev.yml up -d
内容的提问来源于stack exchange,提问作者Naga
相关产品推荐
相关产品推荐

