Я использую 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
если все в порядке и вы не указали никаких специальных сетевых параметров.
РЕДАКТИРОВАТЬ Еще один более элегантный способ использования функций докеров вместо «обмана bash»:
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
команду run.
Передавая, -p
вы можете сопоставить порт хоста с портом контейнера, и прокси настроен для пересылки всего трафика для указанного порта хоста в назначенный порт контейнера.