Подключение контейнера Docker, работающего в сети моста, к локальному хосту

Я запускаю localstack (мока-сервис AWS) локально как док-контейнер. У меня есть другое приложение, которое пытается подключиться к нему, но получает ошибку отказа в соединении, оба являются java-проектами. Сеть, которую я пытаюсь использовать, называется servview, поэтому я запускаю localstack со следующим

docker run --net=serview -d -p 4566-4597:4566-4597 --name=localstack -it localstack/localstack:latest

Затем я запускаю свое другое приложение, которое тоже хочет получить к нему доступ, как это

docker run --net=serview  -it --name sample-publisher -p 1338:1338 --rm sample-publisher:latest

Ошибка, которую я получаю, это

com.amazonaws.SdkClientException: Unable to execute HTTP request: Connect to localhost:4575 [localhost/127.0.0.1] failed: Connection refused (Connection refused)

Работа с net=host будет работать нормально, но я хочу работать в сети servview, возможно ли это?


person AnonymousAlias    schedule 11.06.2020    source источник
comment
используйте имя контейнера для доступа к нему из другого контейнера. Пока вы используете localhost.   -  person Michał Krzywański    schedule 11.06.2020
comment
Это сработало, поставь как ответ, я приму   -  person AnonymousAlias    schedule 11.06.2020


Ответы (1)


Когда контейнеры подключены к общей сети, вы должны использовать имена контейнеров для подключения друг к другу. Имя контейнера — это DNS-имя, которое будет преобразовано в IP-адрес контейнера в общей сети.

person Michał Krzywański    schedule 11.06.2020
comment
Эй, у меня есть еще один вопрос, может быть, вы могли бы помочь, если я использую имя контейнера вместо localhost, но я удаляю --net = servview, тогда я получаю ошибку подключения, у меня есть ситуация, когда я хотел бы контейнеры, которые находятся в servview и где не указана сеть для работы с моим локальным стеком - person AnonymousAlias; 11.06.2020
comment
Извините, возможно, я объяснил это неправильно, но я хочу, чтобы в моем java-коде было что-то, что будет работать независимо от того, работает ли локальный стек в сети моста или если он запускается без указанной сети. - person AnonymousAlias; 11.06.2020
comment
Такие вещи делаются через переменные окружения. Вы выбираете значение из среды в своем коде Java. При запуске контейнера вы передаете эту переменную среды, которая будет выбрана (либо localhost, либо другое имя контейнера). - person Michał Krzywański; 11.06.2020
comment
Почему имя контейнера не будет работать, если я запускаю док-контейнеры без указания сети? - person AnonymousAlias; 11.06.2020
comment
Я не совсем понимаю, что вы имеете ввиду. Когда контейнеры не подключены к сети, определенной пользователем, они подключаются к сети beidge по умолчанию. Вы могли получить доступ друг к другу по IP, но не по имени. Когда контейнеры подключены к пользовательской сети (как в вашем примере), они могут взаимодействовать через необработанные IP-адреса или имена контейнеров, которые будут DNS-именами, разрешенными для их IP-адреса. Дополнительную информацию можно найти в документах. - person Michał Krzywański; 11.06.2020