无法访问Docker环境中的环境变量



我正在尝试dockerize我的春季启动项目,并在EC2实例中使用它。

应用程序。属性我有以下几行

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提到的在docker中启动的Spring引导应用程序无法访问环境变量链接。对我来说,调试变得复杂多了。

我想在我的spring引导应用程序中实现信息隐藏。我想使用环境变量来隐藏我对数据库的凭据。但是,我的dockerized程序没有我想要的环境变量。

如果你有其他的方法,我也很乐意听听我实现信息隐藏的方法。谢谢。

您需要在图像名称之前放置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已经知道如何将环境变量映射到系统属性。这意味着您可以从application.properties文件和java -D选项中删除这些行,只要您在环境变量名称中拼写出完整的Spring属性名称。

最新更新