docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker连接本地MySQL服务失败

如何解决Docker连接本地MySQL服务失败的问题

作者:我想要身体健康

这篇文章主要介绍了如何解决Docker连接本地MySQL服务失败的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

问题描述

在学习 Docker 和 Go 时,遇到了一个连接 MySQL 数据库失败的问题。

具体情况如下:

使用以下命令运行 Docker 容器:

docker run --rm -p 8080:8080/tcp --env-file .env my-project:latest

.env 文件中的内容如下:

DB_HOST=127.0.0.1
DB_USERNAME=root
DB_NAME=mydbs
DB_PASS=root123
AUTH_GEN_URL=https://api.learning.mydbs.id

在 Windows 上使用 Docker Desktop,报错信息为:dial tcp 127.0.0.1:3306: connect: connection refused

这意味着在 IP 127.0.0.1 和端口 3306 上没有数据库服务在监听。

问题分析

在默认的网络模式下,127.0.0.1 指的是容器内部的地址,而不是主机的地址。

因此,当容器尝试连接 127.0.0.1:3306 时,它实际上是在连接容器自身的 3306 端口,而不是主机上的 MySQL 服务。

解决方法

对于 Windows 和 Mac 用户

在 Windows 和 Mac 上,可以使用 host.docker.internal 来代替 127.0.0.1

这样可以确保容器内部的服务正确连接到运行在主机上的 MySQL 实例。

修改后的 .env 文件如下:

DB_HOST=host.docker.internal
DB_USERNAME=root
DB_NAME=mydbs
DB_PASS=root123
AUTH_GEN_URL=https://api.learning.mydbs.id

这样修改后,再次运行 Docker 容器,问题应能得到解决。

对于 Linux 用户

在 Linux 上,解决这个问题更加简单,只需要在运行 Docker 容器时添加 --network="host" 参数即可。

这样,容器将直接使用主机的网络,127.0.0.1 将指向主机自身。

命令如下:

docker run --rm --network="host" --env-file .env my-project:latest

总结

以上是解决 Docker 连接本地 MySQL 服务失败问题的详细步骤。在不同操作系统上,解决方法有所不同:

通过以上步骤,相信你已经能够成功解决 Docker 容器中无法连接本地 MySQL 数据库的问题。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文