首页 > 解决方案 > Docker 容器在调用时立即退出

问题描述

我正在使用 docker 版本 18.09.0。图像构建没有错误。从映像创建容器后,即使我使用 -it 选项,容器也会立即运行并退出,退出状态为 0。这是 Dockerfile。

FROM node:8.15-alpine

WORKDIR /usr/src/app

COPY package*.json ./
COPY middleware middleware
COPY hfc-key-store hfc-key-store
COPY app.js ./

RUN apk --no-cache --virtual build-dependencies add \
    python \
    make \
    g++ \
    && npm install \
    && npm install -g forever

ENTRYPOINT ["forever", "start", "-l", "/logsBackEnd.txt", "--spinSleepTime", "10000", "app.js"]

构建镜像的命令:

docker image build -t nid-api:1.0 .

运行容器的命令:

docker run -it  nid-api:1.0

标签: dockerdockerfile

解决方案


forever作为 docker 容器内的守护进程运行,这可能是导致容器立即退出的原因。

您可以尝试使用哑初始化启动在 docker 容器中运行的任何进程,以便正确处理退出信号。

哑初始化使您可以简单地为您的命令添加哑初始化前缀。它充当 PID 1 并立即将您的命令作为子进程生成,并在收到信号时注意正确处理和转发信号。

哑初始化作为 PID 1 运行,就像一个简单的初始化系统。它启动一个进程,然后将所有接收到的信号代理到以该子进程为根的会话。

由于您的实际进程不再是 PID 1,因此当它接收到来自dumb-init 的信号时,将应用默认信号处理程序,并且您的进程将按照您的预期运行。如果你的进程死了,dumb-init 也会死,注意清理任何其他可能仍然存在的进程。


推荐阅读