У меня есть мой док-контейнер на одной машине, скажем, на машине A. У меня есть другая машина B, которая состоит из фляжного сервера. Я хотел бы звонить/общаться с док-контейнером на машине А с моего фляжного сервера на машине Б. Я не запускаю свой фляжный сервер внутри какого-либо док-контейнера. На самом деле я очень новичок в докере, поэтому я не уверен, сможем ли мы этого достичь или нет.
Да, HTTP-запрос с машины B на машину A
Итак, на стороне сервера есть http://
url, как я уже сказал, что вам мешает зайти с этим http//xxx
?
Я не уверен, что вы хотите делать с вашим док-контейнером с фляжного сервера, но я предполагаю, что это будет API или какая-то служба, работающая в док-контейнере, которую вы хотите использовать на фляжном сервере. Вы можете сделать это, используя IP-адрес машины A, на которой работает док-контейнер, а также вам нужно будет привязать порт вашего док-контейнера к порту хост-машины (машины A). Таким образом, всякий раз, когда вы пытаетесь подключиться к хост-компьютеру через этот конкретный порт, вместо этого вы будете вызывать порт контейнеров.
Если вы хотите выполнить команду в работающем контейнере, то есть 2 способа сделать это: во-первых, вы можете использовать SSH для подключения к контейнеру, во-вторых, вы можете использовать SSH для подключения к хост-компьютеру, а затем использовать docker exec
. Но поскольку вы пытаетесь общаться с flask-сервера, я думаю, что это может быть не так.
Как вы сказали, я хотел бы запустить службу в док-контейнере и хотел бы сделать http-запрос с фляжного сервера в док-контейнер. Служба предоставит мне вывод, который я снова смогу использовать в своей фляге.
Хорошо, тогда вы можете использовать IP-адрес машины А для связи с докером, просто вам нужно связать порты контейнера и хост-машины. Допустим, ваша служба работает на порту 9000 контейнера докеров, тогда вам нужно связать порт 9000 с каким-то портом, скажем, 8000 хост-машины. Теперь, если вы сделаете HTTP-запрос на порт 8000 машины A, вместо этого вы будете вызывать контейнеры на порт 9000.
Вы можете просто напрямую посетить службу http в контейнере с другой машины.
Например.
Контейнер на машине А был таким:
docker run -idt -p 9000:80 nginx
Затем вы можете просто использовать фляжное приложение machineB:
requests.get("http://your_machine_a_ip:9000")
чтобы получить то, что вам нужно.
Просто помните, что для контейнера вам нужно указать http-порт для хоста, чтобы его могла посетить другая машина.
Какое общение? http? Тогда что мешает вам общаться с прямым посещением URL, например curl?