我有一个带有两个配置文件 dev 和 prod 的 spring boot 应用程序,我的 docker 文件是:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-Dspring.profiles.active=dev","-cp","app:app/lib/*","com.my.Application"]
请不要这样,在构建图像时,我将入口点指定为命令行参数。
这是我使用此映像的 kubernetes 部署的容器部分:
containers:
- name: myapp
image: myregistry.azurecr.io/myapp:0.1.7
imagePullPolicy: "Always"
ports:
- containerPort: 8080
name: myapp
readinessProbe:
httpGet:
path: /actuator/health
port: 8080
timeoutSeconds: 3
periodSeconds: 20
failureThreshold: 3
它可以工作,但有一个重大缺陷:我现在如何在不重建映像的情况下切换到生产环境?
最好的办法是在我的 docker 文件中删除该 ENTRYPOINT 并在我的 kubernetes yml 中提供此配置,以便我始终可以使用相同的图像......这可能吗?
编辑:我看到有一个生命周期指令,但请注意我有一个基于弹簧靴执行器的就绪探针。如果我使用这个结构,它总是会失败。