我们应该使用主管来保持 Docker 容器中的进程运行吗?

Ant*_*deo 2 docker

我正在使用 Docker 在容器中运行 java REST 服务。如果我在容器之外,那么我可能会使用进程管理器/主管来确保 java 服务在遇到奇怪的一次性错误时重新启动。我看到一些关于在容器内使用supervisord 的帖子,但似乎它们主要专注于运行多个服务,而不是仅仅保持一个服务的运行。

管理容器中运行的服务的常用方法是什么?我应该只在容器本身上使用一些内置的 Docker 东西,而不是尝试包含进程管理器吗?

lar*_*sks 5

对于单服务容器,您不应在 Docker 容器内使用进程管理程序。使用流程管理器可以有效地隐藏服务的运行状况,使问题更难以被发现。

如果服务失败,您应该依靠容器编排层(可能是 Docker 本身,或者 Docker Swarm 或 Kubernetes 等更高级别的工具)来重新启动容器。

对于 Docker(或 Docker Swarm),这意味着在容器上设置重启策略。

  • (多进程管理程序也倾向于吞噬其托管进程的日志,因此您需要深入研究容器的临时文件系统,而不是仅仅运行“docker log”。) (2认同)