Доступ к бродячим виртуальным машинам из контейнера Docker
Как настроить сеть между двумя виртуальными машинами Centos, использующими Vagrant / Virtualbox, и контейнер Docker, использующий Docker для Mac. Все они должны иметь возможность доступа друг к другу.
В настоящее время я не могу получить доступ к виртуальной машине из контейнера Docker.
Настройка Vagrant:
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
2 ответа
Вам необходимо подключить сеть, в которой вы запускаете докер-контейнер, и сеть, в которой вы загружаете бродячие виртуальные машины на одно и то же мостовое устройство на хост-компьютере:
1. Создайте докерскую сеть:
docker network create -d bridge --gateway=192.168.50.1
--subnet=192.168.50.1/24 mybridge
Докер создает мост с именем 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.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
сеть:
$ 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"
Мое предположение, потому что провайдер.