首页 文章

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

提问于
浏览
0

如果我们有两个应用程序 app1.pyapp2.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端口还是主机外部可用的端口?

2 回答

  • 0

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

  • 0

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

    当然是 . 通常,每个容器都在隔离网络命名空间中运行,这意味着容器无法与每个容器通信,除非它们被配置为这样做 . 可能会让您感到困惑的是,默认情况下容器可以很好地相互通信,这应该感谢Docker网络默认设置 . 但还有其他用例 . 您可能会看到有关 The container Network Modelnetwork namespace here的更多信息 .

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

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

    希望这有助于〜

相关问题