来自 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中设置环境变量。
我尝试对简单的 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中设置环境变量。