【发布时间】:2021-01-03 11:10:08
【问题描述】:
我有一个案例,其中同一 java spring boot 应用程序的 docker 映像/容器构建在不同的服务器(DEV 服务器、QA 服务器、PROD 服务器)上。但是,在我的 Dockerfile 中,我有一个 ENTRYPOINT 行,如下所示:
ENTRYPOINT ["java","-jar","-DskipTests","-Dspring.profiles.active=development","some.jar",">some.log","2>someerror.log"]
但是当我在 QA 或 PROD 时,我需要一种方法来传递正确的“-Dspring.profiles.active=development”。
我注意到,如果我在服务器上发出这个 docker 命令(例如 QA):
docker exec <container id> env | grep V
那么我可以清楚地看到有一个环境变量定义为:
ZZ_ENVIRONMENT=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 访问权限,只有用户访问权限。
【问题讨论】:
标签: java spring-boot docker dockerfile