在 docker compose 文件中访问 Spring boot 应用程序属性
Posted
技术标签:
【中文标题】在 docker compose 文件中访问 Spring boot 应用程序属性【英文标题】:Access Spring boot application properties in docker compose file 【发布时间】:2020-06-30 22:21:27 【问题描述】:我有两个应用程序,一个应用程序用于 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 添加目标/.war admin_portal.war 入口点 [“Java”、“-jar”、“admin_portal.war”] Dockerfile FROM openjdk:8-jdk-alpine 添加目标/.war ui_app.war 入口点 [“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 文件中外部化所有应用程序属性。请指导我
【问题讨论】:
【参考方案1】:如果我理解正确,你想通过 docker-compose 注入 spring 属性。
您可以利用环境变量来实现相同的目的。 执行以下操作:
-
创建启动脚本并将其打包到映像中。
在这个脚本中,像这样输入你的 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>
【讨论】:
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 文件并使用 Dockerfile FROM openjdk:8-jdk-alpine ADD target/.war admin_portal.war ENTRYPOINT [ "Java", "-jar", "admin_portal.war"] 假设我有 4 个数据源,那么我该如何添加它们
allowed.origin=8080 我如何将此属性外部化到 docker-compose 文件中
1.在包含 docker-compose.yaml 的同一文件夹中创建 .env 文件 2. 在您的 docker-compose 中使用 ALLOWED_ORGIN=8080
更新文件 使用变量:environment:
`-allowed.origin=$ALLOWED_ORIGIN` 阅读此内容更多详情:docs.docker.com/compose/environment-variables以上是关于在 docker compose 文件中访问 Spring boot 应用程序属性的主要内容,如果未能解决你的问题,请参考以下文章
在 docker-compose 期间尝试访问容器中的文件时权限被拒绝(UBUNTU 20.04)
如何在 Spark docker-compose 网络中提交 jar?