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
entrypoint.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 文件是使用gradle的assemble
构建的。
答案 0 :(得分:0)
.yaml文件与.properties文件的处理方式不同。
属性将查找名称为活动配置文件的文件:
application-dev.properties
application-prod.properties
...
yaml文件,但是您将所有配置文件存储在单个文件中,并以“ ---”分隔。
示例[使用您现有的docker-compose.yaml]:
application.yaml:
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter
{
@Autowired
private TokenStore tokenStore;
@Override
public void configure(ResourceServerSecurityConfigurer resources)
{
resources.tokenStore(tokenStore)
.resourceId(SecurityConstant.RESOURCE_ID);
}
@Override
public void configure(HttpSecurity http) throws Exception
{
http.formLogin().disable()
.anonymous().disable()
.authorizeRequests()
.antMatchers(Uri.DIET + "/**").authenticated()
.anyRequest()
.authenticated()
.and()
.exceptionHandling()
.accessDeniedHandler(new OAuth2AccessDeniedHandler());
}
}
答案 1 :(得分:0)
添加命令:命名空间,如下所示:
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 =产品。
并且如果要在公司的各种环境中以及针对各种环境中运行项目应用程序,则需要配置不同的kubernetes集群,然后在不同的kubernetes环境中为您的应用程序配置此设置。意味着在qa环境中运行docker映像时,qa Kubernetes集群将通过--spring.profiles.active = qa 并类似地登台和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" "$@"
在github上检查: https://github.com/vaneetkataria/MicroService_Architecture/blob/master/docker-compose.yml