繁体   English   中英

AWS Elastic Beanstalk上的Docker-无法从容器访问环境变量

[英]Docker on AWS Elastic Beanstalk - can't access environment variables from container

我试图将我们的Python / Django应用程序移至AWS Elastic Beanstalk(单个Docker容器)上的Docker。 我已经编写了以下基本的Dockerfile ,并通过各种教程进行了整理:

FROM python:3

ENV PYTHONUNBUFFERED 1
RUN mkdir /var/app
WORKDIR /var/app
ADD requirements.txt /var/app
RUN pip install -r requirements.txt
ADD . /var/app
EXPOSE 8000

RUN python3 manage.py migrate --settings=finimize_django.settings.aws --noinput


CMD python3 manage.py runserver --settings=finimize_django.settings.aws

直到migrate命令RUN为止,它migrate RUN建立,这时应用程序会出错,因为它无法从EB UI中找到环境变量。

我注意到有一个例子AWS图像在这里 ,我宁可不使用(用于一堆理由,例如简单,能够在本地使用类似的图像,想要控制等)。 查看使用的Dockerfile,我也看不到他们如何解决了这个问题。

有什么我想念的吗?

根据用于Elastic beantalk Python平台AWS文档,可通过Python的os.environ字典访问环境属性。 有关更多信息,请访问http://docs.python.org/library/os.html

可以在此处找到有关在Elastic Beanstalk中设置环境属性的常规信息。

尝试使用这两个指南来更改设置文件的编写方式,以使Migration RUN语句正常工作。

如果这些没有为您提供所需的线索,请在问题中发布确切的错误消息以及设置文件中的内容,我们可能会更好地为您提供帮助。 也是访问设置(数据库连接信息,键等)的目标

这是一个小型工作docker文件的示例,我目前将其用于生产实例的小型单个应用程序eb部署。

关于环境变量的一点要确保它们是在容器或.env文件中定义的。

波纹管示例使用gunicorn并在端口80上运行。您需要为db / cache / email / other输入ENV变量。 此外,还要确保您具有正确的安全组设置,以授权EB访问RDS。

需要说明的一点是,您不应在每个EB部署上都运行迁移。 我建议您单独运行它们并在进行操作之前对其进行测试,因为迁移错误/错误会严重破坏您的生产/开发服务器,这是您不想要的。

        FROM python:3.6

    RUN apt-get update && \
        apt-get -y install libev-dev gcc gcc+ python3-dev g++ && \
        rm -rf /var/lib/apt/lists/*


        WORKDIR /app
        ADD . /app
        RUN pip install --trusted-host pypi.python.org -r requirements.txt

    ENV DJANGO_ALLOWED_HOSTS *
    ENV DJANGO_SETTINGS_MODULE config.settings.production

    EXPOSE 80
    ENTRYPOINT ["python", "/usr/local/bin/gunicorn", "config.wsgi", "-b 0.0.0.0:80" ,"-w=3", "--chdir=/app"]

我最终怀疑这里出了什么问题-我认为除非您处于构建阶段,否则您不能访问env vars(即,不在RUN命令中,除非您以ONBUILD )。

为了解决该问题,我将manage.py命令移到了bash脚本中,用作入口点:

FROM python:3

ENV PYTHONUNBUFFERED 1
WORKDIR /var/app

RUN pip3 install virtualenv
RUN virtualenv /var/app

ADD . /var/app

EXPOSE 8000

RUN ["chmod", "+x", "/var/app/scripts/aws_start.sh"]
ENTRYPOINT [ "/var/app/scripts/aws_start.sh" ]

然后在我的aws_start.sh我有:

cd /var/app

. bin/activate

pip install -r requirements.txt

python3 manage.py createsu --settings=finimize_django.settings.aws
python3 manage.py migrate --settings=finimize_django.settings.aws --noinput
python3 manage.py runserver --settings=finimize_django.settings.aws

现在这似乎工作正常

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM