Docker Pi-hole容器443端口无法访问的排查求助
无法通过HTTPS 443端口访问Pi-hole容器的排查与解决
问题背景
我运行的Pi-hole容器信息如下:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b48f996a91f5 pihole/pihole:latest "/s6-init" 2 weeks ago Up 37 minutes (healthy) 0.0.0.0:53->53/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:53->53/udp, 67/udp pihole
可正常通过http://localhost:80/admin访问管理界面,但https://localhost:443/admin无法访问,且主机防火墙已关闭。为排查端口问题,执行了以下PowerShell命令:
端口监听情况
PS C:\WINDOWS\system32> netstat -ano|findstr 443 TCP 0.0.0.0:443 0.0.0.0:0 LISTENING 13364 TCP 192.168.1.18:1163 190.98.161.73:443 CLOSE_WAIT 7844 TCP 192.168.1.18:1167 190.98.161.88:443 CLOSE_WAIT 7844 TCP 192.168.1.18:1169 13.107.246.33:443 CLOSE_WAIT 7844 TCP 192.168.1.18:1176 23.213.30.115:443 CLOSE_WAIT 7844 TCP 192.168.1.18:1327 172.64.155.249:443 ESTABLISHED 9044 TCP 192.168.1.18:1328 151.101.52.193:443 ESTABLISHED 9044 TCP 192.168.1.18:1350 52.160.70.199:443 TIME_WAIT 0 TCP 192.168.1.18:6612 20.7.2.167:443 ESTABLISHED 4740 TCP [::]:443 [::]:0 LISTENING 13364 TCP [::1]:443 [::]:0 LISTENING 18644
其中第一行和最后两行是容器启动后新增的,前两行(0.0.0.0:443和[::]:443)由Docker负责端口转发,最后一行[::1]:443由wslhost监听,暂不清楚其作用。
端口关联进程
PS C:\WINDOWS\system32> Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName ------- ------ ----- ----- ------ -- -- ----------- 353 25 26940 35392 6.25 13364 33 com.docker.backend 147 12 1568 6764 0.14 18644 33 wslhost
问题原因
- Pi-hole容器默认无HTTPS服务:官方Pi-hole镜像仅默认开启80端口的HTTP服务,容器内部443端口没有运行任何HTTPS服务,即使主机端口转发到容器443,也没有服务响应请求。
- IPv6回环端口被占用:
[::1]:443(IPv6本地回环地址)被wslhost进程占用,当通过localhost访问时,系统可能优先使用IPv6地址,导致请求被wslhost拦截,无法转发到Docker容器。
解决方法
方法一:为Pi-hole配置HTTPS(推荐)
Pi-hole本身不内置HTTPS,需手动添加SSL支持:
- 进入容器:
docker exec -it pihole bash - 安装web服务器的SSL模块(比如lighttpd-mod-openssl,Pi-hole默认用lighttpd)
- 生成或导入SSL证书(自签名证书用于测试,正式环境推荐Let's Encrypt证书)
- 修改lighttpd配置,开启443端口的HTTPS监听
方法二:调整Docker端口映射
避开被占用的443端口,改用其他主机端口转发到容器443:
- 停止并删除现有容器:
docker stop pihole docker rm pihole - 重新启动容器,修改端口映射(例如用8443端口):
docker run -d -p 53:53/tcp -p 53:53/udp -p 80:80/tcp -p 8443:443/tcp --name pihole pihole/pihole:latest - 之后通过
https://localhost:8443/admin访问
方法三:停止占用端口的wslhost进程(谨慎操作)
- 若确认wslhost未运行必要服务,可结束进程:
Stop-Process -Id 18644 - 注意:wslhost是WSL的核心进程,结束可能导致WSL环境异常,非必要不建议操作
内容的提问来源于stack exchange,提问作者daego
相关产品推荐
相关产品推荐

