我正在尝试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属性名称。