web-dev-qa-db-ja.com

自動化のためにLXCコンテナーのIPアドレスを取得するにはどうすればよいですか?

スクリプトで使用できる形式でLXCコンテナーのIPアドレスを取得するにはどうすればよいですか?

現在、コマンドlxc info <container>は、その情報を報告しますが、多くの情報を備えた人間が読める形式です。

コンテナ名が指定されたIPアドレスにのみGETにしたいです。

:IHAVEto duplicate この質問 Linuxコンテナが大きく変わったためです。

lxdをインストールし、非特権コンテナを使用することが、今日(2017年)のデフォルトの方法であり、元の質問に投稿された解決策は解決しないと思いますこの場合の問題。

いずれにしても、コマンドlxc-infoへのアクセスを取得するためにパッケージlxc1をインストールしましたが、そのコマンドは特権のないものを認識しませんコンテナ。

4
jgomo3

pylxdは、公式のpython AP​​Iクライアントインターフェイスです 開発、サポート、および承認 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
Craig Hicks

ネイティブソリューション(@silokoの答えよりもきれいではない)は次のようになります。

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

awkに代わるものがありますが、それは質問の正接です。

2
Jonathan Y.

これまでのところ、これが最も簡単な方法です。

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

しかし、多分それは可能です cutなし

EDIT:アンカットbash:

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

上記の問題の@monstermunchkinからのヒント。

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

これは私が使用しているもので、コンテナ名を変数として渡します。

2
Neil

おそらく少しいですが:

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

あなただけのIPアドレスを取得します

0
slowko