docker集装箱 – 如何configuration,以便在stream浪汉中运行时获得可行的IP地址?

Docker(www.docker.io)看起来棒极了。 但是,在安装VirtualBox,Vagrant …以及Mac上的Docker之后,我发现无法从另一台计算机(或Mac上的terminal会话)访问在Docker容器中运行的服务。 我试图访问的服务是Redis。

问题似乎是没有路由到分配给Docker容器的IP地址。 在这种情况下,容器的IP是172.16.42.2,而Mac的IP是196.168.0.3。

一对夫妇笔记:

  1. 可以访问它 – 但只能从VirtualBox会话中访问。 这可以使用redis-cli -h 172.16.42.2 -p 6379完成。
  2. 我已经添加了“config.vm.network:桥接”的VagrantFile试图获得,但没有解决问题。

由stream浪者生成的虚拟机确实是孤立的,为了从主机访问虚拟机,您可以为其分配一个专用networking。 而不是做config.vm.network :bridged ,尝试config.vm.network :private_network, ip: "192.168.50.4" ,它应该做的伎俩

但是,这只允许您访问虚拟机本身,而不是容器。
为此,在运行容器时,可以添加-p选项

例如: docker run -d -p 8989 base nc -lkp 8989

这将在一个容器内运行一个在8989上的netcat监听,并公开暴露该端口。 由于它也用-d运行,容器将处于分离模式,唯一的输出将是容器的ID

为了暴露端口,Docker做了一个简单的NAT。 为了知道真正的端口,你可以

docker port <ID of the container> 8989

Netcat将在192.168.50.4的mac上可用:<result>

我刚写了一篇关于如何使用主机专用networking和TCP路由的教程,使其变得非常简单。 这样你就不必映射每个特定的端口。

http://ispyker.blogspot.com/2014/04/accessing-docker-container-private.html

重点…

1)将主机专用networking添加到虚拟机2)告诉boot2docker虚拟机在纯主机networking上有适配器3)为新的boot2docker虚拟机主机专用networking适配器添加一个IP 4)将所有Mac OS Xstream量路由到docker容器子网到该boot2docker VM主机专用networkingIP

实际的步骤是在博客输出,所以你可以比较,你看到你跟随他们。

我从我的Dockerfile中安装了tomcat,并使用vagrant的端口转发将其转发到6060。 这些是为我工作的步骤:

 vagrant provision vagrant up vagrant ssh box_name$ docker run -i -t -p 8080:8080 bsb_tomcat6 /bin/bash 

能够看到tomcat上运行本地主机:6060,因为我已经完成端口转发到6060在我的Vagrantfile

您还可以定义PRIVATE_NETWORK和FORWARD_DOCKER_PORTS环境variables来访问您在Docker容器中运行的服务:

 $ vagrant halt $ export PRIVATE_NETWORK=192.168.50.4 $ export FORWARD_DOCKER_PORTS=1 $ vagrant up 

在我的情况下,我可以从Mac访问postgres使用

 $ telnet 192.168.50.4 49154 

找出您可以使用的实际应用程序端口

 $ sudo docker port 1854499c6547 5432 0.0.0.0:49154