【发布时间】: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 进程没有运行。
这是使用CMD和ENTRYPOINT启动应用程序后运行的容器:
我的问题:如何在 PostgreSQL 派生映像中运行 java 应用程序?
编辑请避免做我正在做的事情(将多个服务放入容器中),因为您会破坏一些微服务的良好做法。我需要这样做,因为我必须使用一个非常小的服务来控制其他服务的某些文件系统方面。是一个非常特殊的案例。
【问题讨论】:
-
是的,
Do not put a microsservice and a database in same container你会说。对于一个非常特殊的情况,我真的需要这种配置。 -
Stack Overflow 抱怨超过 30K 的问题是正确的。这可能是件好事——如果日志文件或代码那么长,则需要将其缩减为 minimal reproducible example。
-
您能否通过问题编辑概述一下为什么要将多个服务放入一个容器中?有人可能有更好的方法来解决问题。
-
@halfer 没关系。但是 Dockerfile 代码很大,如果我(不是代码编写者)以某种方式对其进行剪切,它将没有意义。关于你的第二个问题:我会做的。
标签: postgresql docker dockerfile