LXC 컨테이너의 IP 주소는 어떻게 얻습니까?


19

LXC 컨테이너를 관리하기위한 몇 가지 스크립트를 작성했으며 콘솔에 연결되어 있다고 가정하면 ifconfig를 통해 IP 주소를 얻을 수 있습니다.

이제 ssh를 통해 이러한 컨테이너에 연결하고 싶습니다. 스크립트를 작성할 수있는 방식으로 IP 주소를 어떻게 얻습니까? 또한 주소를 수동으로 설정하고 싶지 않습니다 (그러나 이것이 유일한 옵션이라면 그렇게 할 것입니다).

지금까지을 사용해 보았지만 lxc-start실행하기 전에 컴퓨터에 IP 주소가 없습니다 /sbin/init.


이 버그 리포트에 관련된 여기에 같은 문제, bugs.launchpad.net/ubuntu/+source/lxc/+bug/1389954 이에 대한 확증적인 정보를 포함 하지 하는 dnsmasq이 어디 우분투 16.04 서버 Edtions에서 작업하지만, 데스크탑에서 확인되고 NetworkManager에 의해 발차 됨 ( 'forest'에 의해 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 매뉴얼 페이지를 참조하십시오 .

최신 버전의 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 2012 년

10

컨테이너에서 실행하는 것이 우분투에서 지원되지 않는 것 같습니다. 다음으로 제안하는 dnsmasq것은 전달 되는 IP 주소 임대를 보는 것입니다. 정말 간단합니다.

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

거기에는 두 가지 부분 만 사용되므로 더 멋지게 형식화 할 수 있습니다.

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

완벽하게 작동합니다!
Stefano Palazzo

2
참고로 LXC의 새 버전 (즉, Raring의 버전)은의 출력에 IP 주소를 표시합니다 lxc-ls --fancy.
Stefano Palazzo

참고로, 우분투에서이 IP 임대 레코드의 파일 이름은 lxc 브리지 이름을 포함합니다.dnsmasq.lxcbr0.leases
Flint

7

기술적으로 말하면 다음 lxc-attach과 같이 명령을 연결하고 실행하고 출력을 처리하는 데 사용할 수 있어야합니다 .

sudo lxc-attach --name containername -- ifconfig

컨테이너가 실행 중이어야합니다.

참고 :이 작업을 수행 할 수 없었습니다. LXC를 설치하고 이것을 시도했지만 네임 스페이스 오류, 파일 누락 및 기타 말도 안되는 소리를 보았습니다. 그러나 LXC에 대한 나의 유일한 경험은 내가이 질문에 소비 한 10 분입니다. 작동 할 수 있습니다. 그렇지 않을 수도 있습니다. 행운을 빕니다!


물론 ifconfig eth0 | grep -Eo 'addr:[0-9.]+' | cut -d: -f2IP 주소 만 원하면 업그레이드 하십시오.
Oli

불행히도 같은 종류의 오류가 발생합니다. No such file or directory - failed to open '/proc/28741/ns/pid'그리고 failed to enter the namespace. 문제를 정확하게 설명 하는 버그 를 찾았 지만 2010 년이되었습니다.
Stefano Palazzo

ifconfig의 전체 경로를 사용해야했습니다. lxc-attach -n container / sbin / ifconfig
Epeli

으로 help.ubuntu.com/12.04/serverguide/lxc.html는 말한다, 지원되지 않습니다 LXC-연결합니다.
ciastek

5

이것은 우분투 14.04에서 작동합니다.

lxc-info -n $name -i

그리고 IP 주소 만 원한다면 (스크립트에 유용합니다) @JulianHLam 덕분에)

lxc-info -n $name -iH

스크립트를 통해 전화를 거는 경우에도 lxc-info -n $name -Hi불필요한 공백없이 IP를 얻을 수 있습니다
Julian H. Lam


2

파이썬 버전 :

#!/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가 당신을 위해 그것을하자.

.lxc 최상위 도메인에 대한 lxc의 dnsmasq 인스턴스를 쿼리하도록 호스트 시스템의 dnsmasq 인스턴스를 구성하십시오.

/ 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.