Docker:将主机端口映射到多个docker容器

时间:2014-07-11 06:51:41

标签: port docker host

我还没有完全理解端口转发与docker一起使用的方式。

我的方案如下:

  • 我有一个暴露端口的Dockerfile(在我的情况下,是8000
  • 我使用此Dockerfile构建了一个图像(使用“docker build -t test_docker”)
  • 现在我使用“docker run -p 808X: 8000 -d test_docker”创建了几个容器
  • 主机使用我在“docker run”上分配的不同端口调用其IP进行响应

这个EXPOSE命令到底在Dockerfile中做了什么?我知道docker守护进程本身处理网络连接,在调用“docker run”时我也告诉我应该使用什么图像...

由于

2 个答案:

答案 0 :(得分:0)

好吧,我想我明白了原因。

如果您正在侦听应用程序中的端口,则需要准确公开此端口。例如。

 HttpServer.bind('127.0.0.1', 8000).then((server) {...}

需要“EXPOSE 8000”。像这样你可以在你的应用程序中听几个到几个端口,但是然后需要将它们全部暴露出来。

我是对的吗?

答案 1 :(得分:0)

在dockerfile中公开端口允许您使用-P命令上的docker run(请参阅here)标记来启动容器。

一个简单的用例可能是你将nginx放在负载均衡服务器上的端口80上,并且它会在位于coreos docker服务器上的几个docker conatiner上对这些流量进行负载平衡。由于您的每个应用都使用相同的端口,8000,您将无法单独访问它们。因此,docker会将每个容器映射到主机上的高随机且非冲突端口。因此当你达到49805时,它会转到容器1s 8000,当你达到49807时,它会转到容器2s 8000.