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

同服务器下两个Docker容器通信问题(Mariadb版本兼容场景)

解决同服务器Docker容器间(应用与Mariadb 10.9)的通信问题

核心方案:使用Docker自定义桥接网络

Docker默认的bridge网络不支持容器名DNS解析,自定义网络是容器间通信的最可靠方式,步骤如下:

  1. 创建自定义网络
docker network create app-db-network
  1. 启动Mariadb 10.9容器并加入该网络
    启动时指定网络,同时配置必要的环境变量:
docker run -d \
  --name mariadb-10.9 \
  --network app-db-network \
  -e MYSQL_ROOT_PASSWORD=你的root密码 \
  -e MYSQL_DATABASE=你的应用数据库名 \
  -e MYSQL_USER=你的应用数据库用户 \
  -e MYSQL_PASSWORD=你的应用数据库密码 \
  mariadb:10.9
  1. 启动应用容器并加入同一网络
    确保应用容器和数据库容器在同一个自定义网络内:
docker run -d \
  --name 你的应用容器名 \
  --network app-db-network \
  # 这里添加你的应用容器其他配置(如端口映射、环境变量等)
  你的应用镜像名:标签
  1. 配置应用的数据库连接字符串
    应用连接数据库时,直接使用数据库容器的名称mariadb-10.9作为主机名,示例连接字符串:
mysql://你的应用数据库用户:你的应用数据库密码@mariadb-10.9:3306/你的应用数据库名

排查与验证步骤

如果按上述步骤操作后仍无法通信,按以下方式排查:

  • 检查容器网络归属:执行以下命令确认两个容器都在同一个自定义网络中
docker inspect mariadb-10.9 | grep Networks
docker inspect 你的应用容器名 | grep Networks
  • 测试容器间连通性:进入应用容器,ping数据库容器名验证网络连通
docker exec -it 你的应用容器名 ping mariadb-10.9

如果能ping通,说明网络正常,问题可能出在数据库权限或应用配置。

  • 检查Mariadb用户权限:确保数据库用户允许从任意地址(或应用容器所在网段)连接,登录Mariadb执行:
GRANT ALL PRIVILEGES ON 你的应用数据库名.* TO '你的应用数据库用户'@'%' IDENTIFIED BY '你的应用数据库密码';
FLUSH PRIVILEGES;

注意事项

  • 无需将Mariadb 10.9容器的3306端口映射到主机(除非需要外部访问),容器间通信直接使用自定义网络内的容器端口即可,避免与原有Mariadb 10.11的3306端口冲突。
  • 不要使用Docker默认的bridge网络,其容器名解析存在限制,容易导致通信失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:22:50