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

我还没有完全理解端口转发与docker的合作方式。

我的情况如下所示:

  • 我有一个暴露端口的Dockerfile( 在我的情况下是8000
  • 我已经使用这个Dockerfilebuild立了一个图像(通过使用“docker build -t test_docker”)
  • 现在我使用“docker run -p 808X: 8000 -d test_docker”创build了多个容器
  • 主机在呼叫IP时使用我在“docker运行”中分配的不同端口

这个EXPOSE命令在Dockerfile中究竟做了什么? 我明白,docker守护进程本身处理networking连接,同时调用“docker运行”我也告诉应该使用什么图像…

谢谢

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

如果您在应用程序中监听端口,则需要公开此端口。 例如

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

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

我对吗?

在dockerfile中暴露端口允许你使用docker docker run命令中的-P (See here )标志来启动一个容器。

一个简单的用例可能是nginx位于负载平衡服务器上的端口80上,它将负载平衡位于coreos docker服务器上的几个docker conatiner上的stream量。 由于每个应用程序都使用相同的端口8000,因此您无法单独获取它们。 所以docker工程师会将每个容器映射到主机上的一个高度随机且不冲突的端口。 所以当你打到49805的时候,它就进入容器1的8000,而当你打到49807的时候,它就进入容器2的8000。