【问题标题】:Flask App runs in terminal but not in Docker ContainerFlask App 在终端中运行,但不在 Docker 容器中
【发布时间】:2020-05-08 20:12:04
【问题描述】:

所以,当我通过终端运行这个烧瓶应用程序时,它运行良好,但由于某种原因,如果我启动一个 docker 容器,它会立即以“退出代码零”退出。

这是文件夹结构: https://imgur.com/a/BOGCt6S

docker-compose.yml:

version: '3.2'

services:

    flask-app:
        build: ./Flask_App
        volumes:
            - ./Flask_App/static:/Flask_App/static
            - ./Flask_App/db:/Flask_App/db
        ports:
            - '5001:5001'
        # restart: unless-stopped

Dockerfile:

FROM python:3

# Setup env
COPY requirements.txt ./

RUN pip install -r requirements.txt

# Setup App
RUN mkdir -p /Flask_App

COPY . /Flask_App

WORKDIR /Flask_App

EXPOSE 5001

ENTRYPOINT [ 'python3' ]

CMD [ 'app.py' ]

和 app.py 文件:(我知道它只是导入,但是当我通过主机上的终端运行它时它工作正常,所以它可能工作正常)

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from flask_bootstrap import Bootstrap

from forms import *

app = Flask(__name__)
app.config.from_pyfile('config.py')
Bootstrap(app)

db = SQLAlchemy(app)

login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'

from views import *

if __name__ == '__main__':
    app.run(host=app.config['HOST'], port=app.config['PORT'], debug=app.config['DEBUG'])

为了以防万一,这里是“config.py”文件的一部分:

DEBUG = False
HOST = '0.0.0.0'
PORT = 5001

【问题讨论】:

  • docker logs containerid 将显示容器的日志,请同时粘贴。或者,如果您在没有 -d 选项的情况下运行 docker run 也会在标准输出中显示日志。
  • ENTRYPOINTCMD 行中的单引号更改为双引号可以解决问题吗?它们应该是 JSON 数组。
  • 这不行,只是ENTRYPOINTCMD中的引号

标签: python docker flask docker-compose dockerfile


【解决方案1】:

正如David Maze 在评论中所说,我在ENTRYPOINTCMD 中使用的单引号(')应该改为双引号("),因为它们应该是JSON数组。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2021-02-17
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多