Предполагая, что нам нужно делать это очень редко только на определенных этапах разработки (для тестирования нескольких вызовов API), что является самым простым из возможных способов разрешить dockerized веб-сервису в Project Bar доступ к Dockerized веб-сервису в Project Foo?
На Mac для разработки, Docker Engine: 18.09.2, Compose: 1.23.2, у нас есть Project Foo и Project Bar, каждый из которых имеет свои собственные файлы docker-compose, каждый с веб-службой и базой данных.service.
Обычно они работают автономно и разрабатываются независимо.
Однако веб-сервис Project Foo содержит API, к которому лишь изредка мы хотим получить доступ из веб-контейнера Project Bar
Они назначены различным портам хоста, docker ps
показывает, что Project Foo использует порт 0.0.0.0:3000->3000/tcp (например, мы используем localhost: 3000 для доступа к веб-службе из браузера Mac. Панель проекта использует порт0.0.0.0:3010->3010/tcp
docker inspect
для Foo показывает, что его IP-адрес "172.18.0.3" (шлюз "172.18.0.1") и для Bar shoего IP-адрес "172.22.0.4" (шлюз "172.22.0.1")
docker network ls
показывает, что они оба используют один и тот же драйвер "моста".
Оба проекта работаютMac, всего 4 контейнера (web + db на Foo и web + db на Bar)
Если программе (Ruby), работающей на Bar, необходим доступ к REST URL на Foo, каков URL"/ api_test" на Foo?
Из веб-контейнера Bar я пробовал http://localhost:3000/api_test
и http://127.0.0.1:3000/api_test
(это то, что мы использовали бы в веб-браузере, поэтому не ожидали, что это сработает)из контейнера в контейнер), и я пробовал http://172.18.0.3:3000/api_test
и http://172.18.0.3/api_test
, ни один из которых не работал.
Я вижу онлайн-ссылки на настройку ссылки или сети докеров, но все примеры приведеныкогда используется docker run вместо docker-compose.Я ожидаю, что если вы знаете IP-адрес и порт веб-сервера каждого контейнера, это должен быть вопрос использования правильного URL-адреса без каких-либо дополнительных настроек сети?
Буду признателен за любую помощь.
Рекомендуется использовать статическое IP-решение, назначенное вручную ... До Docker мы использовали Vagrant, и это было просто, в каждом проектеVagrantfile: мы просто вручную присваивали им IP-адреса в одной и той же частной подсети 192.168.50.50 и 192.168.50.51, и они просто «общались» друг с другом, и мы могли просто «кодировать» эти IP-адреса в нашем коде разработки.У Докера, кажется, есть дополнительный уровень абстракции, который меня озадачил.