Java Docker文件环境变量替换
我有一个例子,同一个JavaSpring启动应用程序的docker映像/容器构建在不同的服务器上(开发服务器、QA服务器、PROD服务器)。但是,在我的Dockerfile中,我有一条入口点线,如下所示:Java Docker文件环境变量替换,java,spring-boot,docker,dockerfile,Java,Spring Boot,Docker,Dockerfile,我有一个例子,同一个JavaSpring启动应用程序的docker映像/容器构建在不同的服务器上(开发服务器、QA服务器、PROD服务器)。但是,在我的Dockerfile中,我有一条入口点线,如下所示: ENTRYPOINT ["java","-jar","-DskipTests","-Dspring.profiles.active=development","some.jar","&
ENTRYPOINT ["java","-jar","-DskipTests","-Dspring.profiles.active=development","some.jar",">some.log","2>someerror.log"]
但我需要一种方法来传递正确的“-Dspring.profiles.active=development”,以便在QA或PROD中使用
我注意到,如果我在服务器上发出此docker命令(例如QA):
鉴于此,我正在寻找一种方法,以便在Dockerfile中,我可以使用此信息,如果:
if ZZ_ENVIRONMENT=QA then
ENTRYPOINT ["java","-jar","-DskipTests","-Dspring.profiles.active=qa","some.jar",">some.log","2>someerror.log"]
if ZZ_ENVIRONMENT=PROD then
ENTRYPOINT ["java","-jar","-DskipTests", Dspring.profiles.active=production","some.jar",">some.log","2>someerror.log"]
else
ENTRYPOINT ["java","-jar","-DskipTests","-Dspring.profiles.active=development","some.jar",">some.log","2>someerror.log"]
这可能吗?如果是这样的话,我会很感激我能效仿的榜样。如果这是错误的方法,请建议最好的方法。请注意:我没有对服务器的sudo访问权限,只有用户访问权限。您可以在docker run命令中启动docker容器时传递环境变量 比如说
docker run --env ZZ_ENVIRONMENT=PROD --env ENV_VAR2=value2 <docker_image_name>
最好的方法是不用DockerFile中的逻辑,直接使用SPRING\u PROFILES\u活动变量或在环境文件中使用 Docker文件
ENTRYPOINT ["java","-jar","-DskipTests""some.jar",">some.log","2>someerror.log"]
码头工人赛跑
docker run -e "SPRING_PROFILES_ACTIVE=qa" -p 8080:8080 -t test-image:v1
docker run -e "SPRING_PROFILES_ACTIVE=production" -p 8080:8080 -t test-image:v1
或者,您可以像下面这样探索docker compose(更易于维护的方法)
docker-compose.yml
version: '3'
services:
spring-boot-service:
image: test-image:v1
env_file:
- spring-boot-service.env
ports:
- 8080:8080
spring-boot-service.env
SPRING_PROFILES_ACTIVE=production
ENTRYPOINT ["java","-jar","-DskipTests""some.jar",">some.log","2>someerror.log"]
docker run -e "SPRING_PROFILES_ACTIVE=qa" -p 8080:8080 -t test-image:v1
docker run -e "SPRING_PROFILES_ACTIVE=production" -p 8080:8080 -t test-image:v1
version: '3'
services:
spring-boot-service:
image: test-image:v1
env_file:
- spring-boot-service.env
ports:
- 8080:8080
SPRING_PROFILES_ACTIVE=production