Хорошо известная проблема «контейнеры Docker не видят друг друга» - PullRequest
0 голосов
/ 22 марта 2019

Я проверил много записей на форуме (например, тоже в stackoverflow), но все еще не могу понять, в чем проблема с моим файлом docker-compose.

Поэтому, когда я запускаю свое приложение (content-app), я получил следующее исключение:

Failed to obtain JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionException: Could not connect to address=(host=content-database)(port=3306)(type=master) : Connection refused (Connection refused)

Мое приложение представляет собой загрузочное приложение Spring, которое пытается подключиться к базе данных, URL JDBC:

url: jdbc:mariadb://content-database:3306/contentdb?autoReconnect=true

Приложение Spring Boot работает нормально, так как локально (если не используется докер) может подключаться к локальной папке mariadb.
Таким образом, контейнер content-app не видит контейнер content-database. Я прочитал, что если я укажу сеть и назначу контейнеры сети, они смогут соединяться друг с другом.

Когда я подключаюсь к работающему контейнеру content-app, я могу подключиться к content-database

root@894628d7bdd9:/# telnet content-database 3306
Trying 172.28.0.3...
Connected to content-database.
Escape character is '^]'.
n
5.5.5-10.4.3-MariaDB-1:10.4.3+maria~bionip/4X@wW/�#_9<b[~)N.:ymysql_native_passwordConnection closed by foreign host.

Мой файл yaml для docker-compose:

version: '3.3'
networks: 
  net_content:
services:
  content-database:
    image: content-database:latest
    build:
      context: .
      dockerfile: ./database/Dockerfile 
    networks: 
    - net_content
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
  content-redis:
    image: content-redis:latest
    build:
      context: .
      dockerfile: ./redis/Dockerfile 
    networks: 
    - net_content
  content-app:
    image: content-app:latest
    build:
      context: .
      dockerfile: ./content/Dockerfile 
    networks: 
      - net_content
    depends_on:
    - "content-database"

Любая подсказка, пожалуйста?
Спасибо!

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Я предполагаю, что MariaDB прослушивает порт по умолчанию 3307 , это означает, что ваше приложение также должно подключаться к этому порту.Я полагаю, что это тот случай, когда вы отображаете порт 3307 вашего контейнера на «внешний».

Измените порт в строке подключения:

url: jdbc:mariadb://content-database:3307/contentdb?autoReconnect=true
0 голосов
/ 22 марта 2019

Вы должны выставить порт, на котором база данных контента слушает в Dockerfile, на ./database/Dockerfile

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