docker - 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
解决方案
它forever
作为 docker 容器内的守护进程运行,这可能是导致容器立即退出的原因。
您可以尝试使用哑初始化启动在 docker 容器中运行的任何进程,以便正确处理退出信号。
哑初始化使您可以简单地为您的命令添加哑初始化前缀。它充当 PID 1 并立即将您的命令作为子进程生成,并在收到信号时注意正确处理和转发信号。
哑初始化作为 PID 1 运行,就像一个简单的初始化系统。它启动一个进程,然后将所有接收到的信号代理到以该子进程为根的会话。
由于您的实际进程不再是 PID 1,因此当它接收到来自dumb-init 的信号时,将应用默认信号处理程序,并且您的进程将按照您的预期运行。如果你的进程死了,dumb-init 也会死,注意清理任何其他可能仍然存在的进程。
推荐阅读
- jquery - 根据一天中的时间添加课程
- javascript - 如何使用相对 URL 进行重定向?
- ios - 使用 WKWebView 在 iOS 13 中进行桌面浏览?
- less - LESS mixin 为 IE 自动添加 CSS 自定义属性回退
- python - 通过两个子图放置样带
- vuejs2 - VUEJS 无法在模板中使用 api 响应数据
- owl - 如何使用来自特定 ConceptScheme 的 SKOS 概念约束 OWL ObjectProperty 值?
- excel - 如何最小化我的代码的运行时间?
- amazon-web-services - 如何对 cloudwatch 代理和 collectd 进行 dockerize 以收集指标?
- c# - 有人知道 xml-rpc.net 发生了什么吗?