我正在尝试构建2个flask应用程序,这些应用程序在2个容器上运行,并且必须相互通信。但是我一直收到这个错误:
During handling of the above exception, another exception occurred:
slave |
slave | Traceback (most recent call last):
slave | File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
slave | response = self.full_dispatch_request()
slave | File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
slave | rv = self.handle_user_exception(e)
slave | File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
slave | reraise(exc_type, exc_value, tb)
slave | File "/usr/local/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
slave | raise value
slave | File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
slave | rv = self.dispatch_request()
slave | File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
slave | return self.view_functions[rule.endpoint](**req.view_args)
slave | File "slave.py", line 21, in home
slave | res = requests.get('http://localhost:5001/test')
slave | File "/usr/local/lib/python3.8/site-packages/requests/api.py", line 76, in get
slave | return request('get', url, params=params, **kwargs)
slave | File "/usr/local/lib/python3.8/site-packages/requests/api.py", line 61, in request
slave | return session.request(method=method, url=url, **kwargs)
slave | File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 530, in request
slave | resp = self.send(prep, **send_kwargs)
slave | File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 643, in send
slave | r = adapter.send(request, **kwargs)
slave | File "/usr/local/lib/python3.8/site-packages/requests/adapters.py", line 516, in send
slave | raise ConnectionError(e, request=request)
slave | requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=5001): Max retries exceeded with url: /test (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f0c81dfdd90>: Failed to establish a new connection: [Errno 111] Connection refused'))
slave | 172.17.0.1 - - [30/Aug/2020 22:30:35] "GET / HTTP/1.1" 500 -我的第一个应用程序是尝试发出get请求的slave:
import time
import random
import redis
from flask import Flask, redirect, url_for, request, render_template
import requests
from pymongo import MongoClient
app = Flask(__name__)
@app.route('/', methods = ['POST', 'GET'])
def home():
dictToSend = {'question':'what is the answer?'}
res = requests.get('http://localhost:5001/test')
print("SLave sent!!!!!!!!!!")
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5002)这是接收get请求的主服务器:
from pymongo import MongoClient
app = Flask(__name__)
@app.route('/test')
def test():
return '00000'
if __name__ == "__main__":
app.run(host='0.0.0.0', port = 5001)我的docker-compose.yml文件是这样的:
master:
build: ./master
container_name: master
command: python -u master.py && python -m flask run
ports:
- "5001:5001"
slave:
build: ./slave
container_name: slave
command: python -u slave.py
ports:
- "5002:5002"
links:
- master我试过这个答案:Communicating between 2 flask apps in docker containers,但它很混乱,对我也不起作用。我也试着上了主网页,看看主网页有没有问题,但我可以通过浏览器加入页面。我也试着改变
res = requests.get('http://localhost:5001/test') 至
res = requests.get('http://0.0.0.0:5001/test')并且还可以
res = requests.get('http://master:5001/test')有什么想法吗?谢谢!
发布于 2020-08-31 08:10:31
如果您在容器内使用localhost,您将尝试访问容器本身,而不可能访问另一个容器。使用服务名称或主机IP从web浏览器访问容器。您应该删除该链接,它用于作为服务名称的别名。
http://master:5001/test (from an other container)
http://<host_ip>:5001/test (from external client like web broswer)https://stackoverflow.com/questions/63662801
复制相似问题