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


19

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

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

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


このバグレポートに関連する同じ問題、bugs.launchpad.net / ubuntu / + source / lxc / + bug / 1389954には、Ubuntu 16.04 Server Edtionsでは動作しないdnsmasqが含まれるデスクトップでは問題ないという情報が含まれてます。 NetworkManagerによってキックされました(askubuntu.com/a/545265/599087で提案されているように、「フォレスト」によって)。osdir.com/ml/ubuntu-bugs/2016-10/msg05441.html
OpenITeX

回答:


10

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

lxc-info -n container-name -iH

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

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

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

lxc info container-name

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

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

LXDおよび非特権コンテナを使用する場合、このコマンドは役に立ちません。2017年にLXDによってプロモートされたデフォルトの特権のないコンテナでどのようにその情報を取得しますか?
jgomo3

10

コンテナで実行することは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

それは完全に機能します!
ステファノパラッツォ

2
参考:LXCの新しいバージョン(つまり、Raringのバージョン)は、の出力にIPアドレスを表示しますlxc-ls --fancy
ステファノパラッツォ

FYI、Ubuntuの上でこのIPのファイル名は、レコードがLXCブリッジ名などが含まれているリースdnsmasq.lxcbr0.leases
フリント

7

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

sudo lxc-attach --name containername -- ifconfig

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

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


もちろん、ifconfig eth0 | grep -Eo 'addr:[0-9.]+' | cut -d: -f2IPアドレスだけが必要な場合は、それをアップグレードします。
オリ

残念ながら、同じ種類のエラーが発生しています。No such file or directory - failed to open '/proc/28741/ns/pid'およびfailed to enter the namespace。問題を正確に説明するバグを見つけましが、それは2010
。– Stefano Palazzo

私はifconfigに完全なパスを使用する必要がありました:LXC-取り付け-nコンテナの/ sbin / ifconfigコマンド
Epeli

以下のようhelp.ubuntu.com/12.04/serverguide/lxc.htmlは言う、LXC-取り付けはサポートされていません。
チャステク14年

5

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

lxc-info -n $name -i

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

lxc-info -n $name -iH

スクリプトを介して呼び出す場合は、lxc-info -n $name -Hi余分な空白なしでIPだけを取得することもできます
Julian H. Lam


2

それを行うための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

1

以下のコマンドは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

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

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


0

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

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

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

$ host mycontainer.lxc
mycontainer.lxc has address 10.0.3.21

$ ssh ubuntu@mycontainer.lxc
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-39-generic x86_64)
ubuntu@mycontainer:~$

0

簡単な答えは

sudo lxc-ls -f | grep "container_name"

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.