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

Docker Compose部署SonarQube无法连接PostgreSQL数据库求助

问题排查与解决方案

核心问题定位

两个异常都指向容器网络的DNS解析出问题了——这就是PostgreSQL容器没法更新软件、SonarQube连不上数据库的根源。

具体排查和修复步骤

1. 检查Docker Compose的网络配置

  • 看看你的compose文件里有没有手动给自定义网络指定DNS服务器,如果填了不可用的地址(比如写错的公共DNS),就会导致解析失败。
  • 比如这种错误配置要改掉:
    networks:
      sonar-net:
        ipam:
          config:
            - subnet: 172.20.0.0/16
              dns: 8.8.8.8  # 要是这个地址连不上就会出问题
    
  • 修复:要么删掉自定义DNS那行,让Docker自动用宿主机的DNS;要么换成靠谱的公共DNS,比如114.114.114.114。

2. 测试容器间的DNS解析

进SonarQube容器,ping一下PostgreSQL的容器名(比如你compose里设的postgres):

docker exec -it 你的sonarqube容器名 ping postgres

如果ping不通,说明同一网络里的DNS解析失效了,试试重启Docker服务:

  • Linux:systemctl restart docker
  • Windows/macOS:直接在Docker Desktop里重启应用
  • 顺便看看宿主机本身DNS正常不,宿主机ping个外网域名(比如baidu.com),要是宿主机DNS都坏了,容器肯定也跟着出问题。

3. 确认PostgreSQL的监听设置

虽然PostgreSQL容器本地能操作,但可能只监听了localhost,导致其他容器连不上:

  • 进PostgreSQL容器,查postgresql.conf里的listen_addresses:
    docker exec -it 你的postgres容器名 cat /var/lib/postgresql/data/postgresql.conf | grep listen_addresses
    
  • 如果显示是localhost,得改成*。最快的办法是在compose里给PostgreSQL加个环境变量POSTGRES_HOST_AUTH_METHOD=trust(测试用,生产环境记得用密码认证),同时确保SonarQube配置的数据库名、用户名、密码和PostgreSQL的完全一致。

4. 检查宿主机的防火墙/iptables

宿主机的防火墙可能拦了容器间的通信,或者iptables规则乱了:

  • 先临时关掉防火墙试试:Linux下systemctl stop firewalld,看SonarQube能不能正常启动。
  • 要是关掉后好了,要么给Docker网络加放行规则,要么重置iptables:
    iptables -F
    iptables -X
    systemctl restart docker
    

5. 换个靠谱的PostgreSQL镜像

有些旧的PostgreSQL镜像可能网络配置有坑,试试官方的13-alpine版本,轻量还不容易出问题:

services:
  postgres:
    image: postgres:13-alpine
    # 其他配置不变
    ...

总结

先搞定DNS解析的问题,因为两个异常都和网络请求有关。先解决PostgreSQL容器的DNS错误(比如重启Docker、调整网络DNS),再验证SonarQube能不能连上PostgreSQL,基本就能解决Socket超时的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:27:29