Jak*_*ake 3 flask python-3.x docker
我构建了一个 Flask 应用程序并使用 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" ]
Run Code Online (Sandbox Code Playgroud)
在 Flask 应用程序中,我指定了一些用于开发和生产的配置
if os.environ['FLASK_ENV'] == 'production':
UPLOAD_URL = '/v1/path/to/production/server'
elif os.environ['FLASK_ENV'] == 'development':
UPLOAD_URL = '/upload'
Run Code Online (Sandbox Code Playgroud)
但是,启动脚本会导致错误,即使在 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'
Run Code Online (Sandbox Code Playgroud)
当您运行生成的图像时,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"]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2188 次 |
最近记录: |