如何在 Compose 文件中配置环境变量?
# Docker Compose 环境变量配置|最全 4 种用法(直接复制可用) Compose 配置环境变量非常简单,**支持直接写、支持外部文件、支持混合使用**,我给你整理**最常用、最安全、最规范**的写法,新手直接照抄。 --- ## 一、最常用:直接写在 docker-compose.yml 里 适合简单、少量环境变量。 ```yaml version: '3.8' services: mysql: image: mysql:8.0 # 环境变量配置 environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: mydb TZ: Asia/Shanghai ``` ### 两种写法都可以 ```yaml # 写法1(键值对,推荐) environment: KEY: VALUE # 写法2(数组) environment: - KEY=VALUE ``` --- ## 二、最安全:使用外部 .env 文件(企业标准) **密码、密钥绝对不能写在 yml 里**,必须放 `.env` 文件。 ### 1)创建文件 `.env`(和 docker-compose.yml 同目录) ```env # .env 文件 MYSQL_PASSWORD=123456 MYSQL_DB=mydb REDIS_PASS=123456 TZ=Asia/Shanghai ``` ### 2)在 compose 中引用 ```yaml services: mysql: image: mysql:8 environment: MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD} MYSQL_DATABASE: ${MYSQL_DB} ``` **自动加载**,不需要额外配置,Compose 会自动读 `.env`。 --- ## 三、指定自定义 env 文件(多环境必备) 如果你有: - `.env.dev` - `.env.prod` - `.env.test` 可以在 yml 里指定: ```yaml services: api: image: myapp env_file: - .env.dev ``` 或多个: ```yaml env_file: - .env.common - .env.prod ``` --- ## 四、运行时传入环境变量(临时覆盖) 启动时直接覆盖,优先级最高: ```bash MYSQL_PASS=654321 docker-compose up -d ``` --- # 环境变量优先级(重要!) 1. **运行时传入**(最高) 2. **docker-compose.yml 里写的 environment** 3. **env_file 指定的文件** 4. **.env 默认文件** 5. **镜像内部默认变量**(最低) --- # 最规范企业级模板(直接用) ## docker-compose.yml ```yaml version: '3.8' services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} TZ: ${TZ} volumes: - mysql-data:/var/lib/mysql restart: always redis: image: redis:alpine command: redis-server --requirepass ${REDIS_PASSWORD} environment: TZ: ${TZ} volumes: mysql-data: ``` ## .env ```env MYSQL_ROOT_PASSWORD=123456 MYSQL_DATABASE=appdb REDIS_PASSWORD=123456 TZ=Asia/Shanghai ``` --- ## 常用环境变量速查(直接复制) ### MySQL ``` MYSQL_ROOT_PASSWORD MYSQL_DATABASE MYSQL_USER MYSQL_PASSWORD TZ=Asia/Shanghai ``` ### Redis ``` REDIS_PASSWORD ``` ### Nginx / Java / Node ``` TZ=Asia/Shanghai SPRING_PROFILES_ACTIVE=prod NODE_ENV=productio





