当前位置: 首页 > 面试题库 >

从Docker容器内部访问无业游民的虚拟机

万俟浩
2023-03-14
问题内容

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

目前,我无法从Docker容器中访问虚拟机。

流浪汉设置:

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

虚拟机可以互相访问,但Docker容器无法访问虚拟机

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容器的网络和将无业游民的VM引导到主机上同一桥设备的网络:

1. 创建泊坞窗网络:

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. 将无用的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 "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容器:

$ 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


 类似资料:
  • 我在本地机器(Mac)上工作,其中有一个名为sqlvm的遗留虚拟机(这意味着我可以通过http://sqlvm:从本地主机访问这个虚拟机)。现在,我在应该连接到vm的同一个本地主机(我的Mac)中设置了几个docker容器(使用docker-compose)。< code>pymysql会引发一个异常: 如何将外部的“sqlvm”公开给内部 Docker 网络? 编辑:我尝试在yml文件中为相关容

  • 我在Amazon linux ec2上安装了dd-agent。如果我直接在主机上运行我的python脚本(我使用了名为"dogstatsd-python"的SDK),所有指标都可以发送到datadog(我登录到datadoghq.com并在那里看到了指标)。脚本类似: 然而,我启动了一个docker容器,并从容器内部运行相同的脚本: '172.14.0.1'是主机的IP,它是用命令提取的 根本没有

  • 我有一个docker应用程序,我使用以下docker compose。yml运行它: 我有一个没有docker化的服务器在我的机器上运行,我可以通过访问它。我希望我的服务能够访问它。 我发现有人建议在我的服务配置中添加以下内容: 但是当我添加这个时,并尝试,我得到。当我尝试<code>curl时,也会出现同样的错误http://host.docker.internal:3000。 我拼命地尝试将端

  • tl;如果在Docker容器中运行,一个RestController正确回答,另一个则不正确。 该服务有两个API 和。 它们都是通过docker compose运行的。 返回。 返回一个空的200响应。正如预期的那样。 应该返回一个200响应和一个每次调用API时都会增加的数字。可悲的是,事实并非如此。 在本地运行该服务可以提供预期的结果。 maven spotify插件用于从以下创建图像。 我

  • 问题内容: 我已经创建了hashicorp保管库部署并配置了kubernetes auth。保管库容器从Pod内部调用kubernetes api进行k8s身份验证,并且该调用失败,并显示500个错误代码(连接被拒绝)。我正在将docker用于Windows kubernetes。 我将以下配置添加到Vault中以进行kubernetes身份验证机制。 payload.json 我得到了预期的20

  • 问题内容: 我是Docker的新手。 我运行了一个10节点的图像,并在运行的容器中克隆了一个存储库,运行了使用文件监视程序启动服务器的应用程序。我需要访问容器内的代码库,并在Windows主机上运行的IDE中打开它。如果完成了,那么我还希望当我在IDE中更改文件时,这些更改会在容器中引起文件监视程序。 任何帮助表示赞赏。谢谢, 问题答案: 您正在寻找的概念称为卷。您需要启动一个容器并在其中安装主机