Подключите сервисный контейнер к контейнеру БД - PullRequest
0 голосов
/ 29 апреля 2020

Я новичок в docker и начал играть с ним в моем небольшом проекте.

Я сам докерризовал сервис со следующим Docker файлом:

ROM adoptopenjdk:11-jdk-hotspot AS DEPENDENCIES_BUILD_IMAGE
ENV APP_HOME=/usr/app/
WORKDIR $APP_HOME
COPY build.gradle settings.gradle gradlew $APP_HOME
COPY gradle $APP_HOME/gradle
RUN ./gradlew build || return 0
COPY . .
RUN ./gradlew build

FROM adoptopenjdk/openjdk11:jdk-11.0.7_10-alpine AS FINAL
ENV JAR_TEMPLATE=myapp-0.0.1-SNAPSHOT.jar
ENV ARTIFACT_NAME=myapp.jar
ENV APP_HOME=/usr/app
WORKDIR $APP_HOME
COPY --from=DEPENDENCIES_BUILD_IMAGE $APP_HOME/build/libs/$JAR_TEMPLATE .
RUN mv $JAR_TEMPLATE $ARTIFACT_NAME
EXPOSE 8080
CMD ["java", "-jar", "budget-calculator.jar"]

Примечание: я знаю, что есть проблема, которую я всегда копирую 0.0.1-SNAPSHOT, но в настоящий момент я не знаю, как ее решить.

После этого я хотел подключить свой сервис к Postgres БД с docker -создать, используя это подтверждение:

version: '3'

services:
  backend:
    build: .
    container_name: myapp
    ports:
    - "8080:8080"
    links:
      - "db"
    depends_on:
      - db
    networks:
      - backend

  db:
    restart: unless-stopped
    image: postgres:10
    container_name: myapp-db
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=myapp
    ports:
      - 5436:5436
    networks:
      - backend

networks:
  backend:

После этого я обновил мой файл application.properties, чтобы указать, что ссылка на БД находится на другом контейнере, как показано ниже:

spring.flyway.url=jdbc:postgresql://db:5436/myapp
spring.flyway.user=postgres
spring.flyway.password=secret
spring.flyway.baseline-on-migrate=true

spring.datasource.url=jdbc:postgresql://db:5436/myapp
spring.datasource.username=postgres
spring.datasource.password=secret
spring.datasource.driverClassName=org.postgresql.Driver

Теперь у меня было 2 проблемы:

  1. Хотя я предполагал, что build: . будет перестраивать мой образ каждый раз, когда я запускаю docker-compose up, если что-то изменилось на практике, я увидел что это не так.
  2. Когда бэкэнд-сервис запускает flyway (библиотека БД миграции), попробуйте подключиться к базе данных и не может разрешить соединение.

Я видел онлайн что использование - links устарело, и я должен использовать * 102 6 * но оба, похоже, не работают - что мне не хватает?

1 Ответ

0 голосов
/ 29 апреля 2020

Есть две проблемы с моими конфигурациями, первая - внутренний порт Postgres был настроен как 5436, а порт образа по умолчанию - 5432 (я обновил их обе до 5432)

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

environment: # Pass environment variables to the service
      SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/budget
      SPRING_DATASOURCE_USERNAME: postgres
      SPRING_DATASOURCE_PASSWORD: secret
      SPRING_FLYWAY_URL: jdbc:postgresql://db:5432/budget
      SPRING_FLYWAY_USER: postgres
      SPRING_FLYWAY_PASSWORD: secret

Итак, моя текущая работа Конфигурация такая:

version: '3.8'

services:
  backend:
    build: .
    container_name: app-service
    ports:
    - "8080:8080"
    depends_on:
      - db
    environment: # Pass environment variables to the service
      SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/myapp
      SPRING_DATASOURCE_USERNAME: postgres
      SPRING_DATASOURCE_PASSWORD: secret
      SPRING_FLYWAY_URL: jdbc:postgresql://db:5432/myapp
      SPRING_FLYWAY_USER: postgres
      SPRING_FLYWAY_PASSWORD: secret

  db:
    restart: unless-stopped
    image: postgres:10
    environment:
      - POSTGRES_DB=myapp
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_USER=secret
    volumes:
      - myapp_data:/var/lib/postgresql/data
    ports:
      - 5432:5432

volumes:
  myapp_data:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...