在使用Spring Boot快速搭建基於Docker的微服務時,碰到了關於spring.profiles.active的問題。
具體能夠參見我在stackoverflow的提問。
https://stackoverflow.com/que...java
經過解決這個問題的過程,以爲有必要梳理一下在Docker容器中啓用Spring Profile的方式。
恰好看到一篇比較好的文章,翻譯了其中的大部份內容。spring
======================= 以下爲翻譯內容 =============================docker
一般在命令行中咱們能夠使用「java -jar」 運行 Spring Boot應用。
而Profiles信息能夠做爲額外參數傳遞,好比「-Dspring.profiles.active=dev」shell
java -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=dev -jar rest-api.jar
類似的,咱們能夠在Dockerfile中將Profile的信息做爲參數傳遞進去,例如:api
FROM java:8 ADD target/my-api.jar rest-api.jar RUN bash -c 'touch /user-service.jar' ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=dev","-jar","/rest-api.jar"]
須要注意最後的ENTRYPOINT一行,在這行中咱們傳遞java命令以執行jar文件,全部須要的參數和值以逗號方式分隔傳遞。
「-Dspring.profiles.active=dev」 是咱們定義dev profile的地方,咱們能夠替換dev爲任何須要的名字。bash
能夠將spring profile做爲環境變量傳遞給docker run命令,使用 -e 標記。
例如 -e 「SPRING_PROFILES_ACTIVE=dev」會將dev profile傳遞給Docker容器dom
docker run -d -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=dev" --name rest-api dockerImage:latest
若是基於DockerSwarm,或使用docker-compose.yml文件部署Docker鏡像,Spring Profile能夠經過docker-compose.yml文件的 environment 標籤傳遞。
例如:微服務
... version: "3" services: rest-api: image: rest-api:0.0.1 ports: - "8080:8080" environment: - "SPRING_PROFILES_ACTIVE=dev" ...