web-dev-qa-db-fra.com

Comment obtenir l'adresse IP d'un conteneur LXC pour l'automatisation?

Comment obtenir l'adresse IP d'un conteneur LXC dans un format utilisable dans les scripts?

À l'heure actuelle, la commande lxc info <container> rapporte cette information, mais dans un format lisible par l'homme, avec beaucoup d'informations.

Je voudrais UNIQUEMENT OBTENIR l'adresse IP à partir du nom du conteneur.

Note : I AI à dupliquer cette question car les conteneurs Linux ont beaucoup changé.

L'installation lxd et l'utilisation de conteneurs non privilégiés sont la solution par défaut de nos jours (2017) et je pense que les solutions affichées sur la question d'origine ne résolvent pas le problème dans ce cas.

Dans tous les cas, j'ai installé le paquet lxc1 pour avoir accès à la commande lxc-info, mais cette commande ne reconnaît aucun de mes conteneurs sans privilège.

4
jgomo3

pylxd est l'interface client officielle de l'API python développée, prise en charge et approuvée par le projet LXD.

Instructions d'installation ici

$ 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
Craig Hicks

Une solution native (qui n’est pas plus jolie que la réponse de @ siloko) serait

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

Il y a des alternatives à awk, mais c'est tangent à la question.

2
Jonathan Y.

Jusqu'à présent, c'est le moyen le plus simple:

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

Mais peut-être que ce sera possible sans cut .

EDIT: Non coupé bash:

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

Astuce de @monstermunchkin tirée du problème ci-dessus.

2
anatoly techtonik
lxc list | grep nameofthecontainer | egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"

C'est ce que j'utilise, je passe le nom du conteneur sous forme de variable.

2
Neil

Probablement un peu moche mais:

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

vous obtiendrez seulement l'adresse IP

0
slowko