使用 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