【问题标题】:Flask in Docker unable to detect FLASK_ENVDocker 中的 Flask 无法检测到 FLASK_ENV
【发布时间】:2020-06-01 02:53:32
【问题描述】:

我构建了一个烧瓶应用程序并使用 Dockerfile 在 docker 中启动它,如下所示。

FROM python:3.7

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .
WORKDIR /app

CMD export FLASK_ENV=production    
ENTRYPOINT [ "python", "-u", "app.py" ]

在烧瓶应用程序中,我指定了一些用于开发和生产的配置

if os.environ['FLASK_ENV'] == 'production':
    UPLOAD_URL = '/v1/path/to/production/server'
elif os.environ['FLASK_ENV'] == 'development':
    UPLOAD_URL = '/upload'

但是,启动脚本会导致错误,即使在 Dockerfile 中设置了命令,容器也无法检测到 FLASK_ENV。有人可以帮忙吗?

Traceback (most recent call last):
  File "app.py", line 14, in <module>
    import config
  File "/app/config.py", line 14, in <module>
    if os.environ['FLASK_ENV'] == 'production':
  File "/usr/local/lib/python3.7/os.py", line 681, in __getitem__
    raise KeyError(key) from None
KeyError: 'FLASK_ENV'

【问题讨论】:

    标签: python-3.x docker flask


    【解决方案1】:

    当您运行生成的图像时,ENTRYPOINT and CMD are combined into a single command。您描述的CMD 将被包裹在sh -c 中,然后作为命令行参数传递给您命名为ENTRYPOINT 的程序。

    (在您的应用程序中,尝试打印出sys.argv。您应该会看到其中包含["app.py", "/bin/sh", "-c", "export ..."]。)

    如果要为镜像设置环境变量,则需要 Dockerfile ENV 指令。 (例如,您不能RUN export ...;您以这种方式设置的任何变量都将在RUN 行的末尾丢失。)

    ENV FLASK_ENV=production    
    CMD ["python", "-u", "app.py"]
    

    【讨论】:

      【解决方案2】:

      替换: CMD 导出 FLASK_ENV=production

      与: ENV FLASK_ENV=生产

      ENV 指令还可用于为您希望容器化的服务提供环境变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-24
        • 1970-01-01
        • 2018-12-05
        • 1970-01-01
        • 1970-01-01
        • 2021-02-13
        • 2018-12-11
        相关资源
        最近更新 更多