像這樣撰寫基本的燒瓶應用程式:
import flask
from flask import request, jsonify,render_template
app = flask.Flask(__name__)
app.config["DEBUG"] = False
@app.route('/')
def home():
a=dict()
a["araba"]="tyt"
a["araba2"]="rnt"
return a
if __name__ == "__main__":
app.run(host='0.0.0.0')
它與 docker 容器 localhost:50003 一起作業。還有它的基本請求代碼在這里:
import requests as req
resp = req.get("http://localhost:5003/")
print(resp.text)
當我將此請求代碼與 PyCharm 一起使用時,可以請求并獲得回應。但是當我想將它與 docker 容器一起使用時,我遇到了這個失敗:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 174, in _new_conn
conn = connection.create_connection(
File "/usr/local/lib/python3.8/site-packages/urllib3/util/connection.py", line 96, in create_connection
raise err
File "/usr/local/lib/python3.8/site-packages/urllib3/util/connection.py", line 86, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 699, in urlopen
httplib_response = self._make_request(
File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 394, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 239, in request
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
File "/usr/local/lib/python3.8/http/client.py", line 1256, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/usr/local/lib/python3.8/http/client.py", line 1302, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/usr/local/lib/python3.8/http/client.py", line 1251, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/usr/local/lib/python3.8/http/client.py", line 1011, in _send_output
self.send(msg)
File "/usr/local/lib/python3.8/http/client.py", line 951, in send
self.connect()
File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 205, in connect
conn = self._new_conn()
File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 186, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f1cb4cebac0>: Failed to establish a new connection: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/requests/adapters.py", line 439, in send
resp = conn.urlopen(
File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 755, in urlopen
retries = retries.increment(
File "/usr/local/lib/python3.8/site-packages/urllib3/util/retry.py", line 574, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=5003): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1cb4cebac0>: Failed to establish a new connection: [Errno 111] Connection refused'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "./request.py", line 3, in <module>
resp = req.get("http://localhost:5003/")
File "/usr/local/lib/python3.8/site-packages/requests/api.py", line 75, in get
return request('get', url, params=params, **kwargs)
File "/usr/local/lib/python3.8/site-packages/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python3.8/site-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=5003): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1cb4cebac0>: Failed to establish a new connection: [Errno 111] Connection refused'))
看不懂問題。感謝幫助..
uj5u.com熱心網友回復:
怎么修
- 在您的 中
Dockerfile,通過將FLASK_APP環境變數設定為您的應用程式檔案的名稱(request.py在您的情況下,默認為app.py)并覆寫 Flask 偵聽的默認埠,確保您正在運行 Flask 應用程式:
ENV FLASK_APP=request.py
ENV FLASK_RUN_PORT=5003
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]
- 構建你的 Docker 容器:
$ docker build -t request-example:latest .
- 將您的 Docker 鏡像作為容器運行,
5003為簡單起見,對稱地公開為埠:
$ docker run -p 5003:5003 request-example:latest
- 測驗 Flask 應用程式現在是否可以在您的本地機器上訪問
localhost:
$ curl http://localhost:5003/
- 或者:
import requests as req
resp = req.get("http://localhost:5003/")
print(resp.text)
建議
- 創建一個
requirements.txt包含所有第三方庫的檔案:
flask
requests
jsonify
- 重寫您
Dockerfile以安裝 中的任何內容requirements.txt,而不僅僅是requests庫:
FROM python:3.8
WORKDIR /request
COPY requirements.txt requirements.txt
COPY request.py request.py
RUN pip install -r requirements.txt
ENV FLASK_APP=request.py
ENV FLASK_RUN_PORT=5003
CMD [ "python", "-m" , "flask", "run", "--host=0.0.0.0"]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/365520.html
