Среда SpringBoot пуста в докере - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть Java-приложение Springboot с Gradle и некоторыми переменными среды в 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 локально, но моя среда возвращает нулевые свойства

@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;
  }
}

Раньше у меня были проблемы с нулевой переменной среды, но мне удалось это исправить. Теперь он отлично работает в intellij с флагом --spring.profiles.active=development

Я строю, используя gradlew build docker, и запускаю Docker, используя docker run springio/my-app

Это все довольно стандартно, я только начинающий в этой области.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Есть несколько способов сделать это, а именно

  • Профиль проходящей пружины в Dockerfile

    ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=dev","-jar","/rest-api.jar"]
    
  • Передача профиля пружины в команде запуска Docker

     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"
    

Я подробно изложил здесь , как вы можете достичь вышеуказанных 3 подходов.

0 голосов
/ 06 сентября 2018

Хорошо, у меня есть менеджер, чтобы исправить это, добавив мой application.yml в докер в build.gradle:

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

Затем мне пришлось скопировать application.yml в образ с помощью файла dockerfile

COPY application.yml application.yml

Затем я устанавливаю конфигурацию Spring для своего application.yml

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-Dspring.config.location=application.yml", "-jar","/app.jar"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...