我有2个dockerized flask应用程序,可以在以下地址访问这些应用程序
应用#1
0.0.0.0:5001 [GET]
0.0.0.0:5001/ep [POST]
应用#2
0.0.0.0:6004 [GET]
0.0.0.0:6004/ep [POST]
App #2
向App #1
地址上的0.0.0.0:5001/ep
发帖请求
问题是,我可以轻松地向两个App发出GET请求,也可以成功向App #2
发出POST请求,但是App #2
无法向{{1}处的App #1
发出POST请求}(下面提到的错误),即使容器运行时没有任何错误
ConnectionError:HTTPConnectionPool(host ='0.0.0.0',port = 5001):URL超过最大重试次数:/ ep(由NewConnectionError('
导致:无法建立新的连接:[Errno 111]连接被拒绝',))
以下是Flask应用程序0.0.0.0:5001/ep
应用#1
app.py
应用#2
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/')
def index():
return jsonify('App1')
@app.route('/ep', methods = ['POST'])
def ep():
data = {}
# code for receiving data
# processing data and saving results in dictionary
return jsonify(data)
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
任何建议都会很有帮助
答案 0 :(得分:1)
您在这里几乎没有概念上的误解:
0.0.0.0
并不意味着您可以使用IP地址0.0.0.0
连接到该服务。这仅意味着该服务接受您的“盒子”具有的所有网络接口的连接。requests
添加到requirements.txt
的情况下运行app2 因此要解决的步骤是:
requirements.txt
for app2 docker network create flasktest
from flask import Flask, request, jsonify
import requests
app = Flask(__name__)
@app.route('/')
def index():
return jsonify('App2')
@app.route('/ep', methods = ['POST'])
def ep():
....
data = {}
res = requests.post('http://my-target-host:5000/ep', files = data)
res = res.json()
return jsonify(data).
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
docker run -p 5001:5000 --net flasktest --name my-target-host app1
docker run -p 5002:5000 --net flasktest app2
使用以下各项测试您的帖子: curl -X POST localhost:5002/ep