我通过 boot2docker
在 OSX 上运行 docker。我正在通过 API 远程使用 docker。
我创建了网络服务器的多个图像。 Docker 为每个容器分配不同的 IP 地址,例如
172.17.0.61
。每个 Web 服务器都在端口 8080 上运行。在 VM 内部,我可以 ping 这个地址上的服务器。
如何将这些不同的容器 IP 地址(从 VM)映射到 VM 中的同一个 IP 地址,但在不同的端口上?例如
<local.ip>:9001 -> 172.17.0.61:8080
<local.ip>:9002 -> 172.17.0.62:8080
local.ip
可以是来自 boot2docker
的 ip 或其他任何东西。
可能的解决方案是在创建容器时定义端口绑定(bind),并将每个容器绑定(bind)到不同的端口。但是,我想避免这种情况,因为这个配置成为容器的一部分,并且只存在于 OSX 上。如果我在 Linux 上执行上述所有操作,我们就不会遇到这个问题。
如何将内部容器映射到不同的端口?
最佳答案
发布端口是正确的解决方案。无论您是远程运行还是本地运行,您都会遇到同样的问题,只是 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 服务器方面没有做任何不同的事情。
关于linux - 多个 docker 容器、IP 地址、VM、OSX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30679652/