无法在 Docker 环境中访问环境变量
Cannot access environment variables in Docker environment
我正在尝试 docker 化我的 spring 启动项目并在 EC2 实例中使用它。
在 application.properties 我有以下几行,
spring.datasource.url=${SPRING_DATASOURCE_URL}
spring.datasource.username=${SPRING_DATASOURCE_USERNAME}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD}
我正在从我的环境中读取 SPRING_DATASOURCE_URL、SPRING_DATASOURCE_USERNAME 和 SPRING_DATASOURCE_PASSWORD。
我有以下 Dockerfile,
FROM openjdk:latest
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar", "-DSPRING_DATASOURCE_URL=${DATASOURCE_URL}", \
"-DSPRING_DATASOURCE_USERNAME=${DATASOURCE_USERNAME}", \
"-DSPRING_DATASOURCE_PASSWORD=${DATASOURCE_PASSWORD}", "/app.jar"]
EXPOSE 8080
当我尝试 运行 运行 以下命令时,
sudo docker run -p 80:8080 <image-repo> --env DATASOURCE_URL=<url> --env DATASOURCE_USERNAME=<username> --env DATASOURCE_PASSWORD=<password>
我的应用程序因不存在的环境变量而崩溃。
此外,
我试过使用 docker-compose 提到的 Spring boot app started in docker can not access environment variables link。对我来说调试变得更加复杂。
TL;DR 我想在我的 spring 启动应用程序中实现信息隐藏。我想使用环境变量来隐藏我对数据库的凭据。但是,我的 docker 化程序没有我想要的环境变量。
如果你有除此之外的任何方法,我也很乐意听听我如何实现信息隐藏。谢谢。
您需要在图像名称 之前添加 docker run --env
等选项。如果它们在图像名称之后,Docker 将它们解释为 运行 的命令;使用此处的特定设置,您会将它们视为 main()
函数的参数。
sudo docker run \
--env SPRING_DATASOURCE_URL=... \
image-name
# additional arguments here visible to main() function
我在这里拼写了 SPRING_DATASOURCE_URL
。 Spring 已经知道如何 map environment variables to system properties。这意味着您可以从 application.properties
文件和 java -D
选项中删除这些行,只要您在环境变量名称中拼出完整的 Spring 属性 名称即可。
我正在尝试 docker 化我的 spring 启动项目并在 EC2 实例中使用它。
在 application.properties 我有以下几行,
spring.datasource.url=${SPRING_DATASOURCE_URL}
spring.datasource.username=${SPRING_DATASOURCE_USERNAME}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD}
我正在从我的环境中读取 SPRING_DATASOURCE_URL、SPRING_DATASOURCE_USERNAME 和 SPRING_DATASOURCE_PASSWORD。
我有以下 Dockerfile,
FROM openjdk:latest
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar", "-DSPRING_DATASOURCE_URL=${DATASOURCE_URL}", \
"-DSPRING_DATASOURCE_USERNAME=${DATASOURCE_USERNAME}", \
"-DSPRING_DATASOURCE_PASSWORD=${DATASOURCE_PASSWORD}", "/app.jar"]
EXPOSE 8080
当我尝试 运行 运行 以下命令时,
sudo docker run -p 80:8080 <image-repo> --env DATASOURCE_URL=<url> --env DATASOURCE_USERNAME=<username> --env DATASOURCE_PASSWORD=<password>
我的应用程序因不存在的环境变量而崩溃。
此外,
我试过使用 docker-compose 提到的 Spring boot app started in docker can not access environment variables link。对我来说调试变得更加复杂。
TL;DR 我想在我的 spring 启动应用程序中实现信息隐藏。我想使用环境变量来隐藏我对数据库的凭据。但是,我的 docker 化程序没有我想要的环境变量。
如果你有除此之外的任何方法,我也很乐意听听我如何实现信息隐藏。谢谢。
您需要在图像名称 之前添加 docker run --env
等选项。如果它们在图像名称之后,Docker 将它们解释为 运行 的命令;使用此处的特定设置,您会将它们视为 main()
函数的参数。
sudo docker run \
--env SPRING_DATASOURCE_URL=... \
image-name
# additional arguments here visible to main() function
我在这里拼写了 SPRING_DATASOURCE_URL
。 Spring 已经知道如何 map environment variables to system properties。这意味着您可以从 application.properties
文件和 java -D
选项中删除这些行,只要您在环境变量名称中拼出完整的 Spring 属性 名称即可。