DEV Community

YYT-0901
YYT-0901

Posted on

Docker Compose 配置 JAVA 变量

  1. ## 直接使用environment
   services:
     java-app:
       image: my-java-app:latest
       ports:
         - "8080:8080"
       environment:
         SPRING_PROFILES_ACTIVE: prod
         SERVER_PORT: 8080
         DB_HOST: mysql
         DB_PORT: 3306
         DB_NAME: mydb
         DB_USERNAME: root
         DB_PASSWORD: "123456"
Enter fullscreen mode Exit fullscreen mode
   server:
     port: ${SERVER_PORT:8080}

   spring:
     profiles:
       active: ${SPRING_PROFILES_ACTIVE:dev}

     datasource:
       url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:test}
       username: ${DB_USERNAME:root}
       password: ${DB_PASSWORD:}
Enter fullscreen mode Exit fullscreen mode
  1. ## 使用.env文件

目录结构

   project/
   ├── docker-compose.yml
   ├── .env
   ├── Dockerfile
   └── app.jar
Enter fullscreen mode Exit fullscreen mode
   APP_PORT=8080
   DB_HOST=mysql
   DB_PORT=3306
   DB_NAME=mydb
   DB_USERNAME=root
   DB_PASSWORD=123456
   SPRING_PROFILE=prod
Enter fullscreen mode Exit fullscreen mode
   services:
     java-app:
       image: my-java-app:latest
       ports:
         - "${APP_PORT}:8080"
       environment:
         SPRING_PROFILES_ACTIVE: ${SPRING_PROFILE:-dev}
         DB_HOST: ${DB_HOST}
         DB_PORT: ${DB_PORT}
         DB_NAME: ${DB_NAME}
         DB_USERNAME: ${DB_USERNAME}
         DB_PASSWORD: ${DB_PASSWORD}
Enter fullscreen mode Exit fullscreen mode
   spring:
     datasource:
       url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:test}
       username: ${DB_USERNAME:root}
       password: ${DB_PASSWORD:}
Enter fullscreen mode Exit fullscreen mode
  1. ## 使用 env_file

参考2. 的 .env 和 application.yml

   services:
     java-app:
       image: my-java-app:latest
       ports:
         - "8080:8080"
       env_file:
         - .env
Enter fullscreen mode Exit fullscreen mode

env_file 与 environment 同时使用时,同名变量通常以 environment 为准。

  1. ## 直接覆盖 Spring Boot 配置项
   spring:
     datasource:
       url: jdbc:mysql://localhost:3306/test
       username: root
       password: root
Enter fullscreen mode Exit fullscreen mode
   services:
     java-app:
       image: my-java-app:latest
       environment:
         SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/prod
         SPRING_DATASOURCE_USERNAME: admin
         SPRING_DATASOURCE_PASSWORD: "123456"
Enter fullscreen mode Exit fullscreen mode

Spring Boot 会使用这些环境变量覆盖 application.yml 中对应的配置。

  1. ## 直接挂载 application.yml
   deploy/
   ├── docker-compose.yml
   └── config/
       ├── application-dev.yml
       └── application-prod.yml
Enter fullscreen mode Exit fullscreen mode
   services:
     java-app:
       image: my-java-app:latest
       ports:
         - "8080:8080"
       volumes:
         - ./config/application-prod.yml:/app/config/application.yml:ro
       environment:
         SPRING_CONFIG_ADDITIONAL_LOCATION: file:/app/config/
Enter fullscreen mode Exit fullscreen mode

Top comments (0)