使用 Docker 将环境变量传递给 Spring Boot 应用程序不起作用

use*_*870 5 docker spring-boot

我正在尝试将环境变量传递给 Spring Boot 应用程序,但它似乎不起作用。

Docker 运行命令:

docker run my-image -e TEST_VAR='testing'
Run Code Online (Sandbox Code Playgroud)

Spring Boot main():

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(MyApplication.class, args);

        //Read environmental variables:
        Map<String, String> env = System.getenv();
        System.out.println("TEST_VAR: "+env.get("TEST_VAR"));


    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

TEST_VAR: null
Run Code Online (Sandbox Code Playgroud)

如何使用 Docker 成功传递环境变量?

Von*_*onC 5

docker run 确实提到

此外,操作员可以通过使用一个或多个 -e 标志来设置容器中的任何环境变量,甚至可以覆盖上面提到的那些,或者已经由开发人员使用 Dockerfile ENV 定义的那些。

如果操作符命名环境变量而不指定值,则命名变量的当前值将传播到容器的环境中:

但例子是:

docker run -e "deep=purple" -e today --rm alpine env
Run Code Online (Sandbox Code Playgroud)

因此,请检查您的引号和参数顺序(正如BMitch 所观察到的,在图像名称之后完成的任何参数都将作为CMD您的图像 ENTRYPOINT 命令传递,这不是您想要的):

docker run -e "TEST_VAR=testing" my-image 
Run Code Online (Sandbox Code Playgroud)