如果我们有两个应用程序app1.py
和app2.py
都使用以下命令在docker容器中作为flask服务运行:
docker run -p 5000:5002 app1.py
docker run -p 9000:5002 app2.py
是否可以为两个容器保留相同的docker端口5002
?其次,如果我在用于图像构建的flask endpoint.py文件中使用app.run(host ='0.0.0.0',port = 5000,debug = True),那么port=5000
是容器中的docker端口还是外部可用的端口在主持人?
是的,每个容器都在一个隔离的网络命名空间中运行,因此每个容器都可以监听同一个端口,并且它们不会发生冲突。在您的应用程序代码中,您监听的端口是容器内部端口,除非您以其他方式告知(例如HTTP Host:
标头),否则无法知道您已将哪些端口重新映射到外部。
是否可以为两个容器保留相同的docker端口
5002
?
当然是。通常,每个容器都在隔离网络命名空间中运行,这意味着容器无法与每个容器通信,除非它们被配置为这样做。可能会让您感到困惑的是,默认情况下容器可以很好地相互通信,这应该感谢Docker网络默认设置。但还有其他用例。您可能会看到有关容器网络模型和网络命名空间here的更多信息。
port=5000
是容器中的端口还是主机外部有效的端口?
毫无疑问,它是容器中的端口。我们可以注意到它是Flask中函数run()
的用户定义参数。由于Flask应用程序在容器中运行,因此5000
将成为Flask app在容器中侦听的端口。
如果我们想在主机(容器外)访问5000
,我们应该将其映射出来。 flag -p
会帮助你。
希望这有助于〜