运行Node应用程序的Elastic Beanstalk Docker容器提前退出

时间:2017-06-06 20:04:51

标签: node.js amazon-web-services docker elastic-beanstalk amazon-elastic-beanstalk

我有一个带有docker的ElasticBeanstalk环境,它部署了一个运行restify的节点应用程序。当我们部署新版本的应用程序时,我们会看到错误的间歇性故障:

Command failed on instance. Return code: 1 Output: nginx: [emerg] no host in upstream ":8080"

查看日志时,我们看到容器以exit 0退出,这意味着应用程序返回它已成功退出。

Dockerfile:

FROM node:alpine
RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app

COPY .npmrc .npmrc   
COPY package.json /usr/src/app/ 
RUN npm install 
RUN rm -f .npmrc

COPY . /usr/src/app

EXPOSE 8080 CMD ["npm", "start"]

1 个答案:

答案 0 :(得分:0)

TL; DR :CMD应启动长时间运行的流程。

CMD npm start将通过gulp任务启动应用程序,该任务产生启动节点应用程序服务器的进程。

生成申请流程后,gulp任务就会完成。一旦gulp完成,该过程将向docker报告它已成功完成,因此容器将退出。为了解决这个问题,我将docker文件CMD更改为:

CMD ["npm", "run", "start-node"]

start-node运行命令node dist/app.js

现在,CMD启动的流程是应用服务器,而不是产生启动应用程序的子流程的流程。