记录一次docker容器访问本机端口的解决办法

发布于 2020-08-31 19:28:15 阅读 50

出现问题

最近在学习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即可。