我有一个django应用程序在AWS Elastic Beanstalk上的单个docker容器中运行。我无法正常运行迁移,它总是看到旧的docker映像并尝试从中运行迁移(但它没有最新文件)。
我.ebextensions
用我的EBS源代码包(一个包含Dockerrun.aws.json文件和.ebextensions目录的zip文件)打包了一个目录。它具有一个setup.config文件,如下所示:
container_commands:
01_migrate:
command: "CONTAINER=`docker ps -a --no-trunc | grep aws_beanstalk | cut -d' ' -f1 | head -1` && docker exec $CONTAINER python3 manage.py migrate"
leader_only: true
这是关于这个SO问题的评论的部分模型。
我已经验证了是否可以再次重新部署该应用程序,因为这一次以前运行的映像将具有更新的迁移文件。
有谁知道如何在.ebextensions
脚本中访问最新的docker映像或最新运行的容器?
根据有关Linux服务器上的定制软件的AWS文档,container_commands
将在部署应用程序之前执行。
您可以使用该
container_commands
键为容器执行命令。中的命令container_commands
按名称的字母顺序进行处理。它们在设置了应用程序和Web服务器并提取了应用程序版本文件之后但在部署应用程序版本之前运行。他们还可以访问环境变量,例如您的AWS安全凭证。此外,您可以使用leader_only
。选择一个实例作为Auto Scaling组的领导者。如果将该leader_only
值设置为true
,则该命令仅在标记为领导者的实例上运行。
在这里也看看我的答案。它在不同的应用程序部署状态下运行一些命令,并给出命令结果。
因此,您的问题解决方案可能是创建应用程序后部署挂钩。
.ebextensions / 00_post_migrate.config
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/10_post_migrate.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
if [ -f /tmp/leader_only ]
then
rm /tmp/leader_only
docker exec `docker ps --no-trunc -q | head -n 1` python3 manage.py migrate
fi
container_commands:
01_migrate:
command: "touch /tmp/leader_only"
leader_only: true
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句