java - 在 docker compose 文件中访问 Spring boot 应用程序属性
问题描述
我有两个应用程序,一个应用程序用于 API,另一个应用程序是 UI(UI 依赖于 API_portal),我没有将 db 容器化。
docker_compose 文件
version: "3"
services:
ui_application:
image: ui_app
build:
context: ./ui_app
dockerfile: Dockerfile
ports:
- "8080:8080"
depends_on:
- admin_portal_app
admin_portal_app:
image: admin_portal
build:
context: ./admin_app
dockerfile: Dockerfile
volumes:
- ./logs:/logs
Dockerfile FROM openjdk:8-jdk-alpine ADD target/ .war admin_portal.war ENTRYPOINT ["Java", "-jar", "admin_portal.war"] Dockerfile FROM openjdk:8-jdk-alpine ADD target/ .war ui_app。战争入口点 [“Java”、“-jar”、“ui_app.war”]
application.properties(Admin Portal API)
spring.datasource.url = jdbc:mysql://mysql-standalone:3306/test
spring.datasource.username = xxx
spring.datasource.password = xxx
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
server.port=8090
logging.file=./logs/adminportal.log
我想在 docker-compose 文件中外部化所有应用程序属性。请指导我
解决方案
如果我正确理解要求,您想通过 docker-compose 注入 spring 属性。
您可以利用 env 变量来实现相同的目的。请执行下列操作 :
- 创建一个启动脚本并将其打包到映像中。
在这个脚本中,像这样输入你的 java start 命令
java \ -Xmx$XMX_VALUE \ -XX:MaxMetaspaceSize=$MAX_METASPACE_SIZE \ -XX:+HeapDumpOnOutOfMemoryError \ -XX:HeapDumpPath=$HEAP_DUMP_PATH \ -Dspring.datasource.url=$DB_URI \ -Dspring.datasource.username=$DB_USERNAME \ -Dspring.datasource.password=$DB_PASSWORD \ -jar <your app.jar>
最后通过 docker compose 注入所需的变量:
admin_portal_app: image: admin_portal build: context: ./admin_app dockerfile: Dockerfile volumes: - ./logs:/logs environment: - DB_URI=<uri> - DB_USERNAME=<username> - DB_PASSWORD=<password>
推荐阅读
- unity3d - 使用瞳孔实验室 hmd 包创建热图
- typo3 - TYPO3:使用 VHS 将文件名拆分为不同的部分
- c# - 合并两个数据集时如何删除空列?
- node.js - 从 `run-rs` 关闭后丢失数据库数据
- android - Android 上的 Nativescript java.lang.UnsatisfiedLinkError 仅发布
- r - 在 PostgreSQL 中使用 r sf::st_write 到非公共模式
- mysql - 具有当前月份条件的 Null 条件
- ruby-on-rails - 对象或属性必须存在 - Rails 5.2.2
- postgresql - 如何在单个表中满足每个条件只选择一个结果(无连接)?
- google-cloud-dataflow - 数据流:动态工作再平衡与融合