Dockerized Spring Boot app не может подключиться к контейнеру базы данных - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть базовое c приложение Spring Boot с Gradle и Hibernate, которое выполняет вызовы к базе данных Oracle, база данных находится в контейнере docker.

Я создал Docker образ приложения весенней загрузки с плагином "com.google.cloud.tools.jib" и с помощью следующей команды:

./gradlew jibDockerBuild --image=app1

Я уже создал пользовательскую сеть (назовем ее my_network ) и я подключил контейнер базы данных к вышеупомянутой сети.

У меня есть docker -файл, в котором я даже указываю образ как службу и использую my_network когда я запускаю, нажимаю команду «docker -compose up» в CMD, я получаю следующее исключение:

java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection

Файл docker -compose является следующим:

version: '3.7'

networks:
    my_network:
        external: 
            name: my_network

services:
   app1:
   image: "app1"
   ports:
     - "9090:9090"
   environment: 
     SPRING_DATASOURCE_URL: "jdbc:oracle:thin:@localhost:32769/ORCLPDB1.localdomain"
     SPRING_DATASOURCE_USERNAME: username
     SPRING_DATASOURCE_PASSWORD: password 
   networks:
     - my_network

Пробные решения, но безрезультатно:

  1. Указана база данных как служба, поэтому, в принципе, можно создавать ее при первом нажатии «docker -compose up», а в приложении app1 указывается тег зависит от базы данных Созданный r будет в исправном состоянии: состояние запуска через много лет после запуска и сбоя app1
  2. Пусть внутри будет создана сеть из docker -композитного файла, но поведение будет таким же, как в заданном вопросе
  3. Заменил localhost на host. docker .internal в URL базы данных, но он сказал, что это был неизвестный хост

1 Ответ

0 голосов
/ 04 февраля 2020

Внутри вашего Docker -композитного файла. Создайте Oracle контейнер базы данных, а затем ваш контейнер API следующим образом

version: '3.7'
services:
  oracle-database:
      image: Your oracleImage
      environment:
         //define your oracle db settings..eg default password,users etc
      volumes:
            - /data/oracle
      ports:
        - 127.0.0.1: 32769:32769/tcp

  api1:
    image: api1
    ports:
      - 127.0.0.1:9090:9090/tcp
    depends_on:
     - oracle-database
    environment:
       - DATABASE_HOST=oracle-database
       - DATABASE_USER= username
       - DATABASE_PASSWORD=password
       - DATABASE_NAME= NameOfYourDatabase
       - DATABASE_PORT= 32769
...