如何解决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 服务失败问题的详细步骤。在不同操作系统上,解决方法有所不同:
- Windows 和 Mac 用户可以使用
host.docker.internal
。 - Linux 用户可以使用
--network="host"
参数。
通过以上步骤,相信你已经能够成功解决 Docker 容器中无法连接本地 MySQL 数据库的问题。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。