【问题标题】:My PostgreSQL Docker image stops to run afer add a CMD添加 CMD 后,我的 PostgreSQL Docker 映像停止运行
【发布时间】:2019-05-21 14:06:59
【问题描述】:

我有一个基于mdillon/postgis 的图像来服务于 PostgreSQL 服务器。

刚刚在我的 Dockerfile 中添加了一些代码,以便从官方 OpenJDK Dockerfile 为同一发行版添加 java OpenJDK(将 FROM mdillon/postgis 与 OpenJDK 中的代码合并)。结果太长而且 S.O.抱怨,所以我不能在这里发帖。

之后一切正常,我有一个带有 java 的 Postgres 服务器。我可以通过在控制台中运行 java -version 并使用我的 PGAdmin4 访问服务器来证明这一点。

当我将一些应用程序(Spring Boot)放在那里并尝试使用它运行时,我的麻烦就开始了

ENTRYPOINT ["java"]
CMD ["-jar", "/opt/lib/odisseu-1.0.war"]

我的应用程序运行良好(我可以访问它)但 Postgres 服务器停止运行。检查我的 Portainer 中的Container statistics,我可以看到 postgres 进程没有运行。

这是在没有我的 java 应用程序的情况下运行的容器:

这是使用CMDENTRYPOINT启动应用程序后运行的容器:

我的问题:如何在 PostgreSQL 派生映像中运行 java 应用程序?

编辑请避免做我正在做的事情(将多个服务放入容器中),因为您会破坏一些微服务的良好做法。我需要这样做,因为我必须使用一个非常小的服务来控制其他服务的某些文件系统方面。是一个非常特殊的案例。

【问题讨论】:

  • 是的,Do not put a microsservice and a database in same container 你会说。对于一个非常特殊的情况,我真的需要这种配置。
  • Stack Overflow 抱怨超过 30K 的问题是正确的。这可能是件好事——如果日志文件或代码那么长,则需要将其缩减为 minimal reproducible example
  • 您能否通过问题编辑概述一下为什么要将多个服务放入一个容器中?有人可能有更好的方法来解决问题。
  • @halfer 没关系。但是 Dockerfile 代码很大,如果我(不是代码编写者)以某种方式对其进行剪切,它将没有意义。关于你的第二个问题:我会做的。

标签: postgresql docker dockerfile


【解决方案1】:

mdillon/postgis 图像基于postgres:alpine 图像。 此映像使用 entrypointcmd 在容器启动时启动 postrgresql。见here。因此,在您的情况下,您删除了 cmd 和 postrgresql 入口点。

如果您想启动 java 和 postgresql,您可以在您自己的 bash 脚本中的命令或入口点中添加这两个命令。

顺便说一句,我建议你使用docker-compose 在两个不同的容器中更好、更安全、更轻松地启动 postgresql 和 java。

【讨论】:

  • 关于在两个不同的容器中启动 postgresql 和 java 我已经说过为什么我不想这样做。我将检查原始基础容器以了解如何启动这两个服务。谢谢。
猜你喜欢
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 2014-12-06
  • 1970-01-01
相关资源
最近更新 更多