基于 docker 环境变量切换 spring 配置文件不起作用

Lun*_*ape 4 docker spring-boot docker-compose

docker-compose.yml:

services:
  server:
    image: server:latest
    environment:
    - SPRING_PROFILES_ACTIVE=dev
    ports:
    - 8080:8080
    - 18080:18080
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

FROM openjdk:8-jre-alpine

ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \
    SLEEP=0 \
    JAVA_OPTS="" \

RUN adduser -D -s /bin/sh server
WORKDIR /home/server

ADD entrypoint.sh entrypoint.sh
RUN chmod 755 entrypoint.sh && chown server:server entrypoint.sh
USER server

ENTRYPOINT ["./entrypoint.sh"]
# expose server ports
EXPOSE 8080 18080

ADD *.jar server.jar
Run Code Online (Sandbox Code Playgroud)

入口点.sh:

#!/bin/sh

echo "The application will start in ${SLEEP}s..." && sleep ${SLEEP}
exec java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar "${HOME}/server.jar" "$@"
Run Code Online (Sandbox Code Playgroud)

我有 3 个 application.yml: application.ymlapplication-dev.ymlapplication-prod.yml数据库地址不同。

但是当我运行时docker-compose up,服务器总是使用默认设置,即使我在docker-compose.yml 中提到活动配置文件是 dev。

我想知道如何在 docker-compose 文件中启用不同的配置文件。谢谢。

编辑:的server.jar文件是使用内置assemble的gradle产出的。

Van*_*ria 9

添加命令:命名空间,如下所示:

services:
  server:
    image: server:latest
    environment:
    - SPRING_PROFILES_ACTIVE=dev
    ports:
    - 8080:8080
    - 18080:18080
    command: --spring.profiles.active=prod
Run Code Online (Sandbox Code Playgroud)

在您的容器运行后,这将附加到您的入口点,并且 spring boot 将选取此配置文件。它将像这样执行:

Java -jar yourJar.jar --spring.profiles.active = prod。

如果你想在你公司的各种环境中运行你的项目应用程序,并且对于不同的环境,你配置了不同的 kubernetes 集群,那么在不同的 kubernetes 环境中为你的应用程序配置不同的设置。意味着在 qa 环境中运行您的 docker 镜像时,qa Kubernetes 集群将通过 --spring.profiles.active = qa 以及类似的 staging 和 Prod 集群。

即使你想使用你正在使用的环境变量,然后使用

exec java ${JAVA_OPTS}
-Dspring.profiles.active={your envronment variable name describe in docker compose} -Djava.security.egd=file:/dev/./urandom -jar "${HOME}/server.jar" "$@"
Run Code Online (Sandbox Code Playgroud)

在 github 上检查:https : //github.com/vaneetkataria/MicroService_Architecture/blob/master/docker-compose.yml