Редактировать
Ответ - просто перезапустить контейнер при сбое. В процессе разработки я использую nodemon, который предотвращает выход процесса при сбое, поэтому я предположил, что сбой процесса не привел к выходу контейнера. Виноват. Сбой процесса фактически приводит к выходу контейнера при использовании node
, а не nodemon
.
{
"scripts": {
"development:service": "nodemon ./service/server.js",
"production:service": "node ./service/server.js"
}
}
Оригинальный вопрос
Как перезапустить докер-контейнер, когда процесс внутри контейнера падает?
Будет ли лучший способ установить --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