如果我们有两个应用程序app1.py
和app2.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端口还是主机上外部可用的端口?
答案 0 :(得分:0)
是的,每个容器都在隔离的网络名称空间中运行,因此每个容器都可以在同一端口上侦听,并且不会发生冲突。在您的应用程序代码中,您侦听的端口是容器内部的端口,除非您通过其他方式(例如HTTP Host:
标头)被告知,否则您将无法知道已重新映射到哪些端口外部。
答案 1 :(得分:0)
是否可以为两个容器保留相同的docker端口
5002
?
是的,当然。通常,每个容器都在隔离的网络名称空间中运行,这意味着除非配置容器,否则容器无法与每个容器通信。也许让您感到困惑的是,默认情况下容器之间的通信良好,这应该感谢Docker网络的默认设置。但是还有其他用例。您可能会看到有关容器网络模型和网络名称空间 here的更多信息。
port=5000
容器中的端口或主机上的外部端口有效吗?
毫无疑问,这是集装箱中的港口。我们可以注意到,它是Flask中函数run()
的用户定义参数。由于Flask应用程序在容器中运行,因此5000
将成为Flask应用程序将在容器中侦听的端口。
如果要访问主机(容器外部)上的5000
,则应将其映射出来。 flag -p
将为您提供帮助。
希望这会有所帮助〜