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

У меня есть служба в докере 8888 и локальная служба grpc, работающая в 0.0.0.0:50051, и я хочу подключиться к этому порту через контейнер докера.

Команда запуска докера:

sudo docker run -ti -p 8888:8888 -p 50051:50051 -v $(pwd):<folder> -e <aws-credentials> <directory> jupyter

Ошибка:

docker: Error response from daemon: 
driver failed programming external connectivity on endpoint strange_lamarr (<string>): 
Error starting userland proxy: listen tcp4 0.0.0.0:50051: bind: address already in use.
ERRO[0000] error waiting for container: context canceled 

Здесь первая служба запускается через докер, поэтому, если я попытаюсь добавить network = "host" к команде, первая служба выйдет из строя. Я просто хочу использовать локальный сервис для второго порта.

Docker пытается использовать порт вместо того, чтобы подключаться к этому порту, я пытался скопировать и создать экземпляр службы на самом докере, но он использует кучу локальной графики, которую я не могу легко воспроизвести на докере.

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

Ответы 1

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

Сопоставление портов -p 50051:50051 используется, когда вам нужно получить доступ к контейнеру с хоста.

Когда вам нужно получить доступ к хосту из контейнера, вам нужно добавить имя хоста, сопоставленное с host-gateway. По соглашению это называется host.docker.internal. Вы делаете это, добавляя --add-host=host.docker.internal:host-gateway в качестве опции к своей команде docker run, поэтому она становится

sudo docker run -ti -v $(pwd):<folder> -e <aws-credentials> <directory> --add-host=host.docker.internal:host-gateway jupyter

Затем вы можете подключиться из контейнера, используя имя хоста host.docker.internal и порт 50051.

Спасибо, мне нужно было быть осторожным с тем, что я искал внутри контейнера, мне пришлось изменить место поиска порта с «localhost: 5001» на «host.docker.internal: 50051».

vwertuzy 30.03.2023 20:13

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