从 Docker 访问 Vagrant(Virtualbox)

问题描述 投票:0回答:1

我的问题如下。我是一名网络开发人员,有几个应用程序在 Docker 和 Vagrant (Virtualbox) 中运行。通常它只是这两者之一。但现在我有一个应用程序,部分在 Docker 中运行,部分在 Vagrant 中运行。现在我需要从 Docker 容器中的应用程序连接到 Vagrant box 中的 MySQL 服务器。

在我的主机(MacOS)上,虚拟盒子网络显示为:

vboxnet1:标志=8943mtu 1500 以太 0a:00:27:00:00:01 inet 192.168.33.1 网络掩码 0xffffff00 广播 192.168.33.255

我想将此连接桥接到我的 Docker 容器,这样就可以从我的 Docker 盒子 ping 到 ip 192.168.33.1

我尝试将网络添加为桥接网络(具有相同的 IP)并使其可用于容器。但随后我收到一个错误,表明子集已被占用。

我还尝试将 Vagrant 盒子添加到本地网络,以便它从路由器获取 IP(见下文)。但我的盒子没有获得IP(也许这是因为我在大型商业网络上)

config.vm.network "public_network", bridge: "en0: Wi-Fi", ip: "10.128.11.188", :netmask => "255.255.255.0"
  # and also tried:
config.vm.network "public_network", bridge: "en0: Wi-Fi", type: "dhcp"

我找到了下面的主题,我尝试了一下。这在 MacOS 上不起作用。该适配器未显示在适配器列表中,因此无法在 Virtualbox 上选择它。

从 docker 容器内部访问 vagrant 虚拟机

有人有办法实现这个吗?

docker vagrant
1个回答
0
投票

好吧,我想我已经找到办法了:

忘记让 Vagrant 和 Docker 在同一网络上吧。只需转发 Vagrant 上的特定端口即可:

  config.vm.network "forwarded_port", guest: 3306, host: 3307

并在 Docker 中确保使用以下设置:

   extra_hosts:
       - 'host.docker.internal:host-gateway'

现在使用“host.docker.internal”作为 Docker 中端口 3307 的 IP 连接到 Vagrant VM 框中的 MySQL 服务器。

© www.soinside.com 2019 - 2024. All rights reserved.