хоста - docker-compose ip address




Как получить IP-адрес контейнера Docker от хоста? (20)

Docker создается внутри Go и использует синтаксис Go для запросов.

Для проверки IP-адреса конкретного контейнера необходимо выполнить команду (-f для опции формата)

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

Для идентификатора или имени контейнера вы можете запустить docker container ls команды docker container ls . Он отобразит список всех запущенных контейнеров.

Есть ли команда, которую я могу запустить, чтобы получить IP-адрес контейнера прямо с хоста после создания нового контейнера?

В принципе, как только Docker создает контейнер, я хочу свернуть свои собственные сценарии развертывания кода и конфигурации контейнера.


В Docker 1.3+ вы также можете проверить его, выполнив следующие шаги:

Введите исполняемый Docker:

docker exec [container-id or container-name] cat /etc/hosts
172.17.0.26 d8bc98fa4088
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.17 mysql

Вы можете использовать docker inspect <container id>

Пример:

CID=$(docker run -d -p 4321 base nc -lk 4321);
docker inspect $CID

Выполнение:

docker ps -a

Это отобразит активные изображения докеров:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
3b733ae18c1c        parzee/database     "/usr/lib/postgresql/"   6 minutes ago       Up 6 minutes                 5432/tcp            serene_babbage

Используйте значение ID КОНТЕЙНЕРА:

docker inspect <CONTAINER ID> | grep -w "IPAddress" | awk '{ print $2 }' | head -n 1 | cut -d "," -f1

"172.17.0.2"


Для окон 10:

docker inspect --format "{{ .NetworkSettings.IPAddress }}"  containerId

Для тех, кто пришел из Google, чтобы найти решение для выполнения команды с терминала (а не по сценарию), jid (интерактивный JSON-сверление используется с автозаполнением и предложением) позволяет добиться того же, что и при меньшем наборе текста.

docker inspect $CID | jid

Вкладка « Тип вкладки .Net », и вы увидите следующее:

[Filter]> .[0].NetworkSettings
{
  "Bridge": "",
  "EndpointID": "b69eb8bd4f11d8b172c82f21ab2e501fe532e4997fc007ed1a997750396355d5",
  "Gateway": "172.17.0.1",
  "GlobalIPv6Address": "",
  "GlobalIPv6PrefixLen": 0,
  "HairpinMode": false,
  "IPAddress": "172.17.0.2",
  "IPPrefixLen": 16,
  "IPv6Gateway": "",
  "LinkLocalIPv6Address": "",
  "LinkLocalIPv6PrefixLen": 0,
  "MacAddress": "02:42:ac:11:00:02",
  "Networks": {
    "bridge": {
      "Aliases": null,
      "EndpointID": "b69eb8bd4f11d8b172c82f21ab2e501fe532e4997fc007ed1a997750396355d5",
      "Gateway": "172.17.0.1",
      "GlobalIPv6Address": "",

Введите вкладку .IPA, и вы увидите следующее:

[Filter]> .[0].NetworkSettings.IPAddress
"172.17.0.2"

Если вы забыли идентификатор контейнера или не хотите манипулировать командами оболочки, лучше использовать интерфейс, такой как Portainer.

https://portainer.io/

$ docker volume create portainer_data
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Там вы можете найти всю информацию о контейнере и IP.


Если вы установили Docker с помощью Docker Toolbox, вы можете использовать приложение Kitematic для получения IP-адреса контейнера:

  1. Выберите контейнер
  2. Нажмите «Настройки»
  3. Перейдите на вкладку «Порты».

Мне нужно было извлечь IP-адрес контейнера-докера по имени контейнера докера для дальнейшего использования в сценариях развертывания. Для этого я написал следующую команду bash:

docker inspect $(sudo docker ps | grep my_container_name | head -c 12) | grep -e \"IPAddress\"\:[[:space:]]\"[0-2] | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'

Предположим, что было бы удобно разместить его в сценарии bash, который будет ожидать my_container_name в качестве аргумента ...


Начиная с версии Docker 1.10.3, build 20f81dd

Если вы не сказали Docker, Docker всегда запускает ваши контейнеры в сети моста. Поэтому вы можете попробовать эту команду ниже:

docker network inspect bridge

Затем следует вернуть раздел Контейнеры, который отобразит IP-адрес для этого запускаемого контейнера.

[
    {
        "Name": "bridge",
        "Id": "40561e7d29a08b2eb81fe7b02736f44da6c0daae54ca3486f75bfa81c83507a0",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16"
                }
            ]
        },
        "Containers": {
            "025d191991083e21761eb5a56729f61d7c5612a520269e548d0136e084ecd32a": {
                "Name": "drunk_leavitt",
                "EndpointID": "9f6f630a1743bd9184f30b37795590f13d87299fe39c8969294c8a353a8c97b3",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        }
    }
]

Осмотр не работал для меня. Возможно, поскольку я использовал -net host и некоторые пространства имен.

Во всяком случае, я нашел, что это хорошо работает:

docker exec -i -t NAME /sbin/ifconfig docker0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'

Основываясь на некоторых ответах, которые мне нравились, я решил объединить их с функцией, чтобы получить все IP-адреса, а другой - для конкретного контейнера. Они теперь находятся в моем файле .bashrc .

docker-ips() {
    docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
}

docker-ip() {
  docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "[email protected]"
}

Первая команда дает IP-адрес всех контейнеров, а второй - IP-адрес конкретного контейнера.

docker-ips
docker-ip YOUR_CONTAINER_ID

Просто для полноты:

Мне очень нравится опция --format , но сначала я не знал об этом, поэтому я использовал простой однострочный Python для получения того же результата:

docker inspect <CONTAINER> |python -c 'import json,sys;obj=json.load(sys.stdin);print obj[0]["NetworkSettings"]["IPAddress"]'

Сначала получите идентификатор контейнера:

docker ps

(Первый столбец предназначен для идентификатора контейнера)

Используйте идентификатор контейнера для запуска:

docker inspect <container ID>

Внизу в разделе «NetworkSettings» вы можете найти «IPAddress»,

Или просто выполните:

docker inspect <container id> | grep "IPAddress"

Чтобы получить IP-адрес и порт хоста контейнера:

docker inspect conatinerId | awk '/IPAddress/ || /HostPort/'

Выход:

    "HostPort": "4200"
                    "HostPort": "4200"
        "SecondaryIPAddresses": null,
        "IPAddress": "172.17.0.2",
                "IPAddress": "172.17.0.2",

Чтобы получить все имена контейнеров и их IP-адреса только в одной команде.

docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

Если вы используете команду docker-compose команда будет следующей:

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

Выход будет:

/containerA - 172.17.0.4
/containerB - 172.17.0.3
/containerC - 172.17.0.2

Я написал следующий сценарий Bash, чтобы получить таблицу IP-адресов из всех контейнеров, работающих под docker-compose .

function docker_container_names() {
    docker ps -a --format "{{.Names}}" | xargs
}

# Get the IP address of a particular container
dip() {
    local network
    network='YOUR-NETWORK-HERE'
    docker inspect --format "{{ .NetworkSettings.Networks.$network.IPAddress }}" "[email protected]"
}

dipall() {
    for container_name in $(docker_container_names);
    do
        local container_ip=$(dip $container_name)
        if [[ -n "$container_ip" ]]; then
            echo $(dip $container_name) " $container_name"
        fi
    done | sort -t . -k 3,3n -k 4,4n
}

Вы должны изменить переменную сеть на свое собственное сетевое имя.


docker inspect CONTAINER_ID | grep "IPAddress"


Опция --format проверки приходит на помощь.

Современный синтаксис клиента Docker:

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

Синтаксис клиента старого Docker:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id

Который вернет только IP-адрес.


docker inspect <container id> | grep -i ip

Например:

docker inspect 2b0c4b617a8c | grep -i ip




docker