Я використовую Docker для Mac. Я запускаю мікросервіс на основі nodejs у контейнері Docker. Я хочу протестувати мікросервіс вузла через браузер. Як отримати IP-адресу запущеного контейнера докера?
Я використовую Docker для Mac. Я запускаю мікросервіс на основі nodejs у контейнері Docker. Я хочу протестувати мікросервіс вузла через браузер. Як отримати IP-адресу запущеного контейнера докера?
Відповіді:
Якщо ви не хочете зіставляти порти з вашого хосту в контейнер, ви можете отримати доступ безпосередньо до діапазону докера ip для контейнера. Цей діапазон за замовчуванням доступний лише з вашого хосту. Ви можете перевірити дані контейнерної мережі, виконуючи:
docker inspect <containerNameOrId>
Напевно, краще відфільтрувати:
docker inspect <containerNameOrId> | grep '"IPAddress"' | head -n 1
Зазвичай типовим діапазоном IP-адрес докера є 172.17.0.0/16
. Вашим хостом повинен бути 172.17.0.1
і ваш перший контейнер, 172.17.0.2
якщо все нормально, і ви не вказали жодних спеціальних параметрів мережі.
EDIT Ще один більш елегантний спосіб використання функцій докера замість "обдурювання":
docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>
localhost
:)
http://172.17.0.2:anyPort
з хосту. Звичайно, якщо ви хочете отримати доступ до нього за допомогою localhost на хості, ви повинні зіставити порти. Побачимо, чого хоче ОП.
docker run --name struts --rm -i tomcat
2. Отримайте ip вашого контейнера (якщо у вас лише один): docker inspect struts | grep '"IPAddress"' | head -n 1
3. Відкрийте його в браузері хоста http://x.x.x.x:8080
. Ви можете побачити сторінку Apache Tomcat за замовчуванням.
Використовуйте --format
опцію, щоб отримати лише IP-адресу, а не всю інформацію про контейнер:
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
Для сучасних докерних двигунів використовуйте цю команду:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
а для старих двигунів використовують:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
якщо ви хочете отримати його прямо в контейнері, можете спробувати
ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17
Для мого випадку, нижче працювали на Mac :
Я не міг отримати доступ до IP-адрес контейнера безпосередньо на Mac. Мені потрібно використовувати localhost
з переадресацією портів, наприклад, якщо порт 8000, тоhttp://localhost:8000
Див. Https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds
Оригінальна відповідь була з: https://github.com/docker/for-mac/issues/2670#issuecomment-371249949
Ви не можете отримати доступ до IP-адреси докера за межами цієї хост-машини. Якщо ваш браузер на іншій машині, краще зіставити порт хосту з портом контейнера, передавши -p 8080:8080
команду запуску.
Передаючи, -p
ви можете зіставити порт хосту з портом контейнера, а проксі встановлено для переадресації всього трафіку для вказаного порту хоста до призначеного порту контейнера.