web-dev-qa-db-ja.com

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

LXCコンテナーを管理するためのスクリプトをいくつか作成しました。コンソールに接続している場合、ifconfigを介してIPアドレスを取得できます。

今、これらのコンテナにsshで接続したいと思います。スクリプトを作成できるようにIPアドレスを取得するにはどうすればよいですか?また、アドレスを手動で設定する必要はありません(ただし、それが唯一のオプションである場合は設定します)。

これまで、lxc-startを使用してみましたが、/sbin/initを実行する前にマシンにIPアドレスがありません。

19
Stefano Palazzo

これを行う最も簡単な方法は次のとおりです。

lxc-info -n container-name -iH

これは、他のテキストなしでIPアドレスを返します。

-iオプションはIPアドレスが返されることを指定し、-Hオプションは人間が読める出力、つまりラベルを無効にします。詳細については、lxc-info manページ を参照してください。

LXCの新しいバージョンの編集:

lxc info container-name

その後、詳細情報を取得します。 「Ips:」ブロックを見てください。これは以下のように見えるはずです。この場合、最初のIPv4アドレス(10.121.48.241)を取得できます。

Ips:
  eth0: inet    10.121.48.241   vethSBP4RR
  eth0: inet6   fda5:b9a9:f3b9:ba32:216:3eff:fe4a:4d7d  vethSBP4RR
  eth0: inet6   fe80::216:3eff:fe4a:4d7d    vethSBP4RR
  lo:   inet    127.0.0.1
  lo:   inet6   ::1
10
Andy

コンテナでの実行がUbuntuでサポートされていないように見えるので、私の次の最良の提案は、dnsmasqが配布しているIPアドレスのリースを調べることです。それは本当に簡単です:

$ cat /var/lib/misc/dnsmasq.leases
1363699477 00:16:3e:4a:ce:a4 10.0.3.83 containername *

使用できる部分は2つしかないため、それをより適切にフォーマットできます。

$ awk '{ print $4,$3 }' /var/lib/misc/dnsmasq.leases | column -t
containername  10.0.3.83
10
Oli

技術的に言えば、次のようにlxc-attachを使用して接続し、コマンドを起動(および出力を処理)できる必要があります。

Sudo lxc-attach --name containername -- ifconfig

これには、コンテナが実行されている必要があります。

注:これを機能させることができませんでした。 LXCをインストールしてこれを試してみましたが、名前空間エラー、欠落ファイル、その他のナンセンスが多数見られました。しかし、LXCでの私の唯一の経験は、この質問に費やした10分です。うまくいくかもしれません。そうではないかもしれません。幸運を!

7
Oli

これはUbuntu 14.04で機能します。

lxc-info -n $name -i

iPアドレスのみが必要な場合(スクリプトに便利)、(@ JulianHLamに感謝):

lxc-info -n $name -iH
5
vaab

またはdnsmasqを照会します(コンテナにIPを提供します)

Dig @10.0.3.1 $container-name +short
4
Carl Hörberg

それを行うためのPythonバージョン:

#!/usr/bin/python
from pylxd import Client

client = Client(endpoint='https://10.185.96.208:8443', verify=False,    cert=('.config/lxc/client.crt', '.config/lxc/client.key'))

myCtr = client.containers.get('YOUR_CTR_NAME')
addresses = myCtr.state().network['eth0']['addresses']
for a in addresses:
   if(a['scope'] == 'global'):
      print "Found IP [%s]" %(a['address'])
      break
2
Ektor

LXDを実行している場合、このコマンドは実行中のコンテナーのIPアドレスを取得するのに役立つことがあります

lxc exec <container-name> -- ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1
1
anastymous

以下のコマンドは、前の投稿のlxc-attachの例を置き換えます

Sudo lxc-execute --name containername --rcfile /usr/share/doc/lxc/examples/lxc-macvlan.conf /sbin/ifconfig

コンテナ内でifconfigを実行し、出力を表示します。

The --rcfile argument might not be required. Without it the command failed with 

lxc-execute: No such file or directory - failed to exec /usr/lib/lxc/lxc-init 

lxc-execute: invalid sequence number 1. expected 2

何かが正しく設定されていないようです。回避策として、LXCのドキュメントで提供されている定義済みの構成テンプレートを使用して、さらに調査することなく機能させました。

1
cfalguiere

Sudo lxc-ls --fancy -F ipv4 $my_container_name | tail -1

0
ramigg

簡単な答えは

Sudo lxc-ls -f | grep "container_name"

Container_nameを覚えていない場合は、Sudo lxc-ls -fと入力するだけです。

0
user646873

dnsmasqがあなたのためにやってくれます

ホストマシンのdnsmasqインスタンスを設定して、lxcのdnsmasqインスタンスに.lxcトップレベルドメインを照会します。

/ etc/default/lxc-netで、次の行のコメントを外します。

LXC_DOMAIN="lxc"

ホストのdnsmasqインスタンスがNetworkManagerによって起動される場合(最新のUbuntuデスクトップインストールの場合のように)、次の行を含む/etc/NetworkManager/dnsmasq.d/lxc.confというファイルを作成します。

server=/lxc/10.0.3.1

ホストのdnsmasqがNetworkManager以外で起動された場合、代わりに/etc/dnsmasq.d-available/lxcにその行を追加します:

server=/lxc/10.0.3.1

その後、変更を有効にするために再起動します。

service lxc-net stop
service lxc-net start
service network-manager restart

DNSに表示される前に、lxcコンテナを再起動するか、新しいDHCPリースを要求する必要がある場合があります。 (これを行ったときに必要だったかどうか覚えていません。)また、lxc-netが再起動時にdnsmasqの変更を取得しないというバグレポートを見たこともあるので、ホストシステムを再起動したいかもしれません念の為。

それから試してください:

$ Host mycontainer.lxc
mycontainer.lxc has address 10.0.3.21

$ ssh [email protected]
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-39-generic x86_64)
ubuntu@mycontainer:~$
0
ʇsәɹoɈ