Как подключиться изнутри контейнера Docker к операционной системе хоста?

Мое веб-приложение имеет строку подключения, подобную следующей

jdbc:mysql://127.0.0.1:3306/my-template?useSSL=false

При работе вне Docker все работает как положено.

Когда я запускаю/загружаю приложение из Docker, оно не подключается к MySQL.

Я понимаю, что Docker — это виртуальная машина с закрытым контейнером, но как мне позволить ей найти мой экземпляр MySQL?

Я пробовал некоторые вещи, о которых читал, например добавление записи extra_hosts, но это тоже не сработало. jdbc:mysql://fc.database/my-template?useSSL=false

Люди должны делать это постоянно, верно?

version: '3'

services:

  tomcat:
    image: 'local/myapp:r1'
    build:
      context: '.'
    
    volumes:  
      - './logs:/usr/local/tomcat/logs'
    
    ports:
      - '8080:8080'
    network_mode: "host"
    extra_hosts:
      - "fc.database:127.0.0.1:3306"
volumes: {}

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
99
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

замените 127.0.0.1 на host.docker.internal и попробуйте еще раз. На самом деле 127.0.0.1 указывал на меня, так что докер-контейнер будет указывать на докер-контейнер, а не на ОС хоста. но AFAIK host.docker.internal укажет на ОС хоста. Также позаботьтесь о брандмауэре хоста. Поэтому проверьте брандмауэр вашей ОС, чтобы разрешить входящий трафик на нужный порт (3306).

extra_hosts: - "fc.database:host.docker.internal:3306 и моя строка подключения jdbc следующим образом: jdbc.url=jdbc:mysql://fc.database/fc-template?useSSL=false и порт открыт в брандмауэре, но все равно не повезло

Doug 08.03.2024 19:11

@Doug удалите дополнительный хост и попробуйте jdbc:mysql://host.docker.internal:3306/my-template?useSSL=fa‌​lse

SpongeBob 08.03.2024 19:18

Другие вопросы по теме

Похожие вопросы

Как бы вы напечатали n-й член этого ряда y = -(1)-(1+2)+(1+2+3)+(1+2+3+4)-(1+2+3+4+ 5) .... (1+2+3+4...+n) в Java
Сценарий командной строки для красивой печати сериализованных объектов Java в журналах?
Игра «Ханойские башни» в javafx — ничего не отображается, пока игра не будет полностью решена
Почему значение статической переменной печатается перед сообщением о запуске системы на выходе
Android.database.sqlite.SQLiteException: такой таблицы нет: contact_details (код 1): , при компиляции: INSERT INTO contact_details(..) VALUES (?,??,?)
TransformerFactory.newInstance(...) уязвим для атак внешних объектов XML и XSLT
Есть ли в Java какой-то пул, который позволяет избежать повторения последних арифметических операций?
Как добавить две переменные, которые находятся в двух разных методах Java?
Не найден зарегистрированный поставщик ресурсов для местоположения «eastus2» и версии API «2018-01-01» для типа «storageAccounts/blobServices»
Как использовать строки, содержащие специальные символы, в качестве ключей в YAML с помощью Micronaut