最近VPS GO在一台Ubuntu的VPS上部署了一个Docker程序,需要连接宿主机(VPS)上的MySQL,一直报错连接超时:dial tcp 172.17.0.1:3306: connect: connection timed out,本文分享下解决方法,包括连接教程、防火墙配置等。
一、问题描述
VPS系统版本:Ubuntu 24.04 LTS (GNU/Linux 6.8.0-51-generic x86_64)
防火墙状态:开启了UFW
MySQL状态:开启了“所有人”可连接MySQL的权限(bind-address = 0.0.0.0)
Docker通过host.docker.internal:3306这个地址来请求宿主机的MySQL
报错:连接超时,dial tcp 172.17.0.1:3306: connect: connection timed out
二、解决方法
解决方法1:
直接关闭UFW:
ufw disable
这样设置后,任何IP都可以连接这个MySQL数据库,自然也是可以从Docker容器里访问的。
解决方法2:
为了确保MySQL数据库的安全性,我们需要通过UFW来管理只有指定的IP才能访问3306端口(MySQL的端口),这样就可以保证只有本地VPS和Docker容器内可以访问这个MySQL,所以我们要首先确定Docker容器的IP地址。
如果没有显式指定网络,Docker Compose会自动创建默认网络,我们可以通过以下命令来查看Docker容器的网络:
docker network ls docker network inspect network_name
这样就可以看到默认创建的网络IP地址:
在UFW里开启这个IP地址连接MySQL端口(3306)的权限即可:
ufw allow from 172.22.0.0/16 to any port 3306
你也可以在docker-compose.yml里显示配置网络:
这样,通过这个compose文件创建的docker容器的IP就是172.22.0.0/16,再在UFW里放行这个IP即可。