错误命令失败,信号为“SIGINT”,当尝试终止Docker容器时

slhcrj9b  于 2023-06-05  发布在  Docker
关注(0)|答案(1)|浏览(185)

我有一个简单的node.js web应用程序。

☁  node-app [master] yarn start                              
yarn run v1.17.3
$ node ./dist/main.js
Http server is listening on http://localhost:3000
^C

在本地主机中启动Web应用程序,并使用control-c终端。它工作正常。
现在,我为这个节点Web应用程序构建一个Docker镜像。运行docker容器和终端,它使用相同的方式control-c

☁  node-app [master] docker run -it -p 3000:3000 node-app:1.0
yarn run v1.16.0
$ node ./dist/main.js
Http server is listening on http://localhost:3000
error Command failed with signal "SIGINT".
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

docker容器按预期终止。但似乎yarn CLI为此抛出错误。
Dockerfile:

# install dependencies ...
# build ...
CMD yarn start

我该如何解决这个问题?

qnakjoqk

qnakjoqk1#

我最近也遇到了类似的问题(使用npm)。使用docker,你可以添加一个--init参数,它将在你的容器中启动一个init进程,该进程将监听sig命令(如ctrl + c)并处理它们。
在docker docs中:
容器的主进程负责管理它启动的所有进程。在某些情况下,主进程设计得不好,并且在容器退出时不能优雅地处理“获取”(停止)子进程。如果您的进程福尔斯这一类别,则可以在运行容器时使用--init选项。- -init标志将一个微小的init-process作为主进程插入到容器中,并在容器退出时处理所有进程的获取。以这种方式处理此类进程上级使用成熟的init进程(如sysvinit、upstart或systemd)来处理容器中的进程生命周期。
这篇文章也让我多了一点理解:https://medium.com/@BeNitinAgarwal/an-init-system-inside-the-docker-container-3821ee233f4b

相关问题