Docker容器啓用Spring Profiles

在使用Spring Boot快速搭建基於Docker的微服務時,碰到了關於spring.profiles.active的問題。
具體能夠參見我在stackoverflow的提問。
https://stackoverflow.com/que...java

經過解決這個問題的過程,以爲有必要梳理一下在Docker容器中啓用Spring Profile的方式。
恰好看到一篇比較好的文章,翻譯了其中的大部份內容。spring

======================= 以下爲翻譯內容 =============================docker

經過Dockerfile定義Spring Profile

一般在命令行中咱們能夠使用「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

經過Docker run命令定義Spring Profile

能夠將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

經過Docker Compose定義Spring Profile

若是基於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"  
...
相關文章
相關標籤/搜索