Существует ли минимальное условие для продолжения работы контейнера? - PullRequest
0 голосов
/ 15 января 2019

Почему контейнер закрывается, когда точка входа указывает на выполнение команды в фоновом режиме?Например, если я запускаю docker run -d ubuntu bash -c "sleep 12000&", контейнер выходит.Если я запускаю docker run -d ubuntu bash -c "sleep 12000", контейнер продолжает работать.
Разве недостаточно фонового процесса, чтобы поддерживать работу контейнера?
Почему sleep, работающий в фоновом или переднем плане, влияет на это?

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Как подсказывает виноград, условие состоит в том, что PID 1 работает.

Контейнер предназначен для краткосрочной работы и специализируется на одной задаче (микросервис), которая работает как PID 1 на переднем плане. Фон, конечно, полезен для таких вещей, как ssh, но контейнер должен иметь основную работу.

Большинство служб можно запускать как на переднем, так и на заднем плане (деамонизировано)

PS. если вам нужно сохранить контейнер живым, используйте tail -f /dev/null как CMD

0 голосов
/ 15 января 2019

Простым критерием может быть следующий: если вы запускаете команду локально, и она сразу же возвращает и возвращает запрос оболочки, то если вы запустите эту команду в качестве основного процесса в контейнере, контейнер немедленно закроется.

Обычно рекомендуется, чтобы контейнер выполнял какой-то процесс, например сетевой сервер, как процесс передний план , и когда этот сервер завершает работу, контейнер завершается. В идеальном случае контейнер полностью автономен: как только вы docker run сделаете это, он сделает свое дело без какого-либо вмешательства пользователя. (В этой модели обычный контейнер Ubuntu, без установленного программного обеспечения, который не интересен. sleep s).

0 голосов
/ 15 января 2019

По словам Докера, контейнер должен работать, пока

работает основной процесс контейнера (PID 1)

В вашем случае основной процесс bash и контейнер "работают", пока этот процесс не завершится.

...