У моего приложения есть 2 зависимости, которые я указываю в моем docker-compose , сервисе postgres и kafka:
services:
postgres:
image: postgres:9.6-alpine
ports:
- "5432:5432"
kafka:
image: wurstmeister/kafka
ports:
- "9092:9092"
Я запускаю свой код и тестирую вне сети докеров и использую эти два контейнера в качестве моих зависимостей.
Поскольку оба они предоставляют порты , я могу настроить свое приложение так, чтобы оно попадало по ним через: localhost: 5432, localhost: 9092. Это работает.
Проблема, с которой я столкнулся, заключается в том, что, когда я хочу протестировать само изображение приложения, я добавляю его в качестве службы в файл docker-compose:
app:
image: myapp
links:
- postgres
- kafka
Приложение по-прежнему настроено на использование localhost, поэтому я разрешаю контейнеру приложения получить доступ к моей сети, используя - net = host
Хотя контейнер приложения теперь может обращаться к localhost: 5432 и localhost: 9092 (что подтверждается скручиванием изнутри контейнера), имена хостов не могут быть разрешены при выполнении кода и недоступности зависимостей - возможно, в результате использования localhost изнутри контейнера и путать клиентские библиотеки? Я действительно не уверен.
Такое ощущение, что использование localhost в конфигурации приложения не является правильным подходом. Можно ли ссылаться на названия служб 'postgres' и 'kafka' из вне сети докера?