如何在Docker Compose中仅针对Local环境运行种子迁移脚本?
仅Local环境执行数据库种子迁移脚本的实现方式
脚本内条件判断的常规写法
直接在你的entry-point.sh脚本里加入环境变量判断,只有当ENVIRONMENT等于local时才执行种子脚本:
# 执行通用数据库迁移 ./your-migration-script.sh # 条件执行种子脚本 if [ "$ENVIRONMENT" = "local" ]; then echo "Running local seed scripts..." ./your-seed-script.sh fi
更简洁的短路求值写法
如果追求代码紧凑,可以用Shell的短路逻辑(&&仅在前面命令返回成功时执行后续命令),一行搞定判断:
./your-migration-script.sh [ "$ENVIRONMENT" = "local" ] && ./your-seed-script.sh
额外优化:从Docker Compose层面隔离逻辑
如果不想在entry脚本里混入环境判断逻辑,也可以直接在docker-compose-local.yml中通过覆盖命令的方式,让local环境单独执行种子脚本:
services: # 假设你的迁移服务叫db-migrate db-migrate: environment: - ENVIRONMENT=local # 覆盖默认entrypoint命令,先执行迁移再执行种子脚本 command: sh -c "./your-migration-script.sh && ./your-seed-script.sh"
这种方式下,通用的entry-point.sh只负责执行基础迁移,local环境的额外逻辑完全由Docker Compose配置来控制,脚本本身更干净。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

