同一个 docker 端口可以用于两个不同的应用程序吗?



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

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

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

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

是否可以

为两个容器保留相同的 docker 端口5002

是的,当然。通常,每个容器都在隔离的网络命名空间中运行,这意味着容器无法与每个容器通信,除非它们配置为这样做。让您感到困惑的是,默认情况下容器确实可以很好地相互通信,这应该归功于Docker网络默认设置。但是还有其他用例。您可以在此处查看有关容器网络模型网络命名空间的更多信息。

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

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

希望对你有帮助~

最新更新