我正在尝试设置一个撰写文件来支持旧应用程序。所述旧版应用程序需要连接最多 3 个数据库 (MySQL)。问题是我无法更改端口规范。我的意思是,我可能可以,但我们希望将所有内容容器化,而无需更改任何代码。
当我在我的一个容器上运行 dockerspect 时,我得到:
"IPAddress": "172.18.0.2",
这很好。但是当我尝试从我的 MAC 连接时 我超时了。过去,我必须创建一个网络别名,如下所示:
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
最佳答案
如果您阅读 documentation ,目前在 mac 上这是不可能的
已知限制、用例和解决方法
以下总结了 Docker for Mac 网络堆栈的当前限制,以及一些解决方法的想法。
macOS 上没有 docker0 桥
由于 Docker for Mac 中的网络实现方式,您在 macOS 中看不到 docker0 接口(interface)。这个接口(interface)实际上是在 HyperKit 中。
我无法 ping 我的容器
不幸的是,由于 macOS 的限制,我们无法将流量路由到容器,以及从容器路由回主机。
不可能对每个容器进行 IP 寻址
无法从 macOS 主机访问 docker (Linux) 桥接网络。
用例和解决方法
上述限制会影响两种情况:
我想从容器连接到主机上的服务
Mac 的 IP 地址不断变化(如果您无法访问网络,则没有 IP 地址)。从 17.06 开始,我们建议连接到仅适用于 Mac 的特殊 DNS 名称 docker.for.mac.localhost,该名称将解析为主机使用的内部 IP 地址。
我想从 MAC 连接到容器
端口转发适用于本地主机; --publish、-p 或 -P 都可以。从 Linux 公开的端口将转发到 Mac。
我们当前的建议是发布端口,或从另一个容器进行连接。请注意,即使在 Linux 上,如果容器位于覆盖网络而不是桥接网络上,您也必须执行此操作,因为这些网络没有路由。
关于mysql - Docker 无法连接到桥接口(interface)上的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46415833/