postgresql - 我的 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 进程没有运行。
这是使用CMD
and启动应用程序后运行的容器ENTRYPOINT
:
我的问题:如何在 PostgreSQL 派生映像中运行 java 应用程序?
编辑请避免做我正在做的事情(在容器中放置多个服务),因为您会破坏一些微服务的良好实践。我需要这样做,因为我必须使用一个非常小的服务来控制其他服务的某些文件系统方面。是一个非常特殊的案例。
解决方案
mdillon/postgis
图像是基于图像的postgres:alpine
。此图像使用 anentrypoint
和 acmd
在容器启动时启动 postrgresql。看这里。因此,在您的情况下,您删除了 cmd 和 postrgresql 入口点。
如果要启动 java 和 postgresql,可以在命令或入口点的自己的 bash 脚本中添加这两个命令。
顺便说一句,我建议您使用docker-compose在两个不同的容器中更好、更安全、更轻松地启动 postgresql 和 java。
推荐阅读
- encryption - 最近开源的 Apple 的 CryptoKit 库作为 swift-crypto 会有什么影响?
- linux - Linux内核SPI驱动在写入前不启用CS
- html - 更改网格元素 html/css 的特定高度
- angular - 在 Angular 8 中使用 ng2-img-max 调整图像大小时出错
- c++ - 在 WriteConsole 之后 Win32 API 控制台光标不移动
- html - 如何将div定位在另一个div下面
- c# - 我们可以在 .NET Core (3.1) 项目中使用 Win2D 吗?
- swift - SwiftUI:初始列表元素的位置错误
- r - R如何进行分配和引用从字符串转换的变量名
- python - 如何迭代行并删除列匹配的所有其他行?