У меня есть сервер конфигурации 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
Как я могу получить доступ к службе с хоста из контейнера докеров?


Решение зависит от того, на какой платформе работает ваш механизм Docker.
В Windows ваши контейнеры могут подключаться к хосту со специальным именем хоста host.docker.internal (см. Документы Docker). Напротив, сетевой режим host не работает в Windows (см. Документы Docker).
В Linux следует использовать сетевой режим host. Однако это нарушит способ соединения ваших контейнеров друг с другом. В сетевом режиме bridge по умолчанию они могут подключаться друг к другу, используя имя хоста, идентичное имени службы (mysql в вашем случае). Однако в сетевом режиме Host вы должны использовать вместо этого имя хоста localhost, потому что все контейнеры используют одну и ту же сеть хоста.
Я предполагаю, что
mysql- это еще одна служба, определенная в вашем файле docker-compose?