npm script在docker中的问题

323 阅读1分钟

准备

初始化目录

mkdir nodetest
cd nodetest
npm init

添加index.js,内容如下

async function cleanupJob(){
return new Promise((resolve)=>{setTimeout(resolve,2000)});
}

async function cleanup(){
    console.log('start');
    await cleanupJob();
    console.log('cleaned');
    process.exit(0);
}

process.on('SIGTERM', cleanup);
process.on('SIGINT', cleanup);

setInterval(()=>{console.log('running')}, 1000)

修改package.json,添加

"start":"node index.js"

添加Dockerfile,内容如下

from node:latest
WORKDIR /app
COPY . /app

CMD ["npm", "start"]

验证

执行

docker build ndoetest:v1 .
docker run nodetest:v1

按ctrl+c发现没有执行cleanup就退出了

解决办法

修改package.json,内容如下

"start":"exec node index.js"

验证

执行

docker build ndoetest:v2 .
docker run nodetest:v2

按ctrl+c发现执行了cleanup