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

Win10 WSL2内Docker Superset容器无法访问宿主机PostgreSQL端口

问题描述

WSL2 Ubuntu中部署的Docker版Superset无法访问Win10宿主机上的PostgreSQL服务(地址172.17.192.1,端口5433),报错提示"The port is closed"。但WSL2系统本身可正常连通该PostgreSQL服务,且PostgreSQL已配置开放监听地址并添加了WSL地址的访问权限。

已完成的部署及配置步骤

Docker版Superset部署步骤

  • 拉取Superset镜像
    sudo docker pull apache/superset
    
  • 启动Superset容器
    sudo docker run -d -p 8080:8088 -e "SUPERSET_SECRET_KEY=your_secret_key_here" --name superset apache/superset
    
  • 初始化Superset
    sudo docker exec -it superset superset fab create-admin \
               --username admin \
               --firstname Superset \
               --lastname Admin \
               --email admin@admin.com \
               --password postgres123; \
    sudo docker exec -it superset superset db upgrade; \
    sudo docker exec -it superset superset load_examples; \
    sudo docker exec -it superset superset init;
    
  • Win10宿主机可通过以下地址正常登录Superset:
    http://localhost:8080/login
    

环境信息

Win10宿主机WSL网卡信息

Adapter Ethernet vEthernet (WSL):
IPv4-adress. . . . . . . . . . . . : 172.17.192.1
Subnet mask . . . . . . . . . . : 255.255.240.0

5433端口已在宿主机开放。

WSL2 Ubuntu内连通测试(可正常访问)

slubun@msknb51:~$ route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         172.17.192.1    0.0.0.0         UG    0      0        0 eth0
    172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
    172.17.192.0    0.0.0.0         255.255.240.0   U     0      0        0 eth0


slubun@msknb51:~$ ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.17.194.48  netmask 255.255.240.0  broadcast 172.17.207.255

slubun@msknb51:~$ telnet 172.17.192.1 5433
    Trying 172.17.192.1...
    Connected to 172.17.192.1.
    Escape character is '^]'.

PostgreSQL配置

postgresql.conf

listen_addresses = '*'      # what IP address(es) to listen on;
    port = 5433             # (change requires restart)

pg_hba.conf

host    all             all             172.17.194.48/20            trust
解决方案

问题根源在于Docker容器默认使用docker0网桥(网段172.17.0.0/16),而当前pg_hba.conf仅允许WSL2的eth0地址段(172.17.194.48/20)访问,容器IP不在该授权范围内。可通过以下三种方式解决:

方式一:修改PostgreSQL的pg_hba.conf,允许Docker网桥网段访问

  1. 打开Win10宿主机上的pg_hba.conf文件,添加以下规则:
    host    all             all             172.17.0.0/16            trust
    
  2. 重启PostgreSQL服务使配置生效。
  3. 在Superset容器中测试连通性:
    sudo docker exec -it superset telnet 172.17.192.1 5433
    

方式二:使用WSL2的host.docker.internal地址访问宿主机

Docker在WSL2环境中提供了host.docker.internal域名,可直接映射到Win10宿主机地址。

  1. 在Superset中配置PostgreSQL数据源时,将主机地址改为host.docker.internal,端口保持5433。
  2. 确保pg_hba.conf允许该域名对应的IP段访问(可暂时添加host all all 0.0.0.0/0 trust测试,完成后再收紧权限)。

方式三:将Superset容器加入WSL2的主机网络

启动容器时使用--network host参数,让容器直接使用WSL2的网络栈,使容器IP与WSL2 eth0地址在同一网段:

  1. 先停止并删除现有Superset容器:
    sudo docker stop superset
    sudo docker rm superset
    
  2. 重新启动容器:
    sudo docker run -d --network host -e "SUPERSET_SECRET_KEY=your_secret_key_here" --name superset apache/superset
    
  3. 再次执行初始化步骤(若需要),然后测试容器访问PostgreSQL:
    sudo docker exec -it superset telnet 172.17.192.1 5433
    

内容的提问来源于stack exchange,提问作者Вячеслав Бекетов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:53:21