如何设置运行Django的AWS Elastic Beanstalk Docker平台?

问题描述 投票:2回答:2

我一直在使用常规的EB Python平台运行常规的Django站点,但是由于某些原因,我想迁移到使用Docker映像,但仍然可以从Elastic Beanstalk获得所有信息。 为了演示该问题,我在https://github.com/dkarchmer/aws-eb-docker-django创建了一个小型Django项目,该项目可同时在python 2.7和3.4上运行,并且是我的实际网站的简化版本。 。 无论如何,我很乐意将其与预配置的Docker平台或通用Docker平台一起使用。 我的Google搜索只发现了AWS显示的基于Flask的超级简单示例,以及关于Stackoverflow的几个问题,但似乎没有人试图将Django项目放在EB / Docker上。 无论如何,让我们从一个通用的解决方案开始,这是我的首选。 如果下载Github项目,则可以成功地使用docker(或者更好的是docker-sompose)来测试该图像在本地运行(我在MacOS上运行)时是否工作。 目前尚不清楚是否应该使用CMD来定义指定的“ python manage.py runserver”,是否需要ENTRYPOINT或是否需要使用uswgi(就像预先配置的解决方案一样)。 我相信我需要CMD,所以我正在这样做:

  FROM python:3.4

  RUN adduser --disabled-password --gecos '' myuser

  # Install PostgreSQL dependencies
  # Install Postgres
  RUN apt-get update && apt-get install -y \
        postgresql-9.3 \
        libpq-dev \
        libjpeg-dev; \
        apt-get clean

 # Step 1: Install any Python packages
 # ----------------------------------------

 RUN mkdir /var/app
 WORKDIR  /var/app
 COPY requirements.txt /var/app/
 RUN pip install -r requirements.txt

 # Step 2: Copy Django Code
 # ----------------------------------------

 COPY authentication /var/app/authentication
 COPY myproject /var/app/myproject
 COPY settings /var/app/settings
 COPY manage.py /var/app/

 ENV DJANGO_SETTINGS_MODULE=settings.production

 EXPOSE 8080

 WORKDIR  /var/app
 CMD ["python", "/var/app/manage.py", "runserver", "0.0.0.0:8080"]

您可以在上面的Github链接上查找(下载并尝试)代码。

部署时(请参阅fab eb_create_custom中的fab eb_create_custom eb_create_custom),我得到了

[2015-05-02T15:22:27.245Z] INFO  [1732]  - [CMD-Startup/StartupStage0/AppDeployPreHook/04run.sh] : Activity execution failed, because: 17212f02bce509d43c40eeac9f53a281eecf1502387dac69c096c337c9c7b186
 Docker container quit unexpectedly after launch: Docker container quit unexpectedly on Sat May  2 15:22:27 UTC 2015:
 python3: can't open file 'manage.py': [Errno 2] No such file or directory. Check snapshot logs for details. (ElasticBeanstalk::ExternalInvocationError) caused by: 17212f02bce509d43c40eeac9f53a281eecf1502387dac69c096c337c9c7b186

我已经确认到了manage.py文件。 我已经下载了完整的日志,除了上面的错误以外,看不到太多内容。

有里面吗? 有人知道在EB Docker上运行Django的示例吗?

谢谢

django amazon-web-services docker elastic-beanstalk
2个回答
0
投票

我仍然没有可用的自定义Docker映像,但是可以使用预配置的Python Docker版本:

https://github.com/dkarchmer/aws-eb-preconfigured-docker-django


0
投票

我终于找到了问题。

问题是,在Dockerrun.aws.json文件中,我正在将主机目录映射(使用“卷”)到/var/app容器目录中,而该目录恰好是我将项目COPY到的位置。 这基本上是覆盖和替换所有项目文件。 这就是为什么docker映像在我的本地计算机上工作的原因(因为此文件在本地不需要),但是在发布到AWS时失败。

因为我不需要交叉映射这些卷,所以能够通过仅删除Dockerrun.aws.json中的“ Volumes”条目来解决此问题。

我已经清理并发布了一个工作版本,以供其他人使用:

https://github.com/dkarchmer/aws-eb-docker-django

© www.soinside.com 2019 - 2024. All rights reserved.