как узнать host docker internal
Как получить IP-адрес хоста docker из контейнера docker
Как говорится в названии. Мне нужно иметь возможность получить IP-адрес хостов docker и portmaps от хоста к контейнеру и сделать это внутри контейнера.
13 ответов
Как заметил @MichaelNeale, нет смысла использовать этот метод в Dockerfile (за исключением случаев, когда нам нужен этот IP только во время сборки), потому что этот IP будет жестко закодирован во время сборки.
On Docker для Mac, начиная с версии 18.03, вы можете использовать host.docker.internal как IP хоста.
Примечание, как в документация, » это для целей разработки[s] и не будет работать в производственной среде за пределами Docker для Mac.»Это потому, что в Docker для Mac «вы не можете увидеть интерфейс docker0 на хосте. Этот интерфейс фактически находится внутри виртуальной машины.»
например, у меня есть переменные среды, установленные на моем хосте:
в своем docker-compose.yml файл, у меня есть это:
Обновление: On настройки для Mac, начиная с версии 18.03, вы можете использовать хоста.докер.внутренний как IP хоста. См.allanberry это!—15—>. Для предыдущих версий Docker для Mac может быть полезен следующий ответ:
на Docker для Mac docker0 мост не существует, поэтому другие ответы здесь могут не работать. Однако весь исходящий трафик маршрутизируется через родительский хост, поэтому, пока вы пытаетесь подключиться к IP-адресу, он распознает как сам по себе (и контейнер docker не думает, что это сам по себе), вы должны быть в состоянии подключиться. Например, если вы запустите это с родительского компьютера, запустите:
это должно показать вам IP вашего Mac в его текущей сети, и ваш контейнер docker также должен иметь возможность подключиться к этому адресу. Это, конечно, боль, если этот IP-адрес когда-либо изменится, но вы можете добавить пользовательский петлевой IP-адрес на свой Mac, который контейнер не думает, что сам по себе, делая что-то вроде этого родительская машина:
затем вы можете проверить соединение из контейнера docker с telnet. В моем случае я хотел подключиться к удаленному серверу xdebug:
теперь, когда трафик входит в ваш Mac, адресованный для 192.168.46.49 (и весь трафик, выходящий из вашего контейнера, проходит через ваш Mac), ваш Mac будет считать, что IP-это сам. Когда вы закончите использовать этот IP, вы можете удалить псевдоним loopback как это:
одна вещь, о которой нужно быть осторожным, заключается в том, что контейнер docker не будет отправлять трафик родительскому хосту, если он думает, что назначение трафика само по себе. Поэтому проверьте интерфейс loopback внутри контейнера, если у вас возникли проблемы:
в моем случае, это показал inet 127.0.0.1/8 что означает, что я не мог использовать IPs в
🐳 Как узнать IP-адрес Docker контейнера
Хотите узнать, какой IP-адрес у вашего запущенного контейнера?
Вы можете проверить работающий контейнер, чтобы получить эту информацию.
Команда inspect предоставляет много подробностей о проверяемом контейнере.
Пролистайте к концу вывода и загляните в раздел Networks, чтобы получить IP-адрес контейнера.
Вы также можете использовать команду grep, чтобы вывести только строки, соответствующие шаблону «IPAddress».
Не знаете название или идентификатор контейнера? Используйте команду sudo docker ps.
Не пугайтесь, если у вашего контейнера более одного IP-адреса.
В этом нет ничего необычного.
Чтобы понять это, вам нужно разобраться, как контейнеры взаимодействуют друг с другом.
Я объясню вам это в следующем разделе, а затем расскажу о некоторых других методах получения IP-адреса запущено контейнера Docker.
Как общаются Docker контейнеры?
Docker – это инструмент для упаковки и доставки программного обеспечения с использованием технологии контейнеризации.
Программное обеспечение может иметь множество целей, от, возможно, простой обработки текста до полноценного веб-сервера, на котором размещаются ваши файлы.
Каждое из этих программ разбивается на микросервисы, а затем упаковывается в контейнеры.
В зависимости от назначения программного обеспечения одной службе может потребоваться взаимодействие с другой.
Например, рассмотрим WordPress.
Есть две службы: одна – это веб-сервер, фронтенд, а другая – бэкэнд, база данных.
Интерфейс должен взаимодействовать с базой данных, иначе он просто не будет работать.
Эта связь достигается за счет наличия по крайней мере двух сетевых интерфейсов, связанных с каждым из этих двух контейнеров, причем оба интерфейса подключены к одной и той же сети.
Эта сеть называется «docker network».
Docker network
Считайте Docker network пулои доступных IP-адресов.
Если два контейнера получат IP-адреса из одного пула, они смогут обмениваться данными друг с другом.
В основном есть два типа сетей: сети по умолчанию или предварительно определенные сети и сети, определяемые пользователем.
Вы можете получить список сетей, используя следующую команду:
Проигнорируйте последние две записи и сосредоточьтесь на первой сети.
Сеть bridge – это сеть по умолчанию, к которой будет подключаться каждый контейнер, если не другое указан явно.
Вы можете получить более подробную информацию об этой сети, выполнив команду docker network inspect bridge.
Я собираюсь отфильтровать вывод, так как для этой демонстрации мне не нужны все данные, которые мы можем вывести.
Если у вас не установлен jq, установите его с помощью диспетчера пакетов вашего дистрибутива.
У каждой из этих сетей есть подсеть, в случае сети bridge это подсеть 172.17.0.0/16.
Это означает, что всего имеется 65534 – 1 = 65533 используемых хостов или IP-адресов.
Я отминусовал один, так как для шлюза выделен 172.17.0.1.
Вы также можете увидеть это, используя следующую команду:
Проверка IP-адреса Docker контейнера
Есть несколько способов проверить IP-адрес[а], связанный с вашим контейнером, вот их список, включая примеры команд.
Метод 1: Inspect
Подкоманда inspect чрезвычайно полезна.
Контейнер можно проверить с помощью команды docker container inspect [CONTAINER ID] | [CONTAINER NAME].
Проверка контейнера означает получение как можно большего количества информации о контейнере, от портов, переменных среды до точек монтирования, данных контрольной группы и т. д.
Из вывода можно извлечь IP-адрес.
Если вы запустите команду inspect для контейнера, вы получите кучу информации в формате JSON.
Прокрутите вниз, пока не найдете ключ NetworkSettings, там найдите IPAddress.
Это и есть IP-адрес вашего контейнера.
Вот отфильтрованный вывод:
Метод 2: Использование оболочки контейнера
Это наиболее простой метод, но я его не рекомендую.
В этом методе вы присоединяете свой stdin|stdout к контейнеру и запускаете команду ip (или другую команду, которая показывает IP-адреса, связанные с сетевыми адаптерами).
Причина, по которой я не рекомендую это делать, заключается в том, что многие образа довольно легкие и не содержат команду ip (или что-то подобное).
Возьмем в качестве примера образ ubuntu:20.04, запустим контейнер, подобный следующему:
Чтобы контейнер работал, я использовал команду sleep 1d.
Теперь запустите процесс оболочки внутри контейнера и прикрепите свой stdin|stdout вот таким образом:
Оказавшись в этом контейнере, попробуйте запустить ip или ifconfig.
Вы увидите что-то вроде следующего:
Чтобы эти команды работали, вам необходимо установить соответствующие пакеты.
Чтобы получить команду ip, установите пакет iproute2 и повторно запустите команду ip a.
Теперь вы можете увидеть, что IP-адрес, связанный с интерфейсом eth0@if5, равен 172.17.0.2.
Обратите внимание на сеть, частью которой является этот контейнер.
Поскольку я не создавал и не подключал пользовательскую сеть к этому контейнеру, он был подключен к сети bridge, поэтому сеть этого IP-адреса 172.17.0.0.
Метод 3: проверив саму сеть
Всякий раз, когда контейнер подключается к сети, этот подключенный контейнер также виден из сети вместе с IP-адресом, назначенным этим контейнерам.
Поскольку мой контейнер подключен к сети bridge, я могу проверить сеть с помощью следующей команды:
Чтобы продемонстрировать это, я развернул еще один контейнер с именем ip.
Вы можете увидеть контейнеры и IP-адреса в указанном выше выводе JSON.
Теперь извлечь IP-адрес конкретного контейнера здесь немного сложнее.
Если вы знаете идентификатор контейнера, вы можете использовать jq следующим образом:
Какой метод выбрать?
Это были все методы, с помощью которых вы можете получить IP-адрес [а] контейнеров.
Второй метод, хотя и интуитивно понятен, не воспроизводится.
В большинстве случаев первый метод самый простой и хорошо выполняет свою работу.
Но может наступить время, когда вы захотите проверить, какие контейнеры подключены к определенной сети, и получить IP-адреса в этой сети.
В этом случае имеет смысл проверить сеть и подсветить IP-адреса.
Вы можете получить все имена контейнеров и назначенные им IP-адреса из сети вот так:
Смените bridge на другую сеть, и вы получите все контейнеры и их IP-адреса.
Надеюсь, эта статья была для вас полезной.
Если у вас есть какие-либо вопросы, дайте мне знать в комментариях ниже.
Сети Docker изнутри: как Docker использует iptables и интерфейсы Linux
Я познакомился с Docker довольно давно и, как и большинство его пользователей, был мгновенно очарован его мощью и простотой использования. Простота является основным столпом, на котором основывается Docker, чья сила кроется в легких CLI-командах. Когда я изучал Docker, я захотел выяснить, что происходит у него в бэкграунде, как вообще все происходит, особенно что касается работы с сетью (для меня это одна из самых интересных областей).
Я нашел много разной документации о том, как создавать контейнерные сети и управлять ими, но в отношении того, как именно они работают, материалов намного меньше. Docker широко использует Linux iptables и bridge-интерфейсы для создания контейнерных сетей, и в этой статье я хочу подробно рассмотреть именно этот аспект. Информацию я почерпнул, в основном, из комментариев на github-е, разных презентаций, ну и из моего собственного опыта. В конце статьи можно найти список полезных ресурсов.
Я использовал Docker версии 1.12.3 для примеров в этой статье. Я не ставил своей целью дать исчерпывающее описание Docker-сетей или написать полное введение в эту тему. Я надеюсь, что этот материал будет полезен для пользователей, и я буду рад, если вы в комментариях оставите обратную связь, укажете на ошибки или скажете, чего недостает.
Оглавление
Обзор сетей Docker
Сеть Docker построена на Container Network Model (CNM), которая позволяет кому угодно создать свой собственный сетевой драйвер. Таким образом, у контейнеров есть доступ к разным типам сетей и они могут подключаться к нескольким сетям одновременно. Помимо различных сторонних сетевых драйверов, у самого Docker-а есть 4 встроенных:
Сетевые драйвера Bridge и Overlay, возможно, используются чаще всего, поэтому в этой статье я буду больше уделять им внимание.
Сети типа мост (bridge)
По умолчанию для контейнеров используется bridge. При первом запуске контейнера Docker создает дефолтную bridge-сеть с одноименным названием. Эту сеть можно увидеть в общем списке по команде docker network ls :
Чтобы проинспектировать ее свойства, запустим команду docker network inspect bridge :
Bridge-интерфейсы в Linux
Bridge-интерфейсы Linux похожи на свичи тем, что они присоединяют несколько интерфесов к одной подсети и перенаправляют трафик на основе MAC-адресов. Как будет видно ниже, у каждого контейнера, привязанного к bridge-сети, будет свой собственный виртуальный интерфейс на хосте, и все контейнеры в одной сети будут привязаны к одному интерфейсу, что позволит им передавать друг другу данные. Можно получить больше данных о статусе моста при помощи утилиты brctl :
Как только мы запустим контейнеры и привяжем их к этой сети, интерфейс каждого из этих контейнеров будет выведен в списке в отдельной колонке. А если включить захват трафика в bridge-интерфейсе, то можно увидеть, как передаются данные между контейнерами в одной подсети.
Виртуальные интерфейсы Linux
Container Networking Model дает каждому контейнеру свое собственное сетевое пространство. Если запустить команду ifconfig внутри контейнера, то можно увидеть его интерфейсы такими, какими их видит сам контейнер:
Впрочем, eth0, который представлен в этом примере, можно увидеть только изнутри контейнера, а снаружи, на хосте, Docker создает соответствующую копию виртуального интерфейса, которая служит связью с внешним миром. Затем эти виртуальные интерфейсы соединяются с bridge-интерфейсами, о которых мы говорили выше, чтобы легче установить связь между разными контейнерами в одной подсети.
Чтобы рассмотреть этот процесс, для начала запустим два контейнера, связанных с дефолтной bridge-сетью, а затем посмотрим на конфигурацию интерфейса хоста.
До запуска каких-либо контейнеров у bridge-интерфейса docker0 нет никаких других присоединенных интерфейсов:
Затем я запустил два контейнера на образе ubuntu:14.04:
Сразу стало видно, что два интерфейса присоединены к bridge-интерфейсу docker0 (по одному на каждый контейнер):
Если начать пинговать Google с одного из контейнеров, то захват трафика с хоста на виртуальном интерфейсе контейнера покажет нам трафик контейнеров:
Аналогично можно выполнить пинг от одного контейнера к другому.
Затем начинаем пинг от одного контейнера к другому:
Чтобы увидеть трафик с хоста, мы можем сделать захват на любом из виртуальных интерфейсов, которые соотносятся с контейнерами, либо на bridge-интерфейсе (в данном случае docker0), что покажет нам все коммуникации внутри контейнеров данной подсети:
Находим Veth-интерфейс в контейнере
Если вы хотите узнать, какой veth-интерфейс хоста привязан к интерфейсу внутри контейнера, то простого способа вы не найдете. Однако, есть несколько методов, которые можно найти на разных форумах и в обсуждениях на github. Самый простой, на мой взгляд, способ я почерпнул из этого обсуждения на github, немного его изменив. Он зависит от того, присутствует ли ethtool в контейнере.
Например, у меня в системе запущены 3 контейнера:
Для начала, я выполняю следующую команду в контейнере и получаю номер peer_ifindex:
Затем на хосте я использую peer_ifindex, чтобы узнать имя интерфейса:
В данном случае интерфейс называется veth7bd3604.
iptables
Docker использует linux iptables, чтобы контролировать коммуникации между интерфейсами и сетями, которые он создает. Linux iptables состоят из разных таблиц, но нам в первую очередь интересны только две из них: filter и nat. Таблица filter содержит правила безопасности, которые решают, допускать ли трафик к IP-адресам или портам. С помощью таблицы nat Docker дает контейнерам в bridge-сетях связываться с адресатами, которые находятся снаружи хоста (иначе пришлось бы добавлять маршруты к контейнерным сетям в сети хоста).
iptables:filter
Таблицы в iptables состоят из различных цепочек, которые соответствуют разным состояниям или стадиям обработки пакета на хосте. По умолчанию, у таблицы filter есть 3 цепочки:
Input для обработки входящих пакетов, предназначенных для того же хоста, на который они приходят;
Output для пакетов, возникающих на хосте, предназначенных для внешнего адресата;
Forward для обработки входящих пакетов, предназначенных для внешнего адресата.
Каждая цепочка включает в себя правила, которые определяют, какие действия и при каких условиях надо применить к пакету (например, отклонить или принять его). Правила обрабатываются последовательно, пока не будет найдено соответствие, иначе применяются дефолтные правила цепочки. Также в таблице можно задать кастомные цепочки.
Жирным выделены разные цепочки и дефолтные установки для каждой из них (у кастомных цепочек дефолтных установок нет). Также видно, что Docker добавил две кастомные цепочки: Docker и Docker-Isolation, также добавил правила в цепочку Forward, целью которых являются эти две новые цепочки.
Цепочка Docker-isolation
Можно увидеть несколько правил DROP, которые блокируют трафик между всеми bridge-интерфейсами, которые создал Docker, и таким образом не дают сетям обмениваться данными.
icc=false
iptables:nat
Результат этой команды можно увидеть в таблице nat:
В этой цепочке postrouting можно увидеть все сети, которые созданы под действием masquerade, которое применяется, когда они передают данные любому хосту вне своей собственной сети.
Как получить IP-адрес узла докера из контейнера докера
Как видно из названия. Мне нужно иметь возможность получить IP-адрес хоста докера и сопоставления портов от хоста к контейнеру, и делать это внутри контейнера.
Как заметил @MichaelNeale, нет смысла использовать этот метод Dockerfile (кроме случаев, когда нам нужен этот IP только во время сборки), потому что этот IP будет жестко задан во время сборки.
Начиная с версии 18.03, вы можете использовать host.docker.internal в качестве IP- адреса хоста.
Например, на моем хосте установлены переменные окружения:
В моем docker-compose.yml файле у меня есть это:
В Docker для Mac docker0 мост не существует, поэтому другие ответы здесь могут не работать. Однако весь исходящий трафик направляется через ваш родительский хост, поэтому до тех пор, пока вы пытаетесь подключиться к IP-адресу, который он распознает как сам по себе (а док-контейнер не считает себя таким), вы должны иметь возможность подключиться. Например, если вы запускаете это с родительского компьютера, запустите:
Это должно показать вам IP вашего Mac в его текущей сети, и ваш док-контейнер должен также иметь возможность подключиться к этому адресу. Это, конечно, неприятно, если этот IP-адрес когда-либо изменится, но вы можете добавить свой петлевой IP-адрес к вашему Mac, который контейнер не считает самим, выполнив что-то вроде этого на родительской машине:
Затем вы можете проверить соединение из контейнера Docker с помощью telnet. В моем случае я хотел подключиться к удаленному серверу xdebug:
Теперь, когда трафик поступает на ваш Mac с адресом 192.168.46.49 (и весь трафик, выходящий из вашего контейнера, проходит через ваш Mac), ваш Mac будет считать, что IP сам по себе. Когда вы закончите использовать этот IP-адрес, вы можете удалить псевдоним петли следующим образом:
Одна вещь, о которой следует быть осторожным, заключается в том, что док-контейнер не будет отправлять трафик на родительский хост, если он думает, что адресат трафика сам по себе. Поэтому проверьте интерфейс обратной связи внутри контейнера, если у вас возникли проблемы:
В моем случае это показало, inet 127.0.0.1/8 что означает, что я не мог использовать любые IP-адреса в 127.* диапазоне. Вот почему я использовал 192.168.* в приведенном выше примере. Убедитесь, что используемый вами IP-адрес не конфликтует с чем-то в вашей сети.
Как получить IP-адрес хоста докера из контейнера докеров
Как говорится в названии. Мне нужно иметь возможность получить IP-адрес хостов докеров и портлетов от хоста к контейнеру и сделать это внутри контейнера.
ОТВЕТЫ
Ответ 1
Как заметил @MichaelNeale, нет смысла использовать этот метод в Dockerfile (за исключением случаев, когда нам нужен этот IP только во время сборки), поскольку этот IP-адрес будет жестко запрограммирован во время сборки.
Ответ 2
Начиная с версии 18.03, вы можете использовать host.docker.internal в качестве IP- host.docker.internal хоста.
Работает в Docker для Mac, Docker для Windows и, возможно, на других платформах. (шляпный наконечник joanlofe)
Обратите внимание, как и в документации для Mac и Windows, это только для целей разработки.
Например, на моем хосте установлены переменные окружения:
В моем файле docker-compose.yml меня есть это:
Ответ 3
Обновление: в Docker для Mac, начиная с версии 18.03, вы можете использовать host.docker.internal как IP-адрес хоста. См. Ответ allanberry. Для предыдущих версий Docker для Mac может быть полезен следующий ответ:
В Docker for Mac docker0 не существует, поэтому другие ответы здесь могут не работать. Однако весь исходящий трафик маршрутизируется через ваш родительский хост, поэтому пока вы пытаетесь подключиться к IP-адресу, который он распознает как сам (и контейнер-докер не думает сам), вы должны иметь возможность подключиться. Например, если вы запустили это из запуска родительской машины:
Это должно показать вам IP вашего Mac в его текущей сети, и ваш контейнер докеров должен также иметь возможность подключиться к этому адресу. Это, конечно, боль, если этот IP-адрес когда-либо изменился, но вы можете добавить настраиваемый IP-адрес циклы на ваш Mac, чтобы контейнер не думал сам, выполнив что-то вроде этого на родительской машине:
Затем вы можете проверить соединение из контейнера докера с помощью telnet. В моем случае я хотел подключиться к удаленному серверу xdebug:
Теперь, когда на ваш Mac поступает трафик на 192.168.46.49 (и весь трафик, покидающий ваш контейнер, проходит через ваш Mac), ваш Mac будет считать, что сам IP. Когда вы закончите использовать этот IP-адрес, вы можете удалить псевдоним loopback следующим образом:
Одна вещь, о которой нужно быть осторожным, заключается в том, что контейнер докеров не будет отправлять трафик на родительский хост, если он считает, что назначение трафика само по себе. Поэтому проверьте интерфейс loopback внутри контейнера, если у вас есть проблемы:
Ответ 4
Для тех, кто запускает Docker в AWS, метаданные экземпляра для хоста все еще доступны изнутри контейнера.
Ответ 5
Единственный способ передачи информации о хосте в качестве среды при создании контейнера
Ответ 6
—add-host может быть более чистым решением (но без части порта с этим решением может обрабатываться только хост). Итак, в вашей команде docker run сделайте что-то вроде:
Ответ 7
Затем запустите внутри контейнера
Хост имеет изменяющийся IP-адрес (или не имеет, если у вас нет доступа к сети). Начиная с 18.03, мы рекомендуем подключаться к специальному DNS-имени host.docker.internal, который разрешает внутренний IP-адрес, используемый хостом. Это для целей разработки и не будет работать в производственной среде за пределами Docker для Windows.
Ответ 8
Докер для Mac Я хочу подключиться из контейнера к службе на хосте
Ответ 9
Внутри пользователя контейнера bashrc :
Ответ 10
Вот еще один вариант для тех, кто работает Docker в AWS. Этот вариант позволяет избежать использования apk для добавления пакета curl и сохранения драгоценного 7mb пространства. Используйте встроенный wget (часть монолитного двоичного файла BusyBox):
Ответ 11
В linux вы можете запускать
В macOS ваша хост-машина не является хостом Docker. Docker установит его хост-систему в VirtualBox.
Ответ 12
Стандартные рекомендации для большинства приложений, которые хотят сделать это автоматически: нет. Вместо этого человек, выполняющий контейнер, вводит внешнее имя хоста /IP-адрес в качестве конфигурации, например, в качестве переменной среды или файла конфигурации. Позволяя пользователю вводить это дает вам наиболее портативный дизайн.
Почему это так сложно? Поскольку контейнеры по своей природе изолируют приложение от среды хоста. По умолчанию пространство сети относится именно к этому контейнеру, а сведения о хосте защищены от процесса, выполняющегося внутри контейнера, которому нельзя доверять полностью.
Существуют различные варианты в зависимости от вашей конкретной ситуации:
Если ваш контейнер работает с сетью хоста, вы можете посмотреть таблицу маршрутизации на хосте напрямую, чтобы увидеть маршрут по умолчанию, например:
Пример, показывающий это с хост-сетью в контейнере, выглядит следующим образом:
В некоторых версиях Docker Desktop они вводили запись DNS:
Если вы работаете в облачной среде, вы можете проверить сервис метаданных у облачного провайдера, например AWS:
Если вы хотите, чтобы ваш внешний/интернет-адрес, вы можете запросить удаленный сервис, как:
Каждый из них имеет ограничения и работает только в определенных сценариях. Наиболее переносимым вариантом по-прежнему является запуск вашего контейнера с IP-адресом, введенным в качестве конфигурации, например, здесь можно запустить более раннюю команду ip на хосте и внедрить ее в качестве переменной среды:
Ответ 13
Ответ 14
Вот как я это делаю. В этом случае он добавляет запись хостов в /etc/hosts в образ докеры, указывающий на taurus-host, на мой локальный компьютер IP::
Затем изнутри контейнера Docker скрипт может использовать имя узла taurus-host, чтобы выйти на мою локальную машину, на которой размещается контейнер докеров.
Ответ 15
Может быть, созданный мною контейнер тоже полезен https://github.com/qoomon/docker-host
Вы можете просто использовать имя контейнера dns для доступа к хост-системе, например, curl http://dockerhost: 9200, поэтому вам не нужно беспокоиться о каком-либо IP-адресе.
Ответ 16
Решение, которое я использую, основано на «сервере», который возвращает внешний адрес хоста Docker, когда он получает запрос http.
1) Запустите jwilder/nginx-прокси
2) Запустить ipify контейнер
Теперь, когда контейнер отправляет запрос http на сервер, например
IP-адрес хоста Docker возвращается через ipify через заголовок http «X-Forwarded-For»
Пример (сервер ipify имеет имя «ipify.example.com» и работает на порту 80, хост докера имеет IP 10.20.30.40):
Внутри контейнера теперь можно звонить:
Ответ 17
В Ubuntu команду hostname можно использовать со следующими параметрами:
Для присвоения переменной можно использовать следующую однострочную строку:
Ответ 18
Это минималистичная реализация в Node.js для того, кто запускает хост на экземплярах AWS EC2, используя вышеупомянутый экземпляр метаданных EC2.
и используется как
Ответ 19
У меня Ubuntu 16.03. Для меня
НЕ работает (генерировался неправильный ip)
Мое рабочее решение было таким:
Ответ 20
b) Получите IP-адрес одной или нескольких машин.