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

标签 spring-boot docker docker-compose

docker-compose.yml:

services:
  server:
    image: server:latest
    environment:
    - SPRING_PROFILES_ACTIVE=dev
    ports:
    - 8080:8080
    - 18080:18080

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

入口点.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" "$@"

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

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

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

编辑:
server.jar 文件是使用 assemble 构建的的 gradle。

最佳答案

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

services:
  server:
    image: server:latest
    environment:
    - SPRING_PROFILES_ACTIVE=dev
    ports:
    - 8080:8080
    - 18080:18080
    command: --spring.profiles.active=prod

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

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

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

即使你想使用你正在使用的环境变量,然后使用
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" "$@"

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

关于spring-boot - 基于 docker 环境变量切换 spring 配置文件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54241346/

相关文章:

docker - 如何在 Docker 容器中保留 go 1.11 模块?

docker - 如何更改 docker 网桥地址空间(子网)?

docker - 使用 nginx 的 docker certbot 容器检索证书时的用户权限问题

java - 在 Spring 中动态添加 Google map (MVC 或 Boot)

maven - Spring Boot 排除属性文件并在执行时将其提供给 jar

macos - 如何使用 ffmpeg 从 docker 容器访问内置网络摄像头?

docker - 在 docker inspect 中, "StartedAt"和 "FinishedAt"是什么意思?

docker - 有没有一种方法可以指定使用撰写文件运行服务的持续时间

java - Spring Data REST - POST 方法未调用 RepositoryEventHandler 方法?

java - Spring Boot - 数据源运行时错误