繁体   English   中英

在内部进程崩溃时重新启动Docker容器

[英]Restart Docker container on inner process crash

编辑

答案就是将容器设置为在崩溃时重新启动。 在开发中,我正在使用nodemon来阻止进程在崩溃时退出 - 所以我假设进程崩溃没有导致容器退出。 我的错。 事实上,进程崩溃会导致容器在使用node而不是nodemon时退出。

{
  "scripts": {
    "development:service": "nodemon ./service/server.js",
    "production:service": "node ./service/server.js"
  }
}

原始问题

当容器的进程崩溃时,如何重新启动docker容器?

最好的方法是为容器设置--autorestart ON_FAILURE ,然后在内部进程崩溃时使容器崩溃吗? 如果是这样,当其中一个进程崩溃时,如何强制容器崩溃?

我正在使用图像node:10.15.3

有用的链接: 如果容器本身崩溃,如何重新启动容器

Dockerfile

FROM node:10.15.3 

ENV NODE_ENV development

# Create application directory.
RUN mkdir -p /src
WORKDIR /src

# Install app dependencies and build.
ADD . /src
RUN yarn install --force

RUN ["chmod", "+x", "./run.sh"]
CMD [ "./run.sh" ]

流程(简化)

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
user        13  0.0  0.1  17952  2840 ?        S    15:09   0:00 bash ./install.sh
user        72  0.5  3.2 889668 66728 ?        Sl   15:09   0:00 /usr/local/bin/node /opt/yarn-v1.13.0/bin/yarn.js start 
user        97  2.4  3.2 919992 65748 ?        Sl   15:09   0:01 /usr/local/bin/node ./service/server.js

您可以将--restart标志用于docker run命令https://docs.docker.com/engine/reference/commandline/run/#restart-policies---restart

示例: docker run --restart=on-failure my-image-name

或者,如果您正在使用docker-compose,那么您将restart: on-failure https://docs.docker.com/compose/compose-file/#restart

当你在一个容器中运行多个服务时,你非常非常确定你想要这个(最好的做法是在一个容器中运行一个进程),你可能需要一个进程管理器(例如systemd )来重启任何崩溃的进程内部,或者如果任何受监督的进程崩溃则崩溃。

还有一些其他更轻量级的方法来实现这一点,比如包装器bash脚本。

这一切都在这里描述: https//docs.docker.com/config/containers/multi-service_container/

使用Dockerfile更新问题后编辑:

最简单的方法可能是确保run.sh崩溃,如果它的任何子进程崩溃。 然后,容器会崩溃,如果您使用可选重新启动--restart=on-failuredocker run

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM