簡體   English   中英

使用Docker運行單個NodeJS腳本的最簡單方法是什么,並且能夠使用Ctrl-C終止它

[英]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專門處理:它忽略具有默認操作的任何信號。 因此,除非進行編碼,否則進程不會在SIGINTSIGTERM上終止。

主Docker容器進程(容器的ENTRYPOINTCMD或命令行中指定的等效項)在容器內作為進程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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM