首页 > 解决方案 > 我的 PostgreSQL Docker 映像在添加 CMD 后停止运行

问题描述

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

刚刚在我的 Dockerfile 中添加了一些代码,以从官方 OpenJDK Dockerfile 添加 java OpenJDK 以获得相同的发行版(FROM mdillon/postgis与 OpenJDK 中的代码合并)。结果太长了,所以我抱怨这个,所以我不能在这里发帖。

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

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

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

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

这是没有我的 java 应用程序运行的容器: 在此处输入图像描述

这是使用CMDand启动应用程序后运行的容器ENTRYPOINT

在此处输入图像描述

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

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

标签: postgresqldockerdockerfile

解决方案


mdillon/postgis图像是基于图像的postgres:alpine。此图像使用 anentrypoint和 acmd在容器启动时启动 postrgresql。看这里。因此,在您的情况下,您删除了 cmd 和 postrgresql 入口点。

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

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


推荐阅读