linux - 多个 docker 容器、IP 地址、VM、OSX

标签 linux macos docker boot2docker

我通过 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:8000curl localhost:8001 来访问网站。这是在 Linux 上使用 Docker 的正常方式。在 Mac 命令行中,由于 VM,它变成了 curl $(boot2docker ip):8000,但是由于 boot2docker,我们在启动 Web 服务器方面没有做任何不同的事情。

关于linux - 多个 docker 容器、IP 地址、VM、OSX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30679652/

相关文章:

linux - 将命令作为变量传递给另一个程序?

linux - 如果出现错误,gdb 将在命令文件中停止。尽管有错误如何继续?

ios - 格式化为 MM :SS using NSDateComponentsFormatter

c - Valgrind 在 Mac OSX 10.8 上的空程序上显示内存泄漏

java - 拉取 Java 8 镜像时出现 Docker 错误 - "failed to register layer"

docker - server.properties 由于 ssl 配置而改变后重启 wurstmeister/kafka-docker

docker - Windows 无法识别 Docker 命令

java - 如何使用命令行更改属性文件中的浏览器值来运行 selenium 测试用例

linux - perl - 将系统命令重定向到文件

macos - 安装后无法连接到 Mac OS X 上的 Postgresql