Docker部署Jenkins与SonarQube后构建报错:无法连接SonarQube服务器
解决Jenkins容器无法连接SonarQube容器的问题
老哥,我一眼就看出问题所在了——你在Jenkins里配置的SonarQube地址是http://localhost:9000,但Docker容器里的localhost指的是容器自己,不是你的宿主机!Jenkins容器根本找不到宿主机上的SonarQube服务,自然报连接失败。
给你几个靠谱的解决办法,按优先级来:
1. 用Docker自定义网络打通两个容器
这是最规范的Docker容器通信方式,步骤如下:
- 先创建一个专属网络:
docker network create jenkins-sonar-network - 停止并重启SonarQube容器,把它加入这个网络(假设你的SonarQube容器名是
sonarqube):docker stop sonarqube docker run --name sonarqube --network jenkins-sonar-network -p 9000:9000 -d sonarqube:latest - 同样停止并重启Jenkins容器,加入同一个网络(用你原来的Jenkins启动命令,加上
--network jenkins-sonar-network参数):docker stop jenkins docker run --name jenkins --network jenkins-sonar-network -p 8080:8080 -p 50000:50000 -d bitnami/jenkins:latest - 最后去Jenkins的SonarQube配置里,把服务器地址改成
http://sonarqube:9000(这里的sonarqube是你的SonarQube容器名,Docker会自动解析成对应容器的IP)。
2. 用Docker Compose一键部署(更省心)
如果之前没用docker-compose,强烈建议改用它,配置好后一键启动,容器网络自动打通。给你写个参考配置:
version: '3.8' services: jenkins: image: bitnami/jenkins:latest ports: - "8080:8080" - "50000:50000" volumes: - jenkins_data:/bitnami/jenkins networks: - jenkins-sonar-net sonarqube: image: sonarqube:latest ports: - "9000:9000" environment: - SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true # 禁用ES启动检查,避免内存不足报错 volumes: - sonar_data:/opt/sonarqube/data - sonar_extensions:/opt/sonarqube/extensions - sonar_logs:/opt/sonarqube/logs networks: - jenkins-sonar-net networks: jenkins-sonar-net: driver: bridge volumes: jenkins_data: sonar_data: sonar_extensions: sonar_logs:
把这段内容保存成docker-compose.yml,然后执行docker-compose up -d启动服务,之后Jenkins里直接用http://sonarqube:9000就能访问SonarQube了。
3. 验证网络连通性(排查问题用)
如果改完还是有问题,进Jenkins容器里ping一下SonarQube容器,确认网络是否通:
docker exec -it jenkins ping sonarqube
如果能收到回复,说明网络没问题,那大概率是Jenkins的SonarQube配置没改对;如果ping不通,检查容器是否都加入了同一个网络。
内容的提问来源于stack exchange,提问作者Dean.Kim
相关产品推荐
相关产品推荐

