核心内容摘要
Cosmos-Reason1-7B惊艳案例:输入‘证明√2是无理数’,输出欧几里得风格分步归谬法
文章目录
方式一docker run -e 直接传环境变量
方式二使用 .env 文件 docker run --env-file
方式三在 docker-compose.yml 中用 environment
小结在容器化部署 Spring Boot 应用时我们常常希望✔不在源码中硬编码敏感配置如数据库地址/密码✔在不同环境开发/测试/生产灵活覆盖配置✔部署命令简单、可一键执行Spring Boot 支持通过环境变量覆盖配置文件的属性例如spring:datasource:url:jdbc:postgresql://${DB_HOST:
192.
168.
1
140}:${DB_PORT:15432}/tcs?currentSchematcs,wvp273username:${DB_USER:postgres}password:${DB_PASSWORD:sky20150907}这种写法代表如果系统环境变量存在则优先使用否则使用默认值。
Spring Boot 在运行时会把这些占位符替换成实际的环境变量值。
下面我们详细介绍三种常见注入环境变量的方式。
方式一docker run -e 直接传环境变量最常见的方式是使用docker run -e或--env把变量直接传给容器dockerrun -d\-p18010:18010\-eSERVER_PORT18010\-eDB_HOST
192.
168.
1
140\-eDB_PORT15432\-eDB_USERpostgres\-eDB_PASSWORDmySecretPwd\your-image:latest✔-e VARvalue是 Docker 的标准写法用来给容器设置环境变量✔ Spring Boot 启动时会读取这些值覆盖application.yml中的默认配置适用场景运行单个容器或调试时临时覆盖变量没有环境文件只想快速启动⚠️ 不过这种方式将变量直接暴露在命令历史中不太适合敏感信息长期管理。
方式二使用 .env 文件 docker run --env-file为了更安全、更整洁地管理环境变量可以将变量写进一个文件 创建.env文件在项目根目录创建一个# .env 配置示例不要提交到版本控制 SERVER_PORT18010 DB_HOST
192.
168.
1
140 DB_PORT15432 DB_USERpostgres DB_PASSWORDmySecretPwd然后通过--env-file引入dockerrun -d\--env-file .env\-p18010:18010\your-image:latest--env-file会把文件里的每个变量注入到容器环境中等同于写多个-e。
优点变量集中管理命令更简洁更容易与 CI/CD如 GitHub Actions / GitLab CI集成避免把密码写在命令行里 通常建议把.env加入.gitignore避免敏感信息泄露。
方式三在 docker-compose.yml 中用 environment如果你用 Docker Compose则可以在docker-compose.yml中直接定义环境变量version:
8services:app:image:your-image:latestports:-18010:18010environment:-SERVER_PORT18010-DB_HOST
192.
168.
1
140-DB_PORT15432-DB_USERpostgres-DB_PASSWORDmySecretPwd运行dockercompose up -d✔ 这种方式将变量写在 Compose 文件里结构化保存✔ Spring Boot 启动时同样能读取到这些环境变量✔ 与服务定义一起维护更适合多个环境
小结方式适合场景优点缺点docker run -e VARvalue临时覆盖或单容器测试快速、直观变量写在命令行不利于管理docker run --env-file .env多变量管理、敏感信息保护文件式管理、易维护需单独维护文件docker-compose.yml environment多容器部署、结构化管理配置集中、可与服务联动变量长会拉长 Compose 文件 Spring Boot 配置如何读取环境变量
总结在 Spring Boot 的application.yml中只要使用如下语法spring:datasource:username:${DB_USER:defaultUser}password:${DB_PASSWORD:defaultPwd}Spring Boot 在运行时会优先从容器环境变量读取对应名称如果未设置该变量则回退使用指定的默认值这种机制实现了配置与代码分离、不同环境灵活覆盖的目的。
最佳实践建议✔ 部署生产环境时尽量不要直接在版本控制写敏感信息✔ 对于更高安全性考虑用Docker Secrets / Kubernetes Secrets替代普通环境变量✔ Compose 配合.envenvironment使用更规范、更易维护