docker

时间:2018-09-05 22:30:15

标签: java docker spring-boot intellij-idea

我有一个带有gradle的springboot Java应用程序,以及application.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,但是我的环境返回null属性

@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之前遇到过麻烦,但是设法解决了这个问题。现在,它在带有标记--spring.profiles.active=development的intellij中完美运行

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

这很标准,我只是这个领域的初学者。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

好的,我已经通过将我的application.yml添加到build.gradle中的docker来对其进行修复:

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

然后我必须使用dockerfile将application.yml复制到映像

COPY application.yml application.yml

然后我将spring的配置设置为我的application.yml

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

答案 1 :(得分:0)

有两种方法可以实现

  • 在Dockerfile中传递Spring配置文件

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

     docker run -d -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=dev" --name rest-api dockerImage:latest
    
  • 在DockerCompose中传递Spring配置文件

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

我已经在detail over here中写过,您如何实现上述三种方法。