在 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 &lt;your app.jar&gt; 我必须放入 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?

在 docker-compose 中访问 GRPC 服务

如何在 docker-compose 中访问 Postgres 数据库

docker-compose安装ELK

django 无法访问 mysql docker compose