docker compose环境变量替换

前言

在配置中,为了不在docker compose文件的一些配置进行硬编码,有时候会把配置外提

环境变量替换

yaml 复制代码
version: "3"
services:
    saas-auth:
        image: ${UT_IMAGE_PREFIX}/saas-auth:${UT_SAAS_LOCK_IMAGE_TAG}
        container_name: saas-auth
        environment:
            TZ: Asia/Shanghai
            LUBAN_REGISTER_PORT: 2181
            LUBAN_REGISTER_HOST: ${UT_ZOOKEEPER_HOST}
            LUBAN_SPRING_DATASOURCE_URL: jdbc:postgresql://${UT_POSTGRES_HOST}:${UT_POSTGRES_PORT}/luban
            LUBAN_SPRING_DATASOURCE_USERNAME: ${UT_POSTGRESQL_USER} 
            LUBAN_SPRING_DATASOURCE_PASSWORD: ${UT_POSTGRESQL_PASSWORD}
            USER_CENTER: http://usercenter-gateway:30000/ # usercenter
            DEVICE_PLATFORM_MYSQL_PWD: ut123456 # device basic platform
            PLATFORM_DEVICE_URL: http://utsmart-gateway:9999
            PLATFORM_LIGHT_URL: http://saas-gateway:63301/api/light
            SPRING_REDIS_HOST: ${UT_REDIS_HOST}
            SPRING_REDIS_PASSWORD: ${UT_REDIS_PASSWORD}
            SPRING_RABBITMQ_HOST: ${UT_RABBIT_HOST}
            SPRING_RABBITMQ_USERNAME: ${UT_RABBIT_USERNAME}
            SPRING_RABBITMQ_PASSWORD: ${UT_RABBIT_PASSWORD}
            MQTT_IS_ENABLED: true
            MQTT_SERVER_HOST: ${UT_EMQX_HOST}
            MQTT_SERVER_PORT: ${UT_EMQX_MQTT_PORT}
            PLATFORM_DEVICE_APPLICATIONID: 12

            ALIYUN_SMS_ACCESSKEYID: aaa
            ALIYUN_SMS_ACCESSKEYSECRET: bb
            ALIYUN_PUSH_SMS_TEMPLATE_CODE_VERIFICATION: cc

            JAVA_OPTIONS: "-Duser.language=zh -Duser.country=CN -Dfile.encoding=utf-8 -Djava.awt.headless=true --add-opens java.base/jdk.internal.loader=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-exports java.desktop/sun.font=ALL-UNNAMED -XX:+UnlockDiagnosticVMOptions -XX:NativeMemoryTracking=summary -Xmx700m"
            AUTHENTICATION_EXPIRATIONTIME: 10080
            DUBBO_PROVIDER_TIMEOUT: 60000

        deploy:
            resources:
                limits:
                    memory: 1.2G
                reservations:
                    memory: 1.2G
        ports:
            - 63302:63302
        healthcheck:
            test:
                [
                    "CMD-SHELL",
                    "curl -f http://127.0.0.1:63302/administrativeRegions/getStreet/1",
                ]
            interval: 6s
            timeout: 10s
            retries: 50
        restart: always
        depends_on:
            utsmart-zookeeper:
                condition: service_healthy
            utsmart-redis:
                condition: service_healthy
            utsmart-emqx:
                condition: service_healthy
            utsmart-postgres:
                condition: service_healthy
        volumes:
            - ${UT_BASE}/ut/logs/saas:/deployments/logs
        networks:
            - ut-network

一般会把可配置的环境变量外提${UT_POSTGRESQL_USER}

传入环境变量

${UT_POSTGRESQL_USER} 这类变量是 Docker Compose 的环境变量插值语法,Compose 会在解析 YAML 时自动替换。传参有以下几种方式,按优先级从高到低排列:

1. 同目录 .env 文件(✅ 最推荐)

docker-compose-saas-auth.yml 同级目录 下创建 .env 文件:

ini 复制代码
1# .env
2UT_POSTGRESQL_USER=saas_auth_user
3UT_POSTGRESQL_PASSWORD=your_password
4UT_POSTGRESQL_HOST=postgres-host
5UT_POSTGRESQL_PORT=5432
6UT_POSTGRESQL_DB=saas_auth_db

然后直接启动即可,Compose 自动加载,无需任何额外参数:

复制代码
docker compose -f docker-compose-saas-auth.yml up -d

⚠️ .env 文件名必须精确匹配,不支持自定义命名(除非用 --env-file)。

2. --env-file 指定外部文件

如果环境变量文件不在同目录或需要区分环境:

bash

编辑

css 复制代码
1docker compose -f docker-compose-saas-auth.yml --env-file /path/to/prod.env up -d

支持多个 --env-file,后面的覆盖前面的:

bash 复制代码
1docker compose -f docker-compose-saas-auth.yml \
2  --env-file ./common.env \
3  --env-file ./prod.env \
4  up -d

总结

docker compose环境变量替换,${UT_POSTGRESQL_USER} 这类变量是 Docker Compose 的环境变量插值语法,Compose 会在解析 YAML 时自动替换。

相关推荐
Java陈序员2 小时前
轻量运维面板!一款现代化的服务器控制面板工具!
运维·服务器·python·react.js·github
bosins2 小时前
WSL 迁移指南:如何将 Linux 环境完整复制到另一台电脑
linux·运维·服务器
IT利刃出鞘2 小时前
Docker Compose--安装WordPress--方法/示例
运维·docker·容器
武雄(小星Ai)2 小时前
飞书API上传26MB文件偶发失败:错误码9499与空响应体排坑实录
后端·api·排坑实录
徐小夕2 小时前
JitWord 4.0 万字分享:从协同工具到AI Word操作系统,聊聊3年产品创业史
前端·vue.js·后端
geovindu3 小时前
CSharp: Observer Pattern
开发语言·后端·观察者模式·设计模式·c#·.netcore·行为模式
handler014 小时前
【Linux】线程与虚拟内存的底层世界
linux·运维·服务器·c++·线程·虚拟地址空间·共享内存
Flynt4 小时前
把公司项目迁到 Spring Boot 4.0:编译通过只是开始
java·spring boot·后端
IT_陈寒4 小时前
Redis误用keys命令把生产环境搞崩了,血的教训
前端·人工智能·后端