Вызов или общение с док-контейнером на одном компьютере из другого приложения не в док-контейнере, а на другом компьютере

У меня есть мой док-контейнер на одной машине, скажем, на машине A. У меня есть другая машина B, которая состоит из фляжного сервера. Я хотел бы звонить/общаться с док-контейнером на машине А с моего фляжного сервера на машине Б. Я не запускаю свой фляжный сервер внутри какого-либо док-контейнера. На самом деле я очень новичок в докере, поэтому я не уверен, сможем ли мы этого достичь или нет.

Какое общение? http? Тогда что мешает вам общаться с прямым посещением URL, например curl?

atline 29.05.2019 07:28

Да, HTTP-запрос с машины B на машину A

Fenil Shah 29.05.2019 07:30

Итак, на стороне сервера есть http:// url, как я уже сказал, что вам мешает зайти с этим http//xxx?

atline 29.05.2019 07:32
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
114
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не уверен, что вы хотите делать с вашим док-контейнером с фляжного сервера, но я предполагаю, что это будет API или какая-то служба, работающая в док-контейнере, которую вы хотите использовать на фляжном сервере. Вы можете сделать это, используя IP-адрес машины A, на которой работает док-контейнер, а также вам нужно будет привязать порт вашего док-контейнера к порту хост-машины (машины A). Таким образом, всякий раз, когда вы пытаетесь подключиться к хост-компьютеру через этот конкретный порт, вместо этого вы будете вызывать порт контейнеров. Если вы хотите выполнить команду в работающем контейнере, то есть 2 способа сделать это: во-первых, вы можете использовать SSH для подключения к контейнеру, во-вторых, вы можете использовать SSH для подключения к хост-компьютеру, а затем использовать docker exec. Но поскольку вы пытаетесь общаться с flask-сервера, я думаю, что это может быть не так.

Как вы сказали, я хотел бы запустить службу в док-контейнере и хотел бы сделать http-запрос с фляжного сервера в док-контейнер. Служба предоставит мне вывод, который я снова смогу использовать в своей фляге.

Fenil Shah 29.05.2019 07:34

Хорошо, тогда вы можете использовать IP-адрес машины А для связи с докером, просто вам нужно связать порты контейнера и хост-машины. Допустим, ваша служба работает на порту 9000 контейнера докеров, тогда вам нужно связать порт 9000 с каким-то портом, скажем, 8000 хост-машины. Теперь, если вы сделаете HTTP-запрос на порт 8000 машины A, вместо этого вы будете вызывать контейнеры на порт 9000.

Praveen Rewar 29.05.2019 07:44
Ответ принят как подходящий

Вы можете просто напрямую посетить службу http в контейнере с другой машины.

Например.

Контейнер на машине А был таким:

docker run -idt -p 9000:80 nginx

Затем вы можете просто использовать фляжное приложение machineB:

requests.get("http://your_machine_a_ip:9000")

чтобы получить то, что вам нужно.

Просто помните, что для контейнера вам нужно указать http-порт для хоста, чтобы его могла посетить другая машина.

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