Docker环境下Mage.AI连接容器化MySQL失败的解决咨询
解决Mage.AI容器连接Docker中MySQL容器的问题
问题核心原因
- 容器网络隔离:Docker容器内的
localhost指向容器自身,而非宿主机,所以Mage.AI配置里写localhost无法访问到local-mysql容器。 - 端口异常:错误信息里的
33060大概率是配置解析异常导致的,结合你的启动命令,重点还是网络连通性问题。
具体解决方案
方案1:用Docker容器名作为主机地址(推荐)
Docker默认bridge网络下,容器可通过容器名互相访问,步骤如下:
- 修改Mage.AI数据库配置:
将host字段值从localhost改为local-mysql,其他配置保持不变:database: kdtestdb host: local-mysql port: 3306 username: root password: mypassword connection_method: direct ssh_host: null ssh_port: 22 ssh_username: null ssh_password: null ssh_pkey: null - 重启Mage.AI容器,让配置生效。
- 授权MySQL远程访问:默认MySQL容器的root用户仅允许本地连接,需进入容器修改权限:
先进入MySQL容器:
执行授权SQL(如果docker exec -it local-mysql mysql -uroot -pmypasswordkdtestdb未创建,先执行CREATE DATABASE kdtestdb;):GRANT ALL PRIVILEGES ON kdtestdb.* TO 'root'@'%' IDENTIFIED BY 'mypassword'; FLUSH PRIVILEGES;
方案2:用宿主机IP作为主机地址
如果容器不在同一默认网络,可直接用宿主机局域网IP:
- 获取宿主机IP:Linux/macOS用
ip addr或ifconfig,Windows用ipconfig找到对应网卡的IP(比如192.168.1.100)。 - 修改Mage.AI配置:将
host改为宿主机IP,端口保持3306。 - 同样执行MySQL远程授权:同方案1的步骤3。
方案3:自定义Docker网络(更稳定)
创建专属网络避免默认bridge的潜在问题:
- 创建自定义网络:
docker network create mage-mysql-net - 重新启动MySQL容器并加入网络:
docker stop local-mysql docker rm local-mysql docker run --name local-mysql --network mage-mysql-net -e MYSQL_ROOT_PASSWORD=mypassword -p 3306:3306 -d mysql:latest - 重启Mage.AI容器加入同一网络:找到Mage.AI的启动命令,添加
--network mage-mysql-net参数后重启。 - 修改Mage.AI配置:
host设为local-mysql,端口3306,同方案1。
额外检查项
- 确认
kdtestdb数据库已存在,若未创建,进入MySQL容器执行CREATE DATABASE IF NOT EXISTS kdtestdb;。 - 检查宿主机防火墙是否阻止了3306端口(用宿主机IP连接时)。
- 确认两个容器均处于运行状态:执行
docker ps查看容器状态。
内容的提问来源于stack exchange,提问作者KD_Raj
相关产品推荐
相关产品推荐

