python-3.x - Docker 中的 Flask 无法检测到 FLASK_ENV
问题描述
我构建了一个烧瓶应用程序并使用 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'
解决方案
当您运行生成的图像时,ENTRYPOINT
它们CMD
会组合成一个命令。您描述的CMD
将被包装起来sh -c
,然后作为命令行参数传递给您命名为ENTRYPOINT
.
(在您的应用程序中,尝试打印出sys.argv
。您应该会看到它包含["app.py", "/bin/sh", "-c", "export ..."]
。)
如果要为映像设置环境变量,则需要 DockerfileENV
指令。(例如,您不能RUN export ...
;您以这种方式设置的任何变量都将在行尾丢失RUN
。)
ENV FLASK_ENV=production
CMD ["python", "-u", "app.py"]
推荐阅读
- sql-server - 如何在 SQL Server 2005 中捕获转储事务
- azure - 逻辑应用程序:如何在特定时间段内处理来自服务总线队列的消息?
- angular - 在 for-if 语句 Angular 中进行单元测试
- r - 如何更好地可视化具有大范围值的条形图(R Plotly)?
- php - 带有 laravel 的子文件夹中的香草 php 文件 - 找不到页面错误
- reactjs - 子组件重新渲染中的道具值
- javascript - $$ 在 html 中工作正常,但在获取后设置 innerHtml 时却不行
- dom-events - vuejs 3.0:为什么组件事件处理程序会被递归调用一次?
- python - 超级能够访问父类的属性
- azure - 如何查找数据包到达 Azure IOT 中心的时间