我有一个带有docker的ElasticBeanstalk环境,它部署了一个运行restify的节点应用程序。当我们部署新版本的应用程序时,我们会看到错误的间歇性故障:
Command failed on instance. Return code: 1 Output: nginx: [emerg] no host in upstream ":8080"
查看日志时,我们看到容器以exit 0
退出,这意味着应用程序返回它已成功退出。
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"]
答案 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启动的流程是应用服务器,而不是产生启动应用程序的子流程的流程。