我正在嘗試 dockerize 我的 spring boot 專案并在 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 提到在 docker 中啟動的 Spring boot 應用程式無法訪問環境變數鏈接。對我來說除錯變得更加復雜。
TL;DR 我想實作隱藏在我的 Spring Boot 應用程式中的資訊。我想使用環境變數來隱藏我對資料庫的憑據。但是,我的 dockerized 程式沒有我想要的環境變數。
如果您有除此之外的任何方法,我也很樂意聽取我可以實作資訊隱藏的方式。謝謝。
uj5u.com熱心網友回復:
您需要在影像名稱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 屬性名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/464391.html
