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

我有一个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"] 

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

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

一旦申请过程产生,吞噬任务就完成了。 一旦吞噬完成,该过程将向docker员报告它已成功完成,因此集装箱将退出。 为了解决这个问题,我把docker文件CMD改为:

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

启动节点运行命令node dist/app.js

所以现在CMD启动的进程是应用程序服务器,而不是生成启动应用程序的subprocess的进程。