【发布时间】:2016-08-04 20:13:48
【问题描述】:
我在我的应用程序中设置了侦听器来捕获 SIGTERM、SIGINT 和 SIGUSR2:
# kill
process.on 'SIGTERM', ->
killExecutors 'SIGTERM'
# ctrl + c
process.on 'SIGINT', ->
killExecutors 'SIGINT'
# nodemon signal
process.on 'SIGUSR2', ->
killExecutors 'SIGUSR2'
它按预期工作。当我在 docker 实例中运行它时:
FROM node:4.4.7
MAINTAINER Newborns <newborns@versul.com.br>
COPY . /src
EXPOSE 7733
WORKDIR /src
RUN npm install
CMD ["./node_modules/.bin/coffee", "feeder.coffee"]
一切正常,也是。但是,当我在执行中添加节点标志时
FROM node:4.4.7
MAINTAINER Newborns <newborns@versul.com.br>
COPY . /src
EXPOSE 7733
WORKDIR /src
RUN npm install
CMD ["./node_modules/.bin/coffee", "--nodejs", "--max_old_space_size=384", "feeder.coffee"]
它停止捕捉信号。我试图将 de CMD exec 表单更改为
CMD ./node_modules/.bin/coffee --nodejs --max_old_space_size=384 feeder.coffee
但还是不行。带标志和不带标志的执行有何变化?
编辑:
其实是docker在没有flags通过的情况下启动一个进程
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 4.2 1.0 960940 85424 ? Ssl 20:21 0:01 node ./node_modules/.bin/coffee feeder.coffee
root 16 0.1 0.0 20220 2884 ? Ss 20:22 0:00 bash
root 20 0.0 0.0 17500 2064 ? R+ 20:22 0:00 ps -aux
以及传递标志时的两个进程
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.3 707704 25272 ? Ssl 20:17 0:00 node ./node_modules/.bin/coffee --nodejs --max_old_space_size=384 feeder.coffee
root 10 1.7 1.1 965900 90068 ? Sl 20:17 0:01 /usr/local/bin/node --max_old_space_size=384 /src/node_modules/.bin/coffee feeder.coffee
问题是:为什么?
【问题讨论】:
-
你能告诉哪个标志是问题吗?我怀疑
--nodejs比--max_old_space_size更有可能出错。 -
实际上,--nodejs 参数告诉coffee 将--max_old_space_size 参数直接转发到节点二进制文件。
标签: javascript node.js docker coffeescript dockerfile