便宜VPS,VPS推荐
整理VPS云服务器优惠信息
Jtti 恒创科技 TOTHost 华纳云 搬瓦工 GigsGigsCloud UCloud LisaHost dotdotnetworks

Docker容器无法连接到宿主机MySQL的解决方法

搬瓦工

最近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地址:

Docker容器无法连接到宿主机MySQL的解决方法

在UFW里开启这个IP地址连接MySQL端口(3306)的权限即可:

ufw allow from 172.22.0.0/16 to any port 3306

你也可以在docker-compose.yml里显示配置网络:

Docker容器无法连接到宿主机MySQL的解决方法

这样,通过这个compose文件创建的docker容器的IP就是172.22.0.0/16,再在UFW里放行这个IP即可。

赞(0)
关注我们
未经允许不得转载:VPS GO » Docker容器无法连接到宿主机MySQL的解决方法