Docker容器无法连接远程MariaDB服务器问题求助
解决思路
1. 先排查服务器与数据库的网络连通性
- 先在自有服务器的宿主机上测试连接:执行
mysql -h xxxxxxxxxxx.jcloud-ver-jpc.ik-server.com -u 你的用户名 -p,如果宿主机都连不上,说明是服务器到数据库的网络问题——比如数据库的安全组/白名单没加服务器IP、服务器防火墙拦截了数据库端口,或者数据库端没对外开放监听。 - 如果宿主机能连,再进入容器内部测试:启动容器时临时替换CMD为bash(
docker run -it 你的镜像名 bash),然后在容器里装mariadb-client(apt-get install mariadb-client -y),再用同样的mysql命令测试,看容器能不能解析域名、通数据库端口。
2. 检查Docker网络配置
- 试试用host模式启动容器:
docker run --network host 你的镜像名,让容器直接复用宿主机的网络栈,和本地机器的网络环境一致,看能不能解决连接问题。 - 检查容器DNS:进入容器后执行
cat /etc/resolv.conf,对比宿主机的DNS配置,如果容器DNS不对,启动时手动指定(比如docker run --dns 8.8.8.8 你的镜像名)。
3. 确认数据库的访问控制规则
- 检查数据库的IP白名单:本地能连说明本地IP在白名单里,服务器的公网IP(或者容器所在的私有IP段)可能没被加入,导致容器连接被拒。
- 确认数据库监听地址:MariaDB默认可能只监听127.0.0.1,需要修改
my.cnf里的bind-address为0.0.0.0(或者允许的IP段),然后重启数据库服务。
4. 代码与依赖的小调整
- 错误码115可能和连接超时有关,在代码里增加连接超时参数:
import mariadb conn = mariadb.connect( host="xxxxxxxxxxx.jcloud-ver-jpc.ik-server.com", user="你的用户名", password="你的密码", database="你的数据库名", connect_timeout=30 # 延长超时时间 ) - 可以简化Dockerfile里的apt安装步骤,减少镜像层数:
RUN apt-get update && apt-get install -y curl gcc wget libmariadb3 libmariadb-dev
内容的提问来源于stack exchange,提问作者rcardinaux
相关产品推荐
相关产品推荐

