如何在Docker for Mac容器内连接宿主机上的MySQL?
需求说明
- 在Docker for Mac容器内搭建后端服务器
- 通过该服务器访问宿主机上运行的MySQL
当前问题
- 无法从Docker for Mac容器内连接到MySQL
已尝试操作
- 使用
host.docker.internal启动容器,命令如下:
docker run --rm -it --add-host=host.docker.internal:host-gateway ubuntu:22.04 sh start.sh
- 请求MySQL的URL如下:
app@tcp(127.0.0.1:3306)/app_name?parseTime=true&charset=utf8mb4
解决步骤
- 修正MySQL连接地址
容器内的127.0.0.1指向容器自身,而非宿主机。将连接URL中的127.0.0.1替换为host.docker.internal,修改后的URL:
app@tcp(host.docker.internal:3306)/app_name?parseTime=true&charset=utf8mb4
- 调整MySQL绑定配置
宿主机MySQL默认仅绑定127.0.0.1,需修改配置允许外部访问:
- 找到MySQL配置文件(通常路径为
/etc/my.cnf或/etc/mysql/my.cnf) - 将
bind-address参数改为0.0.0.0,或指定Docker子网IP(如172.17.0.0/16) - 重启MySQL服务:
sudo systemctl restart mysql
- 配置MySQL用户访问权限
确保连接MySQL的用户允许从容器所在网络访问,执行以下SQL命令:
GRANT ALL PRIVILEGES ON app_name.* TO 'app'@'%' IDENTIFIED BY '你的数据库密码'; FLUSH PRIVILEGES;
若需提升安全性,可将%替换为Docker子网IP段(如172.17.0.0/16)。
- 测试容器内连通性
进入容器内部,用以下命令验证连接:
# 用telnet测试端口连通 telnet host.docker.internal 3306 # 或直接用MySQL客户端连接 mysql -h host.docker.internal -u app -p
内容的提问来源于stack exchange,提问作者musako
相关产品推荐
相关产品推荐

