[英]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.