Как я получаю IP-адрес контейнера LXC для автоматизации?

Как я могу получить IP-адрес контейнера LXC в формате, который я могу использовать в сценариях?

Прямо сейчас, команда lxc info <container> сообщите ту информацию, но в человекочитаемом формате, с большой информацией.

Я хотел бы ТОЛЬКО для ПОЛУЧЕНИЯ IP-адреса, данного контейнерное имя.

Примечание: Я должен копировать этот вопрос, потому что Контейнеры Linux изменились много.

Установка lxd и использование непривилегированных контейнеров являются способом по умолчанию пойти это дни (2017), и я думаю, что решения, отправленные по исходному вопросу, не решают вопрос в этом случае.

В любом случае я установил пакет lxc1 для получения доступа к команде lxc-info, но та команда не распознает ни одного из моих непривилегированных контейнеров.

5
задан 1 June 2017 в 07:36

7 ответов

Встроенное решение (который не так более симпатичен, чем ответ @siloko) было бы

lxc list "<name>" -c 4 | awk '!/IPV4/{ if ( $2 != "" ) print $2}'

, существуют альтернативы awk, но это является тангенциальным к вопросу.

2
ответ дан 23 November 2019 в 08:59

Вероятно, немного ужасный, но:

lxc-info -n my-container | grep IP: | tr -d ' ' | cut -f2 -d:

получит Вас просто IP-адрес

0
ответ дан 23 November 2019 в 08:59
lxc list | grep nameofthecontainer | egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"

Это - то, что я использую, я передаю контейнерное имя в как переменная.

2
ответ дан 23 November 2019 в 08:59
lxc-info --name container --ips --no-humanize

печатает контейнерные IP-адреса.

Возвращенное значение является списком, потому что контейнер может иметь больше чем один адрес.

-1
ответ дан 23 November 2019 в 08:59

До сих пор это - самый легкий путь:

lxc list -c4 --format csv <container> | cut -d' ' -f1

Но возможно это будет возможно без cut.

Править: Неразрезанный удар:

a=( $(lxc list -c4 --format csv u1) ) ip4=$a[1] echo $ip4

Подсказка от @monstermunchkin от вышеупомянутой проблемы.

3
ответ дан 23 November 2019 в 08:59

pylxd является официальным Python клиентский интерфейс API, разработанный, поддерживаемый и подтвержденный проектом LXD.

Инструкции по установке здесь

$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
>>> from pylxd import Client
>>> client = Client()
>>> for p in client.containers.all(): print(p.name, p.state().network['eth0']['addresses'][0]['address'])
... 
stretch-cc 10.76.67.242
2
ответ дан 23 November 2019 в 08:59

Они используют сингл grep.

Для IPv4:

lxc info container-name |grep -Po '\seth\d:\sinet\s+\K[0-9\.]+'

Для IPv6 (вероятно, перечислит несколько дюйм/с):

lxc info container-name |grep -Po '\seth\d:\sinet6\s+\K[0-9a-f:]+'
0
ответ дан 23 November 2019 в 08:59

Другие вопросы по тегам:

Похожие вопросы: