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

Docker Swarm容器化Rails应用连接Compose部署MySQL失败解决

解决Rails Swarm容器连接外部MySQL容器的权限问题

问题根源

报错中的10.0.13.248是Docker Swarm overlay网络的容器源IP,而非Rails所在VM的宿主机IP。你的MySQL用户bduser仅授权了Rails宿主机IP的访问权限,未允许Swarm集群的overlay网络IP段访问,因此触发连接拒绝错误。

具体解决步骤

1. 确认Swarm overlay网络的IP段

在Rails所在的Swarm节点上执行以下命令,查看Swarm overlay网络的IP范围:

docker network inspect overlay

找到输出中的IPAM.Config.Subnet字段(比如10.0.13.0/24),这就是需要授权的IP段。

2. 给MySQL用户授权Swarm IP段访问

登录到MySQL容器(或通过宿主机IP直接连接MySQL),执行以下SQL命令:

-- 授权bduser从Swarm的目标IP段访问所有数据库(可根据实际需求调整数据库范围)
GRANT ALL PRIVILEGES ON *.* TO 'bduser'@'10.0.13.%' IDENTIFIED BY '你的用户密码';
-- 刷新权限使配置立即生效
FLUSH PRIVILEGES;

若不确定具体IP段,可临时授权所有IP进行测试(生产环境不建议使用):

GRANT ALL PRIVILEGES ON *.* TO 'bduser'@'%' IDENTIFIED BY '你的用户密码';
FLUSH PRIVILEGES;

3. 验证权限配置

执行以下SQL查看用户授权情况,确认已添加目标IP段的访问权限:

SELECT user, host FROM mysql.user WHERE user='bduser';

4. 额外检查项

  • 确保MySQL所在VM的防火墙/安全组已开放3306端口,允许Rails所在VM的Swarm overlay网络IP段访问。
  • Rails数据库配置文件中的host需填写MySQL所在VM的宿主机IP,而非MySQL容器的内部IP(因为容器已映射宿主机3306端口)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:16:21