首页 > 解决方案 > 在 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 文件中外部化所有应用程序属性。请指导我

标签: javaspring-bootdockerdocker-compose

解决方案


如果我正确理解要求,您想通过 docker-compose 注入 spring 属性。

您可以利用 env 变量来实现相同的目的。请执行下列操作 :

  1. 创建一个启动脚本并将其打包到映像中。
  2. 在这个脚本中,像这样输入你的 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>

  3. 最后通过 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>


推荐阅读