gpt4 book ai didi

python - docker 容器中的 2 个 Flask 应用程序之间进行通信

转载 作者:行者123 更新时间:2023-12-01 00:51:50 25 4
gpt4 key购买 nike

在 2 个独立的容器内有 2 个 Flask 应用程序,我认为可以运行 GET来自一个的请求并从第二个返回信息,但我得到 [Errno 111] Connection refused 。通过以下设置:

app1.py

@app.route('/get_message')
def get_message():
message = requests.get('http://web2:5001/return_message')
return message.text

if __name__ == '__main__':
app.run(host='0.0.0.0')

app2.py

@app.route('/return_message')
def return_message():
return 'the message'

if __name__ == '__main__':
app.run(host='0.0.0.0')

docker-compose.yml

version: "3.7"
services:
web1:
build: ./web1
container_name: web1
ports:
- "5000:5000"
web2:
build: ./web2
container_name: web2
ports:
- "5001:5001"

app1 的端点在访问 http://127.0.0.1:5000/get_message 时有效。 ,但 flask 返回:

requests.exceptions.ConnectionError: HTTPConnectionPool(host='web2', port=5001): Max retries exceeded with url: /return_message (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fb866642d30>: Failed to establish a new connection: [Errno 111] Connection refused',))

尝试为 web2 容器分配静态 IP 地址并使用 get 中的 IP请求不起作用,使用 networks 也不起作用, linkdepends_on里面docker-compose文件。还尝试以不同的组合公开两个容器上的不同端口,但没有收到它们之间的消息。

最佳答案

我认为,当您旋转应用程序时,它们都在端口 5000 上运行,但在不同的容器中,因此请尝试将 app1.py 更改为:

@app.route('/get_message')
def get_message():
message = requests.get('http://web2:5000/return_message')
return message.text

if __name__ == '__main__':
app.run(host='0.0.0.0')

还可以更改 docker-compose 中的 web2 端口:

version: "3.7"
services:
web1:
build: ./web1
container_name: web1
ports:
- "5000:5000"
web2:
build: ./web2
container_name: web2
ports:
- "5001:5000"

但是,如果您不想从主机访问 web2,则无需更改 docker-compose 中的端口 - 请记住,这里我将主机的端口 5001 映射到 web2 容器的端口 5000,并且您的两个容器都在端口 5000 上公开应用程序。

请记住,这些是单独的容器,就像单独的环境一样。另请记住,EXPOSE 仅用于记录您在此端口公开某些服务 - 它不会使容器中的应用程序在此端口上运行。

关于python - docker 容器中的 2 个 Flask 应用程序之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56515641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com