Docker部署Jira连接宿主机MySQL 5.6.44时连接被拒绝求助
我来帮你排查这个连接失败的问题,核心原因其实是Docker容器的网络隔离特性——你在Jira配置里填的localhost指向的是Jira容器本身,而不是你的CentOS宿主机上的MySQL服务。咱们一步步来解决:
1. 修正数据库连接的主机地址
首先把Jira配置里的主机名从localhost改成你的CentOS虚拟机的实际内网IP地址(比如192.168.1.100这类),而不是用localhost或者0.0.0.0。
原因很简单:Docker容器默认运行在独立的网络空间里,容器内的localhost只代表容器自己,根本访问不到宿主机的MySQL服务。
2. 检查MySQL的绑定地址配置
打开你的MySQL配置文件(通常是/etc/my.cnf或/etc/mysql/my.cnf),找到bind-address参数:
- 如果它的值是
127.0.0.1,那MySQL只会监听本地回环地址,容器根本连不上 - 把它改成
0.0.0.0(允许所有地址访问)或者你的宿主机内网IP,保存后重启MySQL服务:systemctl restart mysqld
3. 验证容器到宿主机的连通性
进入Jira容器内部,测试能不能访问到宿主机的MySQL端口:
docker exec -it jira bash telnet 你的宿主机IP 3306
如果telnet失败,检查宿主机的防火墙是否开放了3306端口:
firewall-cmd --add-port=3306/tcp --permanent firewall-cmd --reload
4. 确认MySQL用户权限(可选,但保险)
你创建的jiradbuser@'%'已经允许从任何地址连接,但可以再验证一下:
SELECT user, host FROM mysql.user WHERE user='jiradbuser';
确保host列的值是%,或者包含你的Docker容器所在的网段(从日志看你的容器IP是172.18.0.3,对应的网段可能是172.18.0.0/16)。
5. 检查JDBC驱动的放置位置
你把驱动放到了/var/atlassian/jira/lib,但这个目录挂载到容器的/var/atlassian/jira(这是Jira的数据目录),而Jira的应用lib目录通常是/opt/atlassian/jira/lib。如果前面的网络问题解决后还是报错,你可以:
- 直接把驱动复制到容器内的lib目录:
docker cp /var/atlassian/jira/lib/mysql-connector-java-5.1.38.jar jira:/opt/atlassian/jira/lib/ - 或者修改docker-compose.yml,添加一个volume挂载应用lib目录:
jira: image: 'cptactionhank/atlassian-jira-software:latest' container_name: jira restart: unless-stopped healthcheck: disable: true volumes: - '/var/atlassian/jira:/var/atlassian/jira' - '/var/atlassian/jira/lib:/opt/atlassian/jira/lib'
修改后记得重启容器。
按这个顺序排查,最可能的问题就是网络地址配置错误,先解决这个应该就能连上了。
内容的提问来源于stack exchange,提问作者gdahugo

