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。
一对夫妇笔记:
- 可以访问它 – 但只能从VirtualBox会话中访问。 这可以使用redis-cli -h 172.16.42.2 -p 6379完成。
- 我已经添加了“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