Разбор переменных окружения в точке входа dockerfile для mvn spring-boot: run - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь запустить приложение весенней загрузки в docker, но когда я пытаюсь проанализировать переменные окружения в точке входа dockerfile, я получаю следующую ошибку:

Невозможно открыть JDB C Соединение для выполнения DDL

Мой dockerfile выглядит следующим образом

FROM maven:3.6-jdk-8

COPY . /usr/src/api
WORKDIR /usr/src/api

ENV SPRING_URL ${SPRING_DATASOURCE_URL}
ENV SPRING_USERNAME ${SPRING_DATASOURCE_USERNAME}
ENV SPRING_PASSWORD ${SPRING_DATASOURCE_PASSWORD}

RUN mvn install:install-file \
     -Dfile=.mvn/wrapper/maven-wrapper.jar \
     -Dversion=1.0 \
     -Dpackaging=jar \
     -DgeneratePom=true \
     -DSPRING_DATASOURCE_URL=SPRING_URL \
     -DSPRING_DATASOURCE_USERNAME=SPRING_USERNAME \
     -DSPRING_DATASOURCE_PASSWORD=SPRING_PASSWORD

ENTRYPOINT mvn -DSPRING_DATASOURCE_URL=SPRING_URL -DSPRING_DATASOURCE_USERNAME=SPRING_USERNAME -DSPRING_DATASOURCE_PASSWORD=SPRING_PASSWORD spring-boot:run

Переменные env поступают из файла doker-compose. Я использую docker-compose build, который успешно компилируется (включая проходящие тесты) и docker-compose -p 0.0.0.0:8080:8080 run api, который завершается с ошибкой, указанной выше.

My docker -compose.yml выглядит следующим образом:

version: '3'
services:
  api:
    image: test/api:1.0
    build:
      context: .
      dockerfile: Dockerfile
    environment:
        - SPRING_DATASOURCE_URL=${SPRING_DATASOURCE_URL}
        - SPRING_DATASOURCE_USERNAME=${SPRING_DATASOURCE_USERNAME}
        - SPRING_DATASOURCE_PASSWORD=${SPRING_DATASOURCE_PASSWORD}

Проблема в том, как я анализирую переменные env до точки входа. При установке mvn, кажется, работает нормально, но не при весенней загрузке: запустить. Является ли форма оболочки точки входа правильной командой и как я должен анализировать переменные?

1 Ответ

0 голосов
/ 18 марта 2020

Я следовал этому https://spring.io/blog/2018/11/08/spring-boot-in-a-container, чтобы докернизировать приложение с моим application.properties, похожим на это:

spring.datasource.url=${SPRING_DATASOURCE_URL}
spring.datasource.username = ${SPRING_DATASOURCE_USERNAME}
spring.datasource.password = ${SPRING_DATASOURCE_PASSWORD}

Тогда мой docker -compose.yml остался прежним и Мой Dockerfile выглядит следующим образом:

FROM openjdk:8-jdk-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring

ARG DEPENDENCY=target/dependency
ARG SPRING_DATASOURCE_URL
ARG SPRING_DATASOURCE_USERNAME
ARG SPRING_DATASOURCE_PASSWORD

ENV SPRING_DATASOURCE_URL ${SPRING_DATASOURCE_URL}
ENV SPRING_DATASOURCE_USERNAME ${SPRING_DATASOURCE_USERNAME}
ENV SPRING_DATASOURCE_PASSWORD ${SPRING_DATASOURCE_PASSWORD}

COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app

EXPOSE 8080

ENTRYPOINT ["java","- cp","app:app/lib/*","test.ApiApplication"]

Я нашел эту страницу очень полезной в объясненных ARG и ENV в dockerfile https://vsupalov.com/docker-arg-env-variable-guide/

Также, чтобы сделать мой оригинальный подход к докеризации для работы мои application.properties и docker -compose остались прежними, а мой dockerfile был таким:

FROM maven:3.6-jdk-8

COPY . /usr/src/api
WORKDIR /usr/src/api
ARG SPRING_DATASOURCE_URL
ARG SPRING_DATASOURCE_USERNAME
ARG SPRING_DATASOURCE_PASSWORD

RUN mvn install:install-file \
     -Dfile=.mvn/wrapper/maven-wrapper.jar \
     -DgroupId=test.ApiApplication \
     -DartifactId=api \
     -Dversion=1.0 \
     -Dpackaging=jar \
     -DgeneratePom=true \
     -DSPRING_DATASOURCE_URL=${SPRING_DATASOURCE_URL} \
     -DSPRING_DATASOURCE_USERNAME=${SPRING_DATASOURCE_USERNAME} \
     -DSPRING_DATASOURCE_PASSWORD=${SPRING_DATASOURCE_PASSWORD}

ENV SPRING_DATASOURCE_URL ${SPRING_DATASOURCE_URL}
ENV SPRING_DATASOURCE_USERNAME ${SPRING_DATASOURCE_USERNAME}
ENV SPRING_DATASOURCE_PASSWORD ${SPRING_DATASOURCE_PASSWORD}

EXPOSE 8080

ENTRYPOINT mvn -DSPRING_DATASOURCE_URL=${SPRING_DATASOURCE_URL} - DSPRING_DATASOURCE_USERNAME=${SPRING_DATASOURCE_USERNAME} - DSPRING_DATASOURCE_PASSWORD=${SPRING_DATASOURCE_PASSWORD} spring-boot:run
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...