首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头python中缺少的环境Vars :3与码头-合成

码头python中缺少的环境Vars :3与码头-合成
EN

Stack Overflow用户
提问于 2018-02-27 18:42:12
回答 2查看 1.6K关注 0票数 3

虽然我的配置看起来很好,但我的python:3映像似乎没有预期的DJANGO_SECRET_KEY集,至少在Dockerfile试图运行迁移时是这样的。

代码语言:javascript
复制
$ docker-compose config
services:
  api:
    build:
      context: /Users/ben/Projects/falcon/falcon-backend
      dockerfile: Dockerfile
    depends_on:
    - db
    - redis
    environment:
      DJANGO_SECRET_KEY: 'some-secret-that-works-elsewhere'
$
$ docker-compose up --build api
[...]
 Step 6/7 : RUN echo `$DJANGO_SECRET_KEY`
 ---> Running in fbfb569c0191

[...]
django.core.exceptions.ImproperlyConfigured: Set the DJANGO_SECRET_KEY env variable
ERROR: Service 'api' failed to build: The command '/bin/sh -c python manage.py migrate' returned a non-zero code: 1

但是,最后一行CMD python manage.py runserver 0.0.0.0:8001 --settings=falcon.settings.dev-microservice确实按需要启动,并设置了必要的env。

代码语言:javascript
复制
# Dockerfile -- api

FROM python:3

RUN pip3 -q install -r requirements.txt
RUN echo `$DJANGO_SECRET_KEY`
RUN python manage.py migrate --settings=falcon.settings.dev-microservice # <-- why does this not work
CMD python manage.py runserver 0.0.0.0:8001 --settings=falcon.settings.dev-microservice

为什么Dockerfile的倒数第二行会因为一个未设置的环境变量而失败,而最后一行将按预期工作呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-01 08:11:06

RUN只在构建图像时使用。CMD是从映像启动容器时启动的命令。如果在生成映像时运行迁移-它是错误的,则迁移正在构建数据库,并且希望在runserver之前每次运行它。

代码语言:javascript
复制
# Dockerfile -- api

FROM python:3

RUN pip3 -q install -r requirements.txt
RUN echo `$DJANGO_SECRET_KEY`
CMD /bin/bash -c "python manage.py migrate --settings=falcon.settings.dev-microservice && python manage.py runserver 0.0.0.0:8001 --settings=falcon.settings.dev-microservice"

--这是在docker中启动django的正确方法,因为您希望在启动服务器时在生产中运行迁移。不是在你的电脑上建立图像的时候.

票数 1
EN

Stack Overflow用户

发布于 2018-02-27 19:52:41

在构建映像时,没有在Dockerfile中声明的环境变量对容器不可见。它们只在运行时传递给容器。因为RUN指令是在构建时执行的,所以在Dockerfile之外声明的环境变量DJANGO_SECRET_KEYRUN命令是不可见的。

要解决这个问题,可以在Dockerfile中声明env变量,并通过构建参数设置它:

代码语言:javascript
复制
FROM python:3

RUN pip3 -q install -r requirements.txt
ARG key
ENV DJANGO_SECRET_KEY=$key
RUN echo `$DJANGO_SECRET_KEY`
RUN python manage.py migrate --settings=falcon.settings.dev-microservice
CMD python manage.py runserver 0.0.0.0:8001 --settings=falcon.settings.dev-microservice

然后,您应该按如下方式修改复合文件:

代码语言:javascript
复制
build:
  context: /Users/ben/Projects/falcon/falcon-backend
  dockerfile: Dockerfile
  args:
    - key='secrete-key'
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49015773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档