答案只是将容器设置为在崩溃时重新启动。在开发中,我使用的是nodemon,它可以防止进程在崩溃时退出-因此,我认为进程崩溃不会导致容器退出。我的错。实际上,进程崩溃确实导致使用node
而不是nodemon
退出容器。
{
"scripts": {
"development:service": "nodemon ./service/server.js",
"production:service": "node ./service/server.js"
}
}
内部容器崩溃时,如何重新启动Docker容器?
最好的方法是为容器设置--autorestart ON_FAILURE
,然后在内部进程崩溃时使容器崩溃吗?如果是这样,当其中一个进程崩溃时,如何强制容器崩溃?
我正在使用图片node:10.15.3
。
有用的链接:how to make a container restart if the container, itself, crashes
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
答案 0 :(得分:2)
您可以将--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
答案 1 :(得分:1)
在容器中运行多个服务时,非常非常确定要这样做(最佳实践是在单个容器中运行单个流程),则可能需要一个流程主管(例如{{1} })重新启动内部所有崩溃的进程,或者在任何受监管进程崩溃的情况下崩溃。
还有其他一些更轻量的方法可以完成此任务,例如包装bash脚本。
在此处进行了全部描述:https://docs.docker.com/config/containers/multi-service_container/
使用Dockerfile更新问题后进行编辑:
最简单的方法可能是确保mysql --user=[username] --password=[password] --database=[db name] --execute="you query goes here"
在任何子进程崩溃时崩溃。然后容器将崩溃,并且如果您在systemd
中使用run.sh
,则可以选择重新启动。