【问题标题】:How can I start spring boot application in docker with profile?如何使用配置文件在 docker 中启动 Spring Boot 应用程序?
【发布时间】:2019-09-09 03:27:54
【问题描述】:

我有一个简单的 spring-boot 项目:

-resources
 -application.yaml
 -application-test.yaml

我有这个Dockerfile

FROM openjdk:8-jdk-alpine
EXPOSE 8080
ADD micro-boot.jar micro-boot.jar
ENTRYPOINT ["java","-Dspring.profiles.active=test" "-jar","/micro-boot.jar"]

1) 我构建镜像 - C:\micro-boot>docker build -f Dockerfile -t micro-boot .

2) 显示所有图片 - C:\micro-boot>docker image ls -a

micro-boot   latest  ccc9a75ebc24  4 seconds ago 112MB

3) 尝试启动C:\micro-boot>docker image ls -a

我得到一个错误:

/bin/sh: [java,-Dspring.profiles.active=test: not found

【问题讨论】:

  • 您应该通过 docker run 命令或 docker-compose 传递 spring.profiles.active ,这将增加灵活性。例如:docker run -d -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=test"

标签: java spring spring-boot docker dockerfile


【解决方案1】:

我们有 3 种方式:

1.在 Dockerfile 中传递 Spring Profile

FROM openjdk:8-jre-alpine
...
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=test","-jar","app.jar"]

2。在 Docker 运行中传递 Spring Profile

docker run -d -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=test" --name my-app:latest

3.在 DockerCompose 中传递 Spring Profile

version: "3.5"
services:
  my-app:
     image: my-app:latest
     ports:
       - "8080:8080" 
     environment:
       - "SPRING_PROFILES_ACTIVE=test"

【讨论】:

  • 想象你有 4 个环境 dev sys staging prod,使用 kubernetes 并动态部署容器,你不能像显示的“docker run”那样有不同的 cmd,这样你必须有一个要在 docker 文件中使用的集群 env 的 env var,例如 $PROFILE
  • @TiagoMedici 你说得对,但它超出了问题的范围。我将更新 Kubernetes env 的答案。感谢您的关注
  • "2. 在 Docker 运行中传递 Spring Profile" 摇滚!
【解决方案2】:

这里有错别字

ENTRYPOINT ["java","-Dspring.profiles.active=test" comma missing here "-jar","/micro-boot.jar"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 2021-07-21
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    相关资源
    最近更新 更多