Python docker容器中2个flask应用程序之间的通信

Python docker容器中2个flask应用程序之间的通信,python,docker,flask,Python,Docker,Flask,在两个单独的容器中使用两个flask应用程序时,我认为可以从一个容器中运行获取请求,然后从第二个容器返回信息,但我得到[Errno 111]连接被拒绝。使用以下设置: app1.py @app.route('/get_message') def get_message(): message = requests.get('http://web2:5001/return_message') return message.text if __name__ == '__main__'

在两个单独的容器中使用两个flask应用程序时,我认为可以从一个容器中运行
获取
请求,然后从第二个容器返回信息,但我得到
[Errno 111]连接被拒绝
。使用以下设置:

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的端点在转到时工作,但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',))
requests.exceptions.ConnectionError:HTTPConnectionPool(host='web2',port=5001):url:/return_消息超过了最大重试次数(由NewConnectionError引起(':未能建立新连接:[Errno 111]连接被拒绝',))

尝试将静态IP地址分配给web2容器,并在
获取
请求中使用IP不起作用,使用
网络
链接
也不起作用,这取决于
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
仅用于记录您在此端口公开的某些服务-它不会使容器中的应用程序在此端口上运行。

我已经尝试过此操作,但不幸的是,它给出了相同的结果。您确定您尝试过完全相同的配置吗?您已经重新加载了所有容器并进行了检查?我现在刚将配置更改为此,它仍然会拒绝连接,我会检查我没有覆盖其他地方的内容,但我不这么认为。您是否也可以尝试将
app2.py中的
host
更改为
127.0.0.1
,这也不起作用,但我意识到我在
web2.py
中只有
app.run()
,所以我尝试了
0.0.0
,它可以工作。非常感谢。