来自 Docker 的环境变量未传递给 Spring

Environment variables from Docker are not passed to Spring

我尝试对简单的 java 应用程序进行 docker 化。

我的Dockerfile:

FROM adoptopenjdk/openjdk11:alpine
COPY build/libs/*.jar app.jar
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
EXPOSE 8080

在我的 bean 定义文件中,我尝试记录属性:

    beans {
        bean {
            logger.info { "System env: " + env.systemEnvironment }
            // ...
        }
    }

但是当我打电话时:

docker run 123 --env foo=bar 

这导致 foo 在 java 中不可见。

但是,如果我 运行 来自 Idea 的应用程序并直接传递环境变量,它就很有魅力。

我错过了什么吗?如何使 env 中传递的值可用于 java?

你应该试试

docker run -env foo=bar your_image:tag

在代码中,

env.getProperty("foo")

当您使用时:

docker run 123 --env foo=bar 

您实际上是将命令行参数传递给 docker 容器。

如果你想传递环境变量,你应该为 docker container run 命令使用 -e(与 --env 相同)选项:

docker run -e foo=bar image_name

参考Docker docs中设置环境变量。