Как получить IP-адрес запущенного контейнера докеров

96

Я использую Docker для Mac. Я запускаю микросервис на основе nodejs в контейнере Docker. Я хочу протестировать микросервис узла через браузер. Как получить IP-адрес запущенного контейнера докеров?

user3067875
источник
2
Отвечает ли это на ваш вопрос? Как получить IP-адрес контейнера Docker от хоста?
sanyassh

Ответы:

116

Если вы не хотите сопоставлять порты вашего хоста с контейнером, вы можете получить прямой доступ к 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если все в порядке и вы не указали никаких специальных сетевых параметров.

РЕДАКТИРОВАТЬ Еще один более элегантный способ использования функций докеров вместо «обмана bash»:

docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>
ОскарАкаЭлвис
источник
7
Вы говорите о внутреннем IP-адресе, и это не имеет отношения к рассматриваемому вопросу. Ваш ответ просто сбивает читателя с толку. Поскольку IP - это IP-адрес машины, на которой работает Docker. Что просто localhost:)
Дэвид Гатти
Вы неправы. OP не указал, что микросервис должен быть доступен извне. Он только сказал: «Тестировать микросервис узла через браузер», и это можно сделать с помощью предложенного мной метода с использованием http://172.17.0.2:anyPortхоста. Конечно, если вы хотите получить к нему доступ, используя localhost на хосте, вы должны сопоставить порты. Посмотрим, чего хочет ОП.
OscarAkaElvis
3
Вы говорите, что можете получить доступ к внутреннему IP-адресу внутри контейнера с хоста? Это физически невозможно, это совершенно другая сеть. Мало того, что я только что проверил, и да, я не могу получить доступ к 172.17.0.7 моего контейнера докеров, тогда я смогу увидеть всех претендентов на докеры, если я просканирую свой хост-компьютер с помощью сетевого сканера, а это не так. еще раз. Я знаю, что это не должно работать, я проверил то, что вы говорите (никогда не угадаете), и это не работает. Может быть, в вашем объяснении отсутствует ключевая часть?
Дэвид Гатти
Контейнеры доступны с хоста. Попробуйте сами ... Я дам вам несколько советов. 1. Загрузите контейнер запуска: docker run --name struts --rm -i tomcat2. Получите IP-адрес вашего контейнера (если у вас только один): docker inspect struts | grep '"IPAddress"' | head -n 13. Откройте его в браузере хоста http://x.x.x.x:8080. Вы можете увидеть страницу по умолчанию Apache Tomcat.
OscarAkaElvis
1
Мне не удалось получить доступ к веб-приложению в контейнере без сопоставления порта с помощью -p
bilal.haider
22

Используйте --formatопцию, чтобы получить только IP-адрес вместо всей информации о контейнере:

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
Нилеш Патель
источник
4
В Windows host используйте двойные кавычки вместо одинарных. Например, sudo docker inspect --format "{{.NetworkSettings.IPAddress}}" <КОНТЕЙНЕР ID или ИМЯ> Ссылка: ссылка
Винит Саджван
1
новый формат информации о контейнере здесь
Игорь
20

Для современных движков докеров используйте эту команду:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

а для старых двигателей используйте:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
Нима Горуби
источник
Как упоминалось и указано в комментарии @sanyash в исходной области OP.
Джесси Чисхолм,
Ошибка синтаксического анализа шаблона: template:: 1: неожиданное незакрытое действие в команде
gmlvsv
11

если вы хотите получить его прямо в контейнере, вы можете попробовать

ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17
Илья Евлампиев
источник
5

Вы можете запустить свой контейнер с флагом -P. Это «назначает» случайный порт открытому порту вашего изображения.

С помощью docker port <container id>вы можете увидеть случайно выбранный порт. Тогда доступ возможен через localhost:port.

gScht
источник
2

В моем случае на 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

Лаванда
источник
-3

Вы не можете получить доступ к IP-адресу докера извне этого хост-компьютера. Если ваш браузер находится на другом компьютере, лучше сопоставить порт хоста с портом контейнера, передав -p 8080:8080команду run.

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

Акаш Шарма
источник