有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

docker中的java SpringBoot环境为空

我有一个带有gradle的springboot java应用程序,应用程序中有一些环境变量。yml:

spring:
  profiles: development
server:
  port: 3100
database:
  connectionString: mongodb://localhost:27017

---

spring:
  profiles: production
server:
  port: 80
database:
  connectionString: prodCS

我的dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-Dspring.profiles.active=development","-jar","/app.jar"]

我试图在本地运行docker,但我的环境返回空属性

@Configuration
public class MongoUtilities {
  @Resource
  public Environment env;
  private static String mongoUri;

  @Bean
  public static PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
  }

  @Bean
  public boolean ReadConnectionString() {
    mongoUri = env.getProperty("database.connectionString");
    System.out.println("Loaded connection Uri : " + mongoUri);
    return true;
  }
}

我以前遇到过环境变量为null的问题,但成功地解决了它。它现在在intellij中完美运行,带有标志--spring.profiles.active=development

我正在使用gradlew build docker构建,并使用docker run springio/my-app启动docker

这都很标准,我只是这方面的初学者

有什么想法吗


共 (2) 个答案

  1. # 1 楼答案

    有几种方法可以做到这一点

    • Dockerfile中经过的弹簧轮廓

      ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=dev","-jar","/rest-api.jar"]
      
    • 在Docker run命令中传递Spring概要文件

       docker run -d -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=dev"  name rest-api dockerImage:latest
      
    • DockerCompose中通过弹簧的轮廓

       rest-api:
       image: rest-api:0.0.1
       ports:
         - "8080:8080" 
       environment:
         - "SPRING_PROFILES_ACTIVE=dev"
      

    我已经在detail over here中写了如何实现上述三种方法

  2. # 2 楼答案

    好的,我让经理通过添加我的应用程序来修复它。yml给正在建造的码头工人。格雷德尔:

    docker {
      dependsOn build
      name "${project.group}/${bootJar.baseName}"
      files bootJar.archivePath, 'application.yml'
      buildArgs(['JAR_FILE': "${bootJar.archiveName}"])
    }
    

    然后我不得不复印申请表。使用dockerfile将yml添加到图像

    COPY application.yml application.yml
    

    然后我将spring的配置设置到我的应用程序中。yml

    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-Dspring.config.location=application.yml", "-jar","/app.jar"]