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
相关产品推荐
相关产品推荐

