【问题标题】:Can't reach Flask server running in Docker container无法访问在 Docker 容器中运行的 Flask 服务器
【发布时间】:2021-04-15 09:32:05
【问题描述】:

我正在构建一个可以在我的机器上正确运行的 Flask + React webapp。我尝试将其 dockerize。我可以构建图像(stiko:demo),docker 运行,服务器启动:

但是当我尝试在浏览器上打开https://0.0.0.0:5000/ 时,连接失败:

我已经搜索了一段时间,尝试从各种图像开始,尝试使用ENDPOINT + CMD 命令,使用flask run --host=0.0.0.0 但仍然是同样的问题。

  • 这里是 Dockerfile:
FROM ubuntu:20.04

RUN useradd -ms /bin/bash ubuntu

RUN apt update
RUN apt install software-properties-common -y
RUN apt-get install libpq-dev -y
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt install python3.9 -y
RUN apt install python3-pip -y
RUN pip3 install --upgrade pip

WORKDIR /app/build
COPY ./build ./

WORKDIR /app/server
COPY ./server ./
RUN pip3 install -r requirements.txt --no-cache-dir
RUN pip3 install python-dotenv

ENV APP_SETTINGS="config.DevelopmentConfig"

EXPOSE 5000
  • app.py:
import sys
import os

from flask import Flask, request, render_template
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS, cross_origin

from models import User, Project, Image, db
from api import blueprints

app = Flask(__name__,
  static_folder='../build/static',
  template_folder="../build"
)

app.config.from_object(os.environ['APP_SETTINGS'])
db.init_app(app)
cors = CORS(app)

# Register the blueprints
for b in blueprints:
  app.register_blueprint(b)

@cross_origin
@app.route('/', defaults={'u_path': ''})
@app.route('/<path:u_path>')
def index(u_path=None):
  return render_template("index.html")

if __name__ == "__main__":
  app.run(host=('0.0.0.0'), port=5000, ssl_context='adhoc')

  • 项目结构:
  build
  |__static
  |__index.html
  |__ ...
  server
  |__app.py
  |__requirements.txt
  |__ ...
  Dockerfile

任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: docker ubuntu flask


    【解决方案1】:

    您的 Dockerfile 似乎没有启动您的烧瓶 API。尝试在末尾添加 CMD。

    FROM ubuntu:20.04
    
    RUN useradd -ms /bin/bash ubuntu
    
    RUN apt update
    RUN apt install software-properties-common -y
    RUN apt-get install libpq-dev -y
    RUN add-apt-repository ppa:deadsnakes/ppa
    RUN apt install python3.9 -y
    RUN apt install python3-pip -y
    RUN pip3 install --upgrade pip
    
    WORKDIR /app/build
    COPY ./build ./
    
    WORKDIR /app/server
    COPY ./server ./
    RUN pip3 install -r requirements.txt --no-cache-dir
    RUN pip3 install python-dotenv
    
    ENV APP_SETTINGS="config.DevelopmentConfig"
    
    EXPOSE 5000
    
    CMD [ "python", "app.py" ]
    

    【讨论】:

    • 我试过了,还是一样的结果。在我的第一张图片中,您可以看到直接从容器中运行 python3 app.py
    【解决方案2】:

    好吧,以防万一有人像我一样被卡住,网络技能可能为零:

    Dockerfile 和 app.py 很好。但与其尝试在浏览器中访问https://0.0.0.0:5000/,我应该尝试https://127.0.0.1:5000/,它工作得非常好!

    【讨论】:

      猜你喜欢
      • 2017-04-26
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多