簡體   English   中英

無法訪問 flask 站點外的 Docker 容器

[英]Can't access flask site outside Docker container

我正在運行 Linux Mint 和 Python 3.6。

我已經閱讀了這里的每個鏈接,但無法弄清楚哪里出了問題。 我正在運行一個簡單的 flask 應用程序,當我在我的機器上本地運行它時它工作正常,但是然后使用 Docker 運行它我無法在我的瀏覽器中訪問 IP。

我已將 flask 應用程序設置為在主機0.0.0.0上運行,使用app.run(host='0.0.0.0')

Dockerfile:

FROM python:3.7

RUN mkdir -p /var/app

WORKDIR /var/app

COPY . /var/app

RUN pip install --upgrade pip

RUN pip install -r requirements.txt

EXPOSE 5000

CMD ["pytest", "-v", "tests/test_flask_api.py"]
# CMD ["python3", "app.py"]
CMD ["python3", "-m", "Flask", "run", "--host=0.0.0.0"]

docker-compose.yml:

web:
  build: ./app
  ports:
   - "5000:5000"
  volumes:
   - .:/code

在運行命令docker-compose up -d構建並運行容器后,我運行命令docker inspect --format '{{.NetworkSettings.IPAddress }}'以獲取容器的 IP 地址172.17.0.2

我嘗試通過172.17.0.2:5000localhost:5000訪問該站點,但兩者都只是掛起而不加載。

最后,我運行docker exec -it restapimma_web_1 /bin/bash進入容器。 然后我運行curl localhost:5000並能夠得到正確的響應。 所以 flask 應用程序在容器內運行,我無法在容器外訪問它。

我有一個類似的問題。 讓它工作:

  1. 允許您的 flask 應用程序接受來自您環境的 HOST 參數
if __name__ == "__main__":
    app.run(
        host=os.environ.get("BACKEND_HOST", "172.0.0.1"),
        port=your_port,
        debug=True,
    )
  1. 在你的作品中設置你的主機環境變量
services:
  [your service name]:
    image:[your image]
    environment:
      - BACKEND_HOST=[your service name]
    ports:
      - "[etc]"

基本上 flask 想要使用正確的主機名來調用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM