Ubuntu 21.04环境下Node容器无法连接MariaDB容器问题求助
问题排查与修复方案
你遇到的核心问题为容器间网络层互通(可ping通)但应用层域名解析/连接失败,对应排查处理步骤如下:
- 检查容器网络归属与服务名配置
- Docker的内置DNS服务仅能解析同一自定义网桥下的容器服务名,如果你的两个容器使用不同的docker-compose.yml编排、或者是单独用
docker run命令启动,默认会分配到不同的默认网桥,无法通过容器名/服务名互相解析。 - 修复方案:
- 若使用docker-compose编排,将MariaDB和Node应用服务写在同一个
docker-compose.yml文件内,无需额外配置网络,默认会加入同一项目网桥,数据库连接地址直接填写compose文件中MariaDB对应的服务名即可(注意不是container_name字段,是服务层级的名称) - 若分开启动容器,先手动创建公共网络:
docker network create common-app-net,启动两个容器时都加上参数--network common-app-net即可实现主机名互通
- 若使用docker-compose编排,将MariaDB和Node应用服务写在同一个
- Docker的内置DNS服务仅能解析同一自定义网桥下的容器服务名,如果你的两个容器使用不同的docker-compose.yml编排、或者是单独用
- 检查Node应用数据库连接配置
ENOTFOUND属于Node DNS解析类报错,若填写MariaDB容器IP依旧报错,大概率是连接地址格式错误:比如多余添加了http://等协议头、端口号拼接错误、字符串存在多余转义字符,正确的连接地址格式为[服务名/IP]:3306- 进入Node容器shell后执行
nc -zv mariadb 3306验证3306端口连通性:若端口连通则直接排查Node代码的连接配置逻辑;若端口不通,检查MariaDB容器配置的bind-address参数是否限制了访问IP,确认MariaDB进程正常监听0.0.0.0:3306
- 检查docker-compose版本兼容性
- 你通过apt安装的是v1版本的docker-compose,1.28及以下的旧版本存在偶发的网桥DNS解析异常问题,可执行
docker-compose -v查看版本号,若版本过旧建议替换为v2版的Docker Compose插件,兼容性更稳定。
- 你通过apt安装的是v1版本的docker-compose,1.28及以下的旧版本存在偶发的网桥DNS解析异常问题,可执行
内容的提问来源于stack exchange,提问作者Dan Forsberg
相关产品推荐
相关产品推荐

