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.yml
和 application-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/