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

我一直在使用常规的EB Python平台运行常规的Django站点,但由于某些原因,我想迁移到使用Docker镜像,但仍然获得了从Elastic Beanstalk获得的所有内容。 为了演示这个问题,我在https://github.com/dkarchmer/aws-eb-docker-django创build了一个小型的Django项目,它既适用于Python 2.7也适用于3.4,它是我真实站点的简化版本。 无论如何,我将很高兴能够使用预configuration的Docker平台或通用的Docker平台。 我的Googlesearch只find了AWS显示的超级简单的基于Flask的示例,还有一些关于Stackoverflow的问题,但是似乎没有人试图在EB / Docker上放置Django项目。 无论如何,让我们从一个通用的解决scheme开始,这是我的首选。 如果你下载了Github项目,你可以成功地使用docker(或者更好的docker-sompose)来testing在本地运行(我在MacOS上运行)时的图像。 我不清楚是否应该使用CMD来定义指定我的“python manage.py runserver”,或者如果我需要一个入口点,或者如果我需要使用uswgi(作为预configuration的解决scheme)。 我相信我需要一个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的例子吗?

谢谢

我仍然没有工作的自定义Docker镜像,但获得了预configuration的Python Docker版本:

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

我终于find了问题。

问题是,在Dockerrun.aws.json文件中,我正在将一个主机目录映射(使用“卷”)到/var/app容器目录,恰好是我正在COPY的项目。 这基本上是覆盖和replace所有的项目文件。 这就是Docker镜像在本地机器上工作的原因(因为这个文件不是本地需要的),但是在发布到AWS时失败。

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

我已经清理并发布了一个适用于其他人的工作版本,希望能够有用:

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