Предполагая, что нам нужно делать это очень редко, только на определенных этапах разработки (чтобы протестировать несколько вызовов API), каков самый простой способ предоставить докеризованному веб-сервису в проекте Bar доступ к докеризированному веб-сервису в Project Foo?
На Mac для разработки, Docker Engine: 18.09.2, Compose: 1.23.2, у нас есть Project Foo и Project Bar, каждый из которых имеет свои собственные файлы для создания докеров, каждый с веб-службой и службой базы данных.
Обычно они работают автономно и разрабатываются независимо.
Однако веб-служба Project Foo содержит API, к которому мы лишь изредка хотим получить доступ из веб-контейнера Project Bar.
Они назначены разным хост-портам, docker ps
показывает, что Project Foo использует порт 0.0.0.0:3000->3000/tcp (например, мы используем localhost:3000 для доступа к веб-службе из браузера Mac. Project Bar использует порт 0.0.0.0: 3010->3010/TCP
docker inspect
для Foo показывает, что его IP-адрес "172.18.0.3" (шлюз "172.18.0.1"), а для Bar показывает, что его IP-адрес "172.22.0.4" (шлюз "172.22.0.1")
docker network ls
показывает, что они оба используют один и тот же драйвер «моста».
Оба проекта работают на Mac, всего 4 контейнера (web+db на Foo и web+db на Bar).
Если программе (Ruby), работающей на Bar, требуется доступ к URL-адресу REST на 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-адреса в нашем коде разработки. У Docker, кажется, есть дополнительный уровень абстракции, который меня озадачил.