在AWS Elastic Beanstalk上使用Docker进行Django迁移

科尔斯先生

我有一个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映像或最新运行的容器

爱德华·塞缪尔(Edward Samuel)

根据有关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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章