【问题标题】:Environment variables from Docker are not passed to Spring来自 Docker 的环境变量不会传递给 Spring
【发布时间】:2019-12-08 00:39:57
【问题描述】:

我尝试 dockerize 简单的 java 应用程序。

我的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?

【问题讨论】:

标签: spring-boot docker kotlin environment-variables spring-bean-dsl


【解决方案1】:

你应该试试

docker run -env foo=bar your_image:tag

在代码中,

env.getProperty("foo")

【讨论】:

    【解决方案2】:

    当你使用时:

    docker run 123 --env foo=bar 
    

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

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

    docker run -e foo=bar image_name
    

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

    【讨论】:

      猜你喜欢
      • 2018-03-24
      • 2017-01-22
      • 2020-11-07
      • 2018-09-18
      • 2019-06-02
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      相关资源
      最近更新 更多