Docker 使用 -e 运行不起作用。无法在运行命令中传递 spring.profiles.active

ANP*_*ANP 5 docker spring-boot spring-boot-docker-plugin

我的 docker 文件面临一个问题。图像构建成功,但在运行时出现错误,因为我在运行命令中设置的活动配置文件没有反映。

# Get java
FROM openjdk:8-jdk-alpine


VOLUME /tmp
ARG JAR
COPY ${JAR} app.jar

EXPOSE 8080
ENV severn_js_key=1234qasw

ENTRYPOINT ["java", "-jar", "app.jar"]
Run Code Online (Sandbox Code Playgroud)

我的运行命令是这样的

sudo docker run -e SPRING_PROFILES_ACTIVE=dev  -p 8088:80  -t tws-apps/service:1.0.0-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)

执行此语句时,我在服务器日志中收到空指针异常

String environment = System.getProperty("spring.profiles.active");
switch (environment) {
Run Code Online (Sandbox Code Playgroud)

请帮忙

b0g*_*usb 1

您将其SPRING_PROFILES_ACTIVE作为系统环境变量传递给 docker 容器。您应该将其作为Java 系统属性传递。解决方案是通过覆盖入口点来运行容器:

docker run --entrypoint java -t tws-apps/service:1.0.0-SNAPSHOT -Dspring.profiles.active=dev -jar app.jar
Run Code Online (Sandbox Code Playgroud)

或者,在您Dockerfile更改入口点。它可能是一个读取SPRING_PROFILES_ACTIVE环境变量然后使用 var 作为系统属性运行 Java 的脚本。

希望能帮助到你。