You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elastic Beanstalk容器命令迁移无效,SSH登录EC2执行正常的问题

Elastic Beanstalk中container_commands执行migrate无效果但SSH执行成功的排查方案

1. 环境变量未加载导致数据库配置错误

EB的container_commands阶段默认不会加载控制台设置的环境变量,而SSH登录后这些变量会自动加载。如果你的Django数据库配置依赖这些环境变量(比如DATABASE_URL),就会导致migrate时连接的数据库不是目标RDS,自然看不到未完成的迁移。

解决办法:在命令开头先加载EB的环境变量文件:

container_commands:
  01_migrate:
    command: "source /opt/elasticbeanstalk/deployment/env && source /var/app/venv/*/bin/activate && python3 /var/app/current/python/manage.py migrate --noinput"
    leader_only: true

2. 工作目录不正确导致路径问题

container_commands默认工作目录不是Django项目根目录,执行manage.py时可能因为相对路径问题找不到正确的settings模块,或者读取不到迁移文件。

解决办法:指定cwd参数切换到manage.py所在目录,同时简化命令:

container_commands:
  01_migrate:
    command: "source /opt/elasticbeanstalk/deployment/env && source /var/app/venv/*/bin/activate && python3 manage.py migrate --noinput"
    leader_only: true
    cwd: /var/app/current/python

3. 虚拟环境Python与系统Python混淆

命令中使用python3可能调用的是系统默认Python,而非虚拟环境中的Python,导致依赖包(比如MySQL驱动)未正确加载,或者使用了错误的Django配置。

解决办法:直接调用虚拟环境中的Python路径:

container_commands:
  01_migrate:
    command: "source /opt/elasticbeanstalk/deployment/env && /var/app/venv/*/bin/python manage.py migrate --noinput"
    leader_only: true
    cwd: /var/app/current/python

4. 添加调试命令排查差异

如果以上方法无效,可以在migrate前添加调试命令,对比container_commands执行环境和SSH环境的差异:

container_commands:
  00_debug:
    command: "pwd && env | grep DATABASE && ls -la /var/app/current/python/migrations"
    leader_only: true
  01_migrate:
    command: "source /opt/elasticbeanstalk/deployment/env && source /var/app/venv/*/bin/activate && python3 manage.py migrate --noinput"
    leader_only: true
    cwd: /var/app/current/python

查看部署日志中的调试输出,重点对比:

  • 当前工作目录(pwd)是否和SSH时一致
  • 数据库相关环境变量(env | grep DATABASE)是否正确
  • 迁移文件目录(ls -la .../migrations)是否存在文件且权限正常

内容的提问来源于stack exchange,提问作者lambooties

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:24:55