Как я могу получить IP-адрес контейнера LXC в формате, который я могу использовать в сценариях?
Прямо сейчас, команда lxc info <container>
сообщите ту информацию, но в человекочитаемом формате, с большой информацией.
Я хотел бы ТОЛЬКО для ПОЛУЧЕНИЯ IP-адреса, данного контейнерное имя.
Примечание: Я должен копировать этот вопрос, потому что Контейнеры Linux изменились много.
Установка lxd и использование непривилегированных контейнеров являются способом по умолчанию пойти это дни (2017), и я думаю, что решения, отправленные по исходному вопросу, не решают вопрос в этом случае.
В любом случае я установил пакет lxc1 для получения доступа к команде lxc-info
, но та команда не распознает ни одного из моих непривилегированных контейнеров.
Встроенное решение (который не так более симпатичен, чем ответ @siloko) было бы
lxc list "<name>" -c 4 | awk '!/IPV4/{ if ( $2 != "" ) print $2}'
, существуют альтернативы awk
, но это является тангенциальным к вопросу.
Вероятно, немного ужасный, но:
lxc-info -n my-container | grep IP: | tr -d ' ' | cut -f2 -d:
получит Вас просто IP-адрес
lxc list | grep nameofthecontainer | egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
Это - то, что я использую, я передаю контейнерное имя в как переменная.
lxc-info --name container --ips --no-humanize
печатает контейнерные IP-адреса.
Возвращенное значение является списком, потому что контейнер может иметь больше чем один адрес.
До сих пор это - самый легкий путь:
lxc list -c4 --format csv <container> | cut -d' ' -f1
Но возможно это будет возможно без cut
.
Править: Неразрезанный удар:
a=( $(lxc list -c4 --format csv u1) ) ip4=$a[1] echo $ip4
Подсказка от @monstermunchkin от вышеупомянутой проблемы.
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
Они используют сингл 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:]+'