我有一个基于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服务器停止运行。检查我的Portainer中的Container statistics
,我可以看到postgres进程没有运行。
这是使用CMD
和ENTRYPOINT
启动应用程序之后运行的容器:
我的问题:如何在PostgreSQL衍生映像中运行Java应用程序?
编辑,请避免做我正在做的事情(在容器中放置多个服务),因为您会破坏一些微服务的良好做法。我需要这样做,因为我必须使用一个很小的服务来控制其他服务中某些文件系统方面。是一个非常特殊的情况。
答案 0 :(得分:1)
mdillon/postgis
图像基于postgres:alpine
图像。
容器启动时,此映像使用entrypoint
和cmd
启动postrgresql。参见here。因此,在您的情况下,您将擦除cmd和postrgresql入口点。
如果要启动Java和Postgresql,可以在命令或入口点的自己的bash脚本中添加两个命令。
顺便说一句,我建议您使用docker-compose更好,更安全,更轻松地在两个不同的容器中启动postgresql和java。