在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
,link
或{{1}都无效} depends_on
文件中。还尝试以不同组合公开两个容器上的不同端口,但它们之间没有收到消息。
答案 0 :(得分:1)
我认为,当您旋转应用程序时,它们都在端口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
仅用于记录您在此端口上公开某些服务-不会使容器中的应用程序在此端口上运行。