我有一個非常簡單的燒瓶服務,我試圖在 docker 容器中運行。
我使用 python 實作了一個最小的應用程式,它在我的 Windows 上運行良好,但在 Docker 容器中時無法訪問。
我嘗試了設定 --host=0.0.0.0 的常見修復方法(嘗試了多種方法),但它并沒有解決我的問題。
專案結構:
├── application/
│ ├── Dockerfile
│ ├── requirements.txt
│ ├── service.py
Dockerfile:
# syntax=docker/dockerfile:1
FROM python:3.6.5-alpine
RUN apk --update add bash nano
COPY requirements.txt /tmp/
RUN pip3 install -r /tmp/requirements.txt
COPY . .
ENV FLASK_ENV=development
CMD ["python", "service.py"]
服務.py:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def greetings():
return "Welcome my service!"
if __name__ == '__main__':
app.run(debug=True,host='0.0.0.0')
最后,這是我以互動模式啟動 Docker 映像時的日志:
[...]/.venv/Scripts/Activate.ps1"
* Serving Flask app 'service' (lazy loading)
* Environment: development
* Debug mode: on
* Running on all addresses.
WARNING: This is a development server. Do not use it in a production deployment.
* Running on http://172.17.0.2:5000/ (Press CTRL C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 277-473-905
所以似乎沒有問題,但是當我使用瀏覽器(谷歌瀏覽器)訪問控制臺中顯示的地址時,它只是永遠加載然后顯示該站點無法訪問(ERR_CONNECTION_TIMED_OUT)。
此外,我可以通過從 bash 終端鍵入以下命令,從本機作業系統運行燒瓶,而不會出現問題:
export FLASK_APP=service
export FLASK_ENV=development
flask run
誰能幫我理解為什么它不能在 Docker 容器中作業?它是從外部作業的,我認為添加host='0.0.0.0'應該使容器可以從外部訪問。
編輯: docker 命令測驗:
docker run --rm -it scone:latest
docker run --rm -p 5000:5000 scone:latest
已解決 正如 u/ OneCricketeer
所提到的,技巧是在 docker run 中使用-p 5000:5000引數,現在您可以使用到達容器但您必須忽略 docker 終端中給出的地址。改用它: http://localhost:5000 (如果您從 docker 容器外部運行燒瓶,它將為您提供的 ip。)
uj5u.com熱心網友回復:
您可能會看到的問題是您的 Windows 主機無法訪問 docker 容器。網路不會暴露給您的主機,因此您需要-p 5000:5000在 docker 命令列中包含該選項,以告訴 docker 將主機埠 5000 轉發到 docker 容器埠 5000。
簡而言之:
docker run --rm -it -p 5000:5000 scone:latest
uj5u.com熱心網友回復:
用這個 Dockerfile 測驗
# syntax=docker/dockerfile:1
FROM python:3.10-alpine
RUN ["python", "-m", "pip", "install", "flask"]
COPY service.py .
CMD ["python", "service.py"]
運行
$ docker build -t tmp-flask .
$docker run --rm -e FLASK_ENV=development -p 5000:5000 tmp-flask
* Serving Flask app 'service' (lazy loading)
* Environment: development
* Debug mode: on
* Running on all addresses (0.0.0.0)
WARNING: This is a development server. Do not use it in a production deployment.
* Running on http://127.0.0.1:5000
* Running on http://172.17.0.2:5000 (Press CTRL C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 248-506-880
從另一個終端
$ curl localhost:5000
Welcome my service!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/496547.html
上一篇:關于查詢(查詢、查詢約束)的firebase檔案的解釋?
下一篇:單擊按鈕時無法將影像更改為攝像機
