使用 Docker Compose 覆盖 Spring 个活动配置文件
Override Spring active profiles with Docker Compose
我有一张 docker 图片,其中包含以下 Dockerfile
内容:
FROM openjdk:8
ENV MYHOME /home/docker
ARG JAR_FILE
ENV JAR ${JAR_FILE}
COPY $JAR_FILE ${MYHOME}/$JAR_FILE
WORKDIR ${MYHOME}
ENTRYPOINT ["sh", "-c", "java -jar ${MYHOME}/${JAR} --spring.profiles.active=docker,foo"]
当我尝试将此 docker 图像与其他图像一起包含在 docker 合成文件中时,我想覆盖 Spring 个活动配置文件。
我尝试使用以下 docker-compose.yml
内容:
...
my_image:
image: my_image
environment:
SPRING_PROFILES_ACTIVE: 'docker,bar'
...
但是当运行 docker 组合上述配置并查看容器日志时,我发现活动配置文件是:
...
The following profiles are active: docker,foo
...
就我而言,如何使用 docker compose 设置 docker,bar 配置文件?
正如@daniu 在评论中所说,--spring.profiles.active
command-line 选项优先于 SPRING_PROFILES_ACTIVE
环境变量。 Spring 引导文档中的 [外部化配置] 中描述了实际的优先级列表。
另一方面,docker run -e
选项将优先于映像中设置的环境变量。因此,如果您在图像中设置 ENV SPRING_PROFILES_ACTIVE=...
,docker run -e
选项将按您预期的那样工作;不要在您的应用程序启动中包含 command-line 选项。
ENV SPRING_PROFILES_ACTIVE=docker,foo
CMD ["java", "-jar", "/app/myapp.jar"] # without --spring.profiles.active option
我有一张 docker 图片,其中包含以下 Dockerfile
内容:
FROM openjdk:8
ENV MYHOME /home/docker
ARG JAR_FILE
ENV JAR ${JAR_FILE}
COPY $JAR_FILE ${MYHOME}/$JAR_FILE
WORKDIR ${MYHOME}
ENTRYPOINT ["sh", "-c", "java -jar ${MYHOME}/${JAR} --spring.profiles.active=docker,foo"]
当我尝试将此 docker 图像与其他图像一起包含在 docker 合成文件中时,我想覆盖 Spring 个活动配置文件。
我尝试使用以下 docker-compose.yml
内容:
...
my_image:
image: my_image
environment:
SPRING_PROFILES_ACTIVE: 'docker,bar'
...
但是当运行 docker 组合上述配置并查看容器日志时,我发现活动配置文件是:
...
The following profiles are active: docker,foo
...
就我而言,如何使用 docker compose 设置 docker,bar 配置文件?
正如@daniu 在评论中所说,--spring.profiles.active
command-line 选项优先于 SPRING_PROFILES_ACTIVE
环境变量。 Spring 引导文档中的 [外部化配置] 中描述了实际的优先级列表。
另一方面,docker run -e
选项将优先于映像中设置的环境变量。因此,如果您在图像中设置 ENV SPRING_PROFILES_ACTIVE=...
,docker run -e
选项将按您预期的那样工作;不要在您的应用程序启动中包含 command-line 选项。
ENV SPRING_PROFILES_ACTIVE=docker,foo
CMD ["java", "-jar", "/app/myapp.jar"] # without --spring.profiles.active option