Docker容器在调用后立即退出

时间:2019-02-15 08:11:13

标签: docker dockerfile

我正在使用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

2 个答案:

答案 0 :(得分:0)

您需要使用-d在分离模式下运行

我可以想到有两个原因可以退出容器。

  1. 如果容器中没有运行服务
  2. 如果服务正在运行且docker正在运行而没有任何取消连接选项。

第一种情况似乎与您的错误有关。但是请始终以分离模式运行容器。默认情况下,新版本的docker始终以分离模式运行

也可以尝试以下方法。

Docker container will automatically stop after "docker run -d"

答案 1 :(得分:0)

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

您可以尝试使用dumb-init启动在Docker容器中运行的任何进程,以便正确处理退出信号。

  

dumb-init使您可以简单地在命令前加上dumb-init。它充当PID 1,并立即将您的命令作为子进程生成,请小心处理接收到的信号并进行转发。

     

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

     

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