【发布时间】:2015-07-31 01:54:29
【问题描述】:
我有一个在 Docker 中运行的 Django 服务,我将它部署到 AWS Elastic Beanstalk。
我想在部署时运行我的数据库迁移
如果我作为“Python 项目”部署到 EB,我的 .ebextensions 中可能包含以下内容:
$ cat .ebextensions/01run.config
container_commands:
01migrate:
command: "python manage.py migrate --noinput"
leader_only: true
但是,container_commands 用于 EC2 实例 - 在 Docker 容器内我有我的代码等。
我已经看过的东西
我不能只将它添加到我的
Dockerfile,因为应用迁移只是在附加的 RDS 实例(由环境提供)上操作 - 并不是真正的“构建 Docker 映像的一部分”我似乎没有什么有用的东西可以添加到
Dockerrun.aws.json
到目前为止我已经确定的黑客选项
我也许可以在
container_commands中识别 Docker 映像名称,然后执行docker run -ti $container-name python manage.py migrate等,但不知道如何,感觉非常hacky我可以手动运行迁移
-
我可以将
CMD gunicorn $etc替换为CMD $script,其中$script应用迁移,然后启动gunicorn。- 这是迄今为止我发现的最不可怕的事情,也是我将要做的权宜之计。
- 这意味着“每次我启动一个实例时都尝试应用迁移”,这并不让我感到舒服和快乐。
非常欢迎您提出想法!
【问题讨论】:
-
这可能就是你要找的stackoverflow.com/a/29566028/1048839
-
对不起,如果我来晚了,但是在这里放置一个脚本
/opt/elasticbeanstalk/hooks/appdeploy/pre将在部署之前执行脚本,/opt/elasticbeanstalk/hooks/appdeploy/post将在部署之后执行它,如果那是你正在寻找的。
标签: python django amazon-web-services docker