我通过boot2docker
在OSX上运行docker。我通过API远程使用docker。
我创建了几个Web服务器的图像。 Docker为每个容器分配不同的IP地址,例如172.17.0.61
。每个Web服务器都在端口8080上运行。
在VM内部,我可以在此地址上ping服务器。
如何将这些不同的容器IP地址(从VM)映射到VM中的同一个IP地址,但是在不同的端口上? E.G。
<local.ip>:9001 -> 172.17.0.61:8080
<local.ip>:9002 -> 172.17.0.62:8080
其中local.ip
可以是来自boot2docker
的ip或其他任何内容。
可能的解决方案是在创建容器时定义端口绑定并将每个容器绑定到不同的端口。但是,我想避免这种情况,因为这个配置成为容器的一部分,并且只存在因为在OSX上运行。如果我在linux上完成上述所有操作,我们就不会遇到这个问题。
如何将内部容器映射到不同的端口?
答案 0 :(得分:2)
发布端口是正确的解决方案。无论您是远程运行还是本地运行,只有IP地址发生变化,您都会遇到同样的问题。
例如,假设我启动以下Web服务器:
$ docker run -d -p 8000:80 nginx
$ docker run -d -p 8001:80 nginx
从VM内部(运行boot2docker ssh
),我可以运行curl localhost:8000
或curl localhost:8001
来访问该网站。这是在Linux上使用Docker的常用方法。从Mac命令行开始,由于VM,它变为curl $(boot2docker ip):8000
,但由于boot2docker,我们在启动Web服务器方面没有做任何不同。