Как получить IP-адрес запущенного контейнера докеров
Я использую Docker для Mac. Я использую микросервис на основе nodejs в контейнере Docker. Я хочу протестировать узел микросервиса через браузер. Как получить IP-адрес работающего Docker-контейнера?
Ответы
Ответ 1
Если вы не хотите отображать порты с вашего хоста в контейнер, вы можете напрямую обращаться к диапазону докеров для контейнера. Этот диапазон по умолчанию доступен только с вашего хоста. Вы можете проверить данные своей сети:
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 tricking":
docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>
Ответ 2
Используйте --format
чтобы получить только IP-адрес вместо всей информации о контейнере:
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
Ответ 3
если вы хотите получить его прямо в контейнере, вы можете попробовать
ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17
Ответ 4
Вы можете запустить свой контейнер с флагом -P
. Это "назначает" случайный порт для открытого порта вашего изображения.
С помощью docker port <container id>
вы можете увидеть случайно выбранный порт. Затем доступ возможен через localhost:port
.
Ответ 5
IP будет localhost
(поскольку мы имеем дело с вашим компьютером. Но если вы хотите, вы также можете ввести 127.0.0.1) и port
, которые вы установили в контейнере. Например, если вы запустите Docker с параметром порта, например, -p 3003:3000
Тогда это означает, что NodeJS должен прослушивать порт 3000, в то время как открытый порт будет 3003
. Выставляется на ваш локальный компьютер.
Таким образом, вы можете ввести браузер:
Ответ 6
Для моего случая ниже работал на 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
Ответ 7
Для современных двигателей докеров используйте эту команду:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
и для более старых двигателей используйте:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
Ответ 8
Вы не можете получить доступ к IP-адресу докера за пределами этого хост-компьютера. Если ваш браузер находится на другом компьютере, лучше сопоставить порт хоста с портом контейнера, передав -p 8080:8080
для запуска команды.
Передав -p
вы можете сопоставить порт хоста с портом контейнера, и прокси-сервер настроен на пересылку всего трафика для указанного порта хоста на указанный порт контейнера.