同一码头工人端口可以用于两个不同的应用程序吗?

时间:2018-09-06 18:35:05

标签: docker

如果我们有两个应用程序app1.pyapp2.py都在docker容器中作为烧瓶服务运行,请使用以下命令:

docker run -p 5000:5002 app1.py
docker run -p 9000:5002 app2.py

是否可以为两个容器保留相同的docker端口5002? 其次,如果我在用于映像构建的烧瓶端点.py文件中使用 app.run(host ='0.0.0.0',port = 5000,debug = True),则为{{1} }容器中的docker端口还是主机上外部可用的端口?

2 个答案:

答案 0 :(得分:0)

是的,每个容器都在隔离的网络名称空间中运行,因此每个容器都可以在同一端口上侦听,并且不会发生冲突。在您的应用程序代码中,您侦听的端口是容器内部的端口,除非您通过其他方式(例如HTTP Host:标头)被告知,否则您将无法知道已重新映射到哪些端口外部。

答案 1 :(得分:0)

  

是否可以为两个容器保留相同的docker端口5002

是的,当然。通常,每个容器都在隔离的网络名称空间中运行,这意味着除非配置容器,否则容器无法与每个容器通信。也许让您感到困惑的是,默认情况下容器之间的通信良好,这应该感谢Docker网络的默认设置。但是还有其他用例。您可能会看到有关容器网络模型网络名称空间 here的更多信息。

  

port=5000容器中的端口或主机上的外部端口有效吗?

毫无疑问,这是集装箱中的港口。我们可以注意到,它是Flask中函数run()的用户定义参数。由于Flask应用程序在容器中运行,因此5000将成为Flask应用程序将在容器中侦听的端口。
如果要访问主机(容器外部)上的5000,则应将其映射出来。 flag -p将为您提供帮助。

希望这会有所帮助〜