繁体   English   中英

从 docker 容器内部访问 vagrant VM

[英]Access vagrant VMs from inside docker container

如何在使用 Vagrant/Virtualbox 的 2 个 centos VM 和使用 docker for mac 的 docker 容器之间设置网络。 他们都需要能够相互访问。

目前我无法从 docker 容器中访问 vm。

流浪者设置:

Vagrant.configure("2") do |config|

   config.vm.define "build" do |build|
      build.vm.box = "centos/7"
      build.vm.provider "virtualbox"
      build.vm.hostname = "server-a"
      build.vm.network "private_network", ip: "192.168.50.4"
   end

   config.vm.define "test" do |test|
      test.vm.box = "centos/7"
      test.vm.provider "virtualbox"
      test.vm.hostname = "server"
      test.vm.network "private_network", ip: "192.168.50.5"
   end
end

vm 可以互相访问,但是 docker 容器不能访问 vm

docker network create -d bridge --gateway=192.168.50.1 --subnet=192.168.50.1/24 mybridge
docker run --network=mybridge alpine ping 192.168.50.4
=> not able to connect

您需要连接运行 docker 容器的网络和将 vagrant VM 引导到主机上相同桥接设备的网络:

1.创建docker网络:

docker network create -d bridge --gateway=192.168.50.1
--subnet=192.168.50.1/24 mybridge

Docker 在主机上创建名为br-<network_id>网桥:

$ docker network ls | grep mybridge
e13b3ccc6691        mybridge              bridge              local

$ brctl show | grep e13b3ccc6691
br-e13b3ccc6691     8000.024277661b29   no  

$ ip r s | grep e13b3ccc6691
192.168.50.0/24 dev br-e13b3ccc6691  proto kernel  scope link  src 192.168.50.1 linkdown 

2.将 vagrant VMs 网络连接到同一个桥接设备:

Vagrant.configure("2") do |config|
   config.vm.define "build" do |build|
      build.vm.box = "centos/7"
      build.vm.provider "virtualbox"
      build.vm.hostname = "server-a"
      build.vm.network "public_network", ip: "192.168.50.4", bridge: "br-e13b3ccc6691"
   end

   config.vm.define "test" do |test|
      test.vm.box = "centos/7"
      test.vm.provider "virtualbox"
      test.vm.hostname = "server"
      test.vm.network "public_network", ip: "192.168.50.5", bridge: "br-e13b3ccc6691"
   end
end

3.启动虚拟机:

$ vagrant up

4.mybridge网络中启动mybridge容器:

$ docker run -ti --network=mybridge alpine ping -c2 192.168.50.4
PING 192.168.50.4 (192.168.50.4): 56 data bytes
64 bytes from 192.168.50.4: seq=0 ttl=64 time=0.898 ms
64 bytes from 192.168.50.4: seq=1 ttl=64 time=0.869 ms

--- 192.168.50.4 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.869/0.883/0.898 ms

提议的Vagrantfile不适用于此环境:

  • 操作系统:Debian Bullseye(测试)
  • 流浪者:2.2.14
  • 流浪者提供者:libvirt (KVM)

这是有效的行:

  config.vm.network "public_network", ip: "192.168.50.4", dev: "br-e13b3ccc6691", mode: "bridge", type: "bridge"

我的猜测,因为提供者。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM