mysql - Docker 无法连接到桥接口(interface)上的容器

标签 mysql docker

我正在尝试设置一个撰写文件来支持旧应用程序。所述旧版应用程序需要连接最多 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/

相关文章:

mysql - Rails 5 和 Ruby 2.3.3 加载 libmysql.dll 失败

java - Ignite 和 MySQL - 更新条目数量意外

javascript - Node.js Sequelize ManyToMany 关系产生不正确的 SQL

linux - WSL2 Ubuntu 20.04 没有 Docker 容器的输出

mysql - sql中的时差计算

php - 可调整大小的表格区域 PHP

docker - Docker会建立--no-cache实际下载并刷新基本镜像吗?

macos - 启动后如何重启docker-machine?

docker - Nginx没有Docker连接到Docker容器(clojure)

linux - 当AWS实例只有16GB时,为什么 `/proc/meminfo`显示32GB?