2015-09-30 162 views
0

我刚刚开始对docker进行一些实验。 在我的Windows主机上,我有一个托管Docker容器的虚拟机。我想在主机和容器之间进行通信,或者可能是其他虚拟机和此容器。Docker:物理机器之间的连接--VM -Docker容器

  • 主机的IP是192.168.2.10与子网掩码为255.255.255.0
  • VM的IP是192.168.254.130与子网掩码为255.255.255.0
  • 集装箱获取IP 172.17.0.13

我已经看到很少有博客谈论桥接,但我仍然不确定它以及如何做到这一点。我并不是很喜欢网络的东西。

一点指导将有所帮助。

感谢

编辑: 我跟着这个bridge-building但不明白什么IP范围内给予弥补,所以,我给192.168.254.1/24。命令ip addr show bridge0显示state UNKNOWN

回答

1

我假设您在Windows上使用Docker,并在Virtualbox上运行Linux主机。请注意,默认情况下,docker-machine会创建一个NAT适配器(带有一个端口转发)和一个仅用于主机的适配器,有时,让不同的机器与正确的IP进行通信会非常棘手。

正如Adrian回答的那样,您通常通过端口转发“发布”端口,但是如果您的容器必须通过多个端口进行通信,并且您只运行一个此类容器/主机,则可以通过docker run --net host ...更容易启动容器,双向主机的以太网适配器直接在容器内可见(正如我发现的here)。

+0

感谢您的建议。没有--net主机我能够从主机到容器进行通信。我猜如果我这样做,我也可以反向交流。容器与主机通信有没有不同的方式? – user3275095

+0

在我理解的主机中,任何其他机器都可以与容器进行通信,如果它的端口已经用'-p'或'--publish'“发布”,如[这里]解释的那样(https://docs.docker.com/articles/网络/#绑定端口)。我的问题是,容器使用一个复杂的协议与多个端口,所以配置它们是乏味的。 同样在一些配置中,许多容器运行在同一主机上,并且端口暴露给其他容器,但不暴露给其他外部机器,这是在启动容器时Dockerfiles或'--expose'上的'EXPOSE'命令。 – NikoNyrh

2

正常的方式做,这是刚刚发布的容器上的端口,并使用虚拟机的IP如:

docker run -d -p 80:80 nginx 

然后访问虚拟机的IP在浏览器主机上运行,你应该得到的网页。

+0

谢谢。我已经这样做了,但没有测试服务。它不是一个Web服务,所以我只是PINGED容器的IP,这没有奏效。无论如何,它的工作没有任何改变。但是从容器到主机,我认为我必须遵循@NikoNyrh的建议,或者还有其他方法吗? – user3275095

+0

如果正确的端口是“发布”,Ping会工作,我没有打扰检查哪一个。 'netstat -peanut'是在主机上和容器内运行的非常方便的命令,用于查看端口如何配置和监听:) – NikoNyrh

相关问题