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
相关产品推荐
相关产品推荐

