Доступ к хосту службы изнутри контейнера

У меня есть сервер конфигурации Spring Boot, работающий на локальном хосте на порту 8888. Я хотел бы получить доступ к этой службе из контейнера докеров. Я не могу поместить эту службу в одну и ту же docker-compose и в одной сети.

Сервис: http: // localhost: 8888 / cpo-executor / dev
Используя мой ip: http://192.168.0.6:8888/cpo-executor/dev

Я проверил этот адрес в браузере, и он работает. Когда я пытаюсь получить доступ из контейнера докеров, я получаю сообщение об ошибке:

docker exec -it 7febe846f2ea /bin/bash
curl http://192.168.0.6:8888/cpo-executor/dev

Ошибка:

curl: (7) Failed to connect to 192.168.0.6 port 8888: Connection timed out

Я попытался запустить свои контейнеры, поместив "network_mode: host" в docker-compose, но в итоге я столкнулся с другой ошибкой из-за того, что один контейнер не взаимодействовал с другим.

Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

Caused by: java.net.UnknownHostException: mysql

Как я могу получить доступ к службе с хоста из контейнера докеров?

Я предполагаю, что mysql - это еще одна служба, определенная в вашем файле docker-compose?

user14967413 07.04.2021 01:29
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
1
24
1

Ответы 1

Решение зависит от того, на какой платформе работает ваш механизм Docker.

  1. В Windows ваши контейнеры могут подключаться к хосту со специальным именем хоста host.docker.internal (см. Документы Docker). Напротив, сетевой режим host не работает в Windows (см. Документы Docker).

  2. В Linux следует использовать сетевой режим host. Однако это нарушит способ соединения ваших контейнеров друг с другом. В сетевом режиме bridge по умолчанию они могут подключаться друг к другу, используя имя хоста, идентичное имени службы (mysql в вашем случае). Однако в сетевом режиме Host вы должны использовать вместо этого имя хоста localhost, потому что все контейнеры используют одну и ту же сеть хоста.

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