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"  
...
相关文章
相关标签/搜索