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