Docker无法连接到桥接器上的容器

我正在尝试设置一个撰写文件来支持遗留应用程序。 所述遗留应用程序需要连接到3个DB(MySQL)。 问题是我不能改变端口规格。 我的意思是,我可能可以,但是我们希望容纳所有东西,而不必更改任何代码。

当我运行docker检查我的一个容器时,我得到:

"IPAddress": "172.18.0.2", 

这很好。 但是,当我尝试从我的MAC连接,我得到超时。 在过去,我不得不这样做一个networking别名:

 sudo ifconfig lo0 alias 10.200.10.1/24 

但是,这似乎没有帮助

 $ docker -v Docker version 17.06.2-ce, build cec0b72 

苹果电脑:

 $ uname -a Darwin wa-cbongiorno-mba.local 16.7.0 Darwin Kernel Version 16.7.0: Thu Jun 15 17:36:27 PDT 2017; root:xnu-3789.70.16~2/RELEASE_X86_64 x86_64 

这是我正在使用的撰写文件:

 version: '3.3' services: db1: image: mysql:5.6 ports: - 3306 environment: - MYSQL_ROOT_PASSWORD=my-secret-pw volumes: - ./Schema/db1:/docker-entrypoint-initdb.d/:ro db2: image: mysql:5.6 ports: - 3306 environment: - MYSQL_ROOT_PASSWORD=my-secret-pw volumes: - ./Schema/db2:/docker-entrypoint-initdb.d/:ro 

如果你阅读文档 ,这是不可能的现在在Mac上

已知的限制,用例和解决方法

以下是对Docker for Macnetworking堆栈的当前限制的总结,以及一些解决方法。

macOS上没有docker0网桥

由于在Docker for Mac中实现联网的方式,在macOS中看不到docker0接口。 这个接口实际上是在HyperKit中。

我无法ping我的容器

不幸的是,由于macOS的限制,我们无法将stream量路由到容器,从容器回到主机。

每个容器的IP地址是不可能的

Docker(Linux)桥接networking无法从macOS主机访问。

用例和解决方法

上述限制会影响到两种情况:

我想从集装箱连接到主机的服务

Mac有一个不断变化的IP地址(如果你没有networking访问权限,则没有)。 从17.06开始,我们的build议是连接到特殊的仅限于Mac的DNS名称docker.for.mac.localhost,该名称将parsing为主机使用的内部IP地址。

我想连接到MAC的容器

端口转发适用于本地主机; –publish,-p或-P全部工作。 从Linux暴露的端口被转发到Mac。

我们目前的build议是发布一个端口,或从另一个容器连接。 请注意,即使在Linux上,如果容器位于覆盖networking上,而不是桥接networking,这也是您必须执行的操作,因为这些networking不会被路由。