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

Docker容器启动后entrypoint.sh脚本陷入循环问题求助

问题根源

你的entrypoint脚本执行完数据库初始化命令后直接退出,没有启动CMD指定的npm run dev,容器随之停止。如果容器启动时配置了--restart=always这类自动重启策略,Docker会反复重启容器,导致entrypoint脚本被循环执行。

解决方案

1. 修改entrypoint.sh,执行完初始化后启动应用

在脚本末尾添加exec "$@",让脚本执行完数据库操作后,接管并运行CMD传入的命令,保持容器持续运行:

sequelize-cli db:drop
sequelize-cli db:create
sequelize-cli db:migrate

# 执行CMD指定的命令,作为容器主进程
exec "$@"

exec "$@"会将CMD的参数替换为当前进程运行,这样容器的主进程就是npm run dev,不会因为entrypoint脚本执行完毕而退出。

2. 处理数据库命令的潜在错误

如果数据库不存在时sequelize-cli db:drop会报错退出,导致容器提前停止,可添加容错处理:

set -e # 遇到非预期错误立即退出

# 允许drop命令失败(比如数据库尚未创建)
sequelize-cli db:drop || true
sequelize-cli db:create
sequelize-cli db:migrate

exec "$@"

3. 检查容器重启策略

如果不需要容器自动重启,启动时去掉--restart=always参数,避免容器退出后被重复启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:42:47