[英]What is the easiest way to run a single NodeJS script using Docker and be able to terminate it with Ctrl-C
從Docker的文檔中可以看出,如果要運行獨立的NodeJS腳本,則應該使用以下命令:
docker run -it --rm --name my-running-script -v "$PWD":/usr/src/app -w /usr/src/app node:8 node your-daemon-or-script.js
除了不能使用Ctrl-C停止腳本之外,這個工作正常。 我怎樣才能做到這一點?
這是我的script.js:
console.log('Started - now try to kill me...');
setTimeout(function () {
console.log('End of life.');
}, 10000);
此注釋隱藏在擴展的docker run
文檔中 :
注意:在容器內作為PID 1運行的進程由Linux專門處理:它忽略具有默認操作的任何信號。 因此,除非進行編碼,否則進程不會在
SIGINT
或SIGTERM
上終止。
主Docker容器進程(容器的ENTRYPOINT
或CMD
或命令行中指定的等效項)在容器內作為進程ID 1運行。 這通常保留用於特殊的init進程,並且在某些方面有特殊之處。
可能最簡單的答案是讓Docker通過在--init
docker run
命令中添加--init
為你注入一個init進程作為PID 1。
或者,在Node上,您可以注冊信號事件以顯式處理SIGINT
。 例如,如果我擴展您的腳本
process.on('SIGINT', function() {
process.exit();
});
然后重建圖像並重新運行它,它響應^ C.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.