Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Docker文件环境变量替换_Java_Spring Boot_Docker_Dockerfile - Fatal编程技术网

Java Docker文件环境变量替换

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","&

我有一个例子,同一个JavaSpring启动应用程序的docker映像/容器构建在不同的服务器上(开发服务器、QA服务器、PROD服务器)。但是,在我的Dockerfile中,我有一条入口点线,如下所示:

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