Есть ли команда, которую я могу запустить, чтобы получить IP-адрес контейнера прямо с хоста после создания нового контейнера?
По сути, когда Docker создает контейнер, я хочу развернуть сценарии развертывания собственного кода и конфигурации контейнера.
Ответы:
На помощь приходит
--format
вариантinspect
.Синтаксис современного Docker-клиента:
Синтаксис старого Docker-клиента:
Эти команды вернут IP-адрес контейнера Docker.
Как уже упоминалось в комментариях: если вы в Windows, используйте двойные кавычки
"
вместо одинарных кавычек'
вокруг фигурных скобок.источник
<no value>
ответа на Mac с помощью Fig / Boot2Docker<no value>
если попытаетесь запустить это для контейнера, который не запущен. Убедитесь, что ваш контейнер работает, прежде чем сделать это.{{ .NetworkSettings.Networks.$network.IPAddress }}
. По умолчанию используется значение bridge, но в docker-compose это будет конкретное имя, которое зависит от имени вашего приложения (я думаю, из флага --project-name, хотя это также будет зависеть от того, какой тип конфигурации сети). вы настроили). Я написал полный ответ в ответе здесь stackoverflow.com/questions/17157721/…Вы можете использовать
docker inspect <container id>
.Например:
источник
docker inspect $CID | grep IPAddress | cut -d '"' -f 4
, он отлично работает :)alias dockerip='docker ps | tail -n +2 | while read cid b; do echo -n "$cid\t"; docker inspect $cid | grep IPAddress | cut -d \" -f 4; done'
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
это новый синтаксис.-format
устарела, становится--format
.Сначала получите идентификатор контейнера:
(Первый столбец для идентификатора контейнера)
Используйте идентификатор контейнера для запуска:
Внизу, под «NetworkSettings», вы можете найти «IP-адрес»
Или просто сделайте:
источник
docker run -it MYCONTAINER /bin/bash
) выводinspect
не имеет разделаNetworkSettings
!docker network inspect bridge | grep Gateway | grep -o -E '[0-9.]+'
... | grep IP
решение для всех деталей форматирования, необходимых для получения IP. +1docker run -it MYIMAGE
(это не имя контейнера ); если вы это сделаете,docker inspect MYIMAGE
вы получите статическую информацию об изображении . Вам нужно найти имя работающего контейнера (или использовать его идентификатор, как предлагают другие). В моей системе первый такой контейнер, созданный из этого образа, по умолчанию имеет имяMYIMAGE_1
,docker inspect MYIMAGE_1
как и NetworkSettings.Вы можете добавить
-i
в grep игнорирование регистра, тогда сработает даже следующее:источник
Чтобы получить все имена контейнеров и их IP-адреса всего за одну команду.
Если вы используете
docker-compose
команду будет это:Выход будет:
источник
{{.NetworkSettings.IPAddress }}
на{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -aq | xargs) | sed -e '/^$/d'
. Вsed(1)
удаляет пустые строки для контейнеров присутствует, но не имеющие IP-адрес.Добавьте этот скрипт в ваш
~/.bashrc
или соответствующий файл:Затем, чтобы получить IP-адрес контейнера, просто сделайте это:
Для новой версии Docker, пожалуйста, используйте следующее:
источник
Template parsing error: template: :1:19: executing "" at <.NetworkSettings.IPA...>: map has no entry for key "NetworkSettings"
source ~/.bash_profile
Показать все IP-адреса контейнера:
источник
В Docker 1.3+ вы также можете проверить это, используя:
Войдите в работающий Docker (Linux):
Для окон:
источник
docker exec [container-name-or-id] ip a
docker exec [container-id or container-name] ipconfig
Начиная с версии Docker 1.10.3, сборка 20f81dd
Если вы не сказали Docker иначе, Docker всегда запускает ваши контейнеры в сети моста. Таким образом, вы можете попробовать эту команду ниже:
Который должен затем вернуть раздел Контейнеры, который будет отображать IP-адрес для этого работающего контейнера.
источник
Выполнение:
Это отобразит активные изображения докера:
Используйте значение идентификатора CONTAINER:
"172.17.0.2"
источник
Основываясь на некоторых ответах, которые мне понравились, я решил объединить их с функцией для получения всех IP-адресов, а другой - для конкретного контейнера. Теперь они в моем
.bashrc
файле.Первая команда дает IP-адрес всех контейнеров, а вторая - IP-адрес конкретного контейнера.
источник
Справочные контейнеры по имени:
Затем захватите IP-адрес по имени:
источник
Я написал следующий скрипт Bash, чтобы получить таблицу IP-адресов из всех контейнеров, работающих под ним
docker-compose
.Вы должны изменить переменную сеть на свое собственное имя сети.
источник
Вот быстрый рабочий ответ:
Получите ваше имя контейнера или ID:
Тогда получите IP:
Получить порт:
источник
Docker написан на Go и использует синтаксис Go для запросов.
Чтобы проверить IP-адрес определенного контейнера, вам нужно выполнить команду (
-f
для «format»):Для идентификатора или имени контейнера вы можете выполнить команду
который будет перечислять каждый запущенный контейнер.
источник
Вот решение, которое я разработал сегодня в Python, используя
docker inspect container
вывод JSON в качестве источника данных.У меня есть много контейнеров и инфраструктур, которые я должен осмотреть, и мне нужно быстро и красиво получать основную информацию о сети из любого контейнера . Вот почему я сделал этот сценарий.
ВАЖНО: начиная с версии 1.9, Docker позволяет создавать несколько сетей и подключать их к контейнерам.
Выход:
источник
Вышеуказанное работает, если контейнер развернут в мостовой сети по умолчанию.
Однако, если вы используете настраиваемую мостовую сеть или оверлейную сеть, я обнаружил, что приведенное ниже работает лучше:
источник
Чтобы расширить ответ ko-dos, вот псевдоним для перечисления всех имен контейнеров и их IP-адресов:
источник
docker ps -q
чтобы избежатьtail
и--format
избежать grep. Также вы можете передавать несколько идентификаторов контейнеров,docker inspect
а не зацикливаться в оболочке.docker ps -q
отображает только числовые идентификаторы контейнеров, но я думаю, что лучше использовать их имя.tail
только для того, чтобы избавиться от первой строки (заголовок таблицы) и по-прежнему необходимо. Я мог бы использовать--format
, хотя:docker ps | tail -n +2 | while read -a a; do name=${a[$((${#a[@]}-1))]}; echo -ne "$name\t"; docker inspect --format="{{.NetworkSettings.IPAddress}}" $name | cut -d \" -f 4; done
. Но это не кажется большим улучшением ...grep
было более читабельным ИМО.docker inspect $cid | grep IPAddress | cut -d '"' -f 4 | tail -n 1
Я использую этот простой способ
например
источник
Если вы установили Docker с помощью Docker Toolbox, вы можете использовать приложение Kitematic для получения IP-адреса контейнера:
источник
docker inspect
не работает, когда вы запускаете панель инструментов Docker. Он сообщит IP-адрес, но это не тот адрес, который будут использовать ваши службы.Чтобы получить IP-адрес и порт хоста контейнера:
Вывод:
источник
НОТА!!! для Docker Compose Использование:
Поскольку Docker Compose создает изолированную сеть для каждого кластера, приведенные ниже методы не работают
docker-compose
.Самый элегантный и простой способ - определить функцию оболочки, которая в настоящее время пользуется наибольшим количеством голосов @ WouterD's :
Docker может записывать идентификаторы контейнеров в файл, такой как программы для Linux:
Работая с
--cidfile=filename
, Docker выводит идентификатор контейнера в «имя файла».См. « Docker запускает PID-эквивалентный раздел » для получения дополнительной информации.
Использование файла PID:
Запуск контейнера с
--cidfile
параметром,app.cid
содержимое файла выглядит так:Вы можете использовать содержимое файла для проверки контейнеров Docker:
Вы можете извлечь IP контейнера, используя встроенный скрипт Python:
Вот более дружелюбная для человека форма:
См. « 10 альтернатив получения IP-адресов контейнера Docker » для получения дополнительной информации.
источник
Для Windows 10:
источник
Это перечислит все IP-адреса контейнера на хосте:
источник
Docker проверяет использование для печати всех контейнеров ips и соответствующих им имен
источник
Просто для полноты:
Мне действительно нравится этот
--format
вариант, но сначала я не знал об этом, поэтому я использовал простой однострочный Python для получения того же результата:источник
Объединение предыдущих ответов с поиском идентификатора контейнера на основе имени образа Docker:
источник
Использование:
источник
$ docker inspect c4591485328d | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1
172.17.0.2
Для контейнеров Windows используйте
где
<container>
это имя или идентификатор контейнера.Вы можете использовать,
docker ps
чтобы найти идентификатор контейнера.источник
Если вы забыли идентификатор контейнера или не хотите манипулировать командами оболочки, лучше использовать пользовательский интерфейс, например Portainer.
https://portainer.io/
Там вы можете найти всю информацию о контейнере, а также IP.
источник