【问题标题】:Elastic Beanstalk Docker container running Node application exits early运行 Node 应用程序的 Elastic Beanstalk Docker 容器提前退出
【发布时间】:2017-11-07 23:52:57
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    所以现在由 CMD 启动的进程是应用程序服务器,而不是产生将启动应用程序的子进程的进程。

    【讨论】:

      猜你喜欢
      • 2015-06-05
      • 2018-05-04
      • 2016-07-10
      • 2017-07-26
      • 2014-09-17
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      相关资源
      最近更新 更多