You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Run与Docker Compose传递环境变量结果不同的原因是什么?

问题分析与解决

这确实是Docker CLI命令的参数顺序问题,和镜像本身无关。

核心原因

Docker Run命令的参数格式是固定的:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

其中-e(设置环境变量)属于OPTIONS范畴,必须放在镜像名称的前面。你原来的命令把-e SPRING_PROFILES_ACTIVE=dev放在了镜像名repo/app之后,Docker会把这部分当成容器启动时要执行的命令/参数,而不是用来配置容器的选项,导致Spring应用根本没读到这个环境变量,自然还是用默认的local配置文件。

正确的Docker Run命令

把-e选项移到镜像名称之前即可:

docker run -p 8080 -e SPRING_PROFILES_ACTIVE=dev repo/app

为什么Docker Compose能正常工作

Docker Compose的environment配置是专门用来传递环境变量的,它会正确把变量注入到容器中,不会出现参数顺序的问题,所以应用能正常启用dev配置文件。

内容的提问来源于stack exchange,提问作者LagSurfer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 20:22:01