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。