我有两个应用程序,一个应用程序用于 API,另一个应用程序用于 UI(UI 依赖于 API_portal),我没有容器化数据库。
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 来自 openjdk:8-jdk-alpine 添加目标/.war admin_portal.war ENTRYPOINT [“Java”、“-jar”、“admin_portal.war”] Dockerfile 来自 openjdk:8-jdk-alpine 添加目标/.war ui_app.war ENTRYPOINT [“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 注入(inject) spring 属性。
您可以利用环境变量来实现相同的目的。 执行以下操作:
- 创建启动脚本并将其打包到镜像中。
在此脚本中,输入 java 启动命令,如下所示
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注入(inject)所需的变量:
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 - 在 docker compose 文件中访问 Spring boot 应用程序属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60762996/