出现问题
最近在学习docker,所以把博客的API接口也写了个dockerFile文件,但是在启动的时候出现dial tcp 127.0.0.1:3306: connect: connection refused
这样的报错。
首先介绍下我的环境和接口的配置:在本地开发环境中(MacOS),我是通过homebrew安装的mysql,启动的3306端口,然后在api接口的配置文件中,mysql的配置是127.0.0.1:3006
。
出现上面的报错很显然原因是docker没有访问到我本机的3306端口。
搜寻答案
网上大多是让我在run的时候加一个--network host
参数,即docker run --rm --network host --name test testgo
,但是这样运行后,dial tcp 127.0.0.1:3306: connect: connection refused
报错依旧
解决
Networking features in Docker Desktop for Mac 我找了个docker的官方文档,这里介绍了Mac上docker中网络的一些使用限制以及解决办法。
- MacOs上没有
docker0
网桥 - ping不通容器
- 不能按容器进行寻址
如果想要容器连接本机的服务,docker推荐连接特别的DNS名称host.docker.internal
,这个域名将解决内部的IP地址问题。这个方式仅供开发环境使用,不适合Docker Desktop for Mac以外的生产环境。也可以使用gateway.docker.internal
访问网关。
那么我们只要将api配置的mysql的配置由127.0.0.1:3006
改为host.docker.internal:3306
即可。