- ## 直接使用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" 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:} - ## 使用
.env文件
目录结构
project/ ├── docker-compose.yml ├── .env ├── Dockerfile └── app.jar APP_PORT=8080 DB_HOST=mysql DB_PORT=3306 DB_NAME=mydb DB_USERNAME=root DB_PASSWORD=123456 SPRING_PROFILE=prod 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} spring: datasource: url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:test} username: ${DB_USERNAME:root} password: ${DB_PASSWORD:} - ## 使用
env_file
参考2. 的 .env 和 application.yml
services: java-app: image: my-java-app:latest ports: - "8080:8080" env_file: - .env
env_file与environment同时使用时,同名变量通常以environment为准。
- ## 直接覆盖 Spring Boot 配置项
spring: datasource: url: jdbc:mysql://localhost:3306/test username: root password: root 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" Spring Boot 会使用这些环境变量覆盖
application.yml中对应的配置。
- ## 直接挂载 application.yml
deploy/ ├── docker-compose.yml └── config/ ├── application-dev.yml └── application-prod.yml 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/