मुझे एलएक्ससी कंटेनर का आईपी पता कैसे मिलेगा?


19

मैंने LXC कंटेनरों के प्रबंधन के लिए कुछ स्क्रिप्ट लिखी हैं, और मैं ifconfig के माध्यम से अपने आईपी पते प्राप्त कर सकता हूं, यह मानते हुए कि मैं कंसोल से जुड़ा हुआ हूं।

अब मैं ssh के माध्यम से इन कंटेनरों से जुड़ना चाहता हूं। मैं उनके आईपी पते को इस तरह से कैसे प्राप्त कर सकता हूं कि मैं एक स्क्रिप्ट लिख सकता हूं? मैं भी पते को मैन्युअल रूप से सेट नहीं करना चाहता (लेकिन मैं इसे करूँगा, अगर यह एकमात्र विकल्प है)।

अब तक, मैंने उपयोग करने की कोशिश की है lxc-start, लेकिन मेरे चलने से पहले मशीन का आईपी पता नहीं है /sbin/init


यहाँ एक ही समस्या, इस बग-रिपोर्ट से संबंधित है, bugs.launchpad.net/ubuntu/+source/lxc/+bug/1389954 जिसमें Ubuntu 16.04 सर्वर एडिशन में काम नहीं करने के बारे में corroborative जानकारी है , लेकिन डेस्कटॉप में ठीक है जहां 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विकल्प निर्दिष्ट करता है कि आईपी पते प्रत्यावर्तित किया जाना चाहिये और -Hविकल्प को अक्षम कर मानव पठनीय उत्पादन यानी लेबल। अधिक जानकारी के लिए lxc-info man पेज देखें

LXC के नए संस्करण के लिए EDIT:

lxc info container-name

फिर आपको विस्तृत जानकारी मिलती है। "आईपीएस:" ब्लॉक को देखें, जिसे नीचे की तरह दिखना चाहिए। आप 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 द्वारा प्रचारित डिफ़ॉल्ट अप्रकाशित कंटेनरों के साथ आपको वह जानकारी कैसे मिलेगी?
14:34 पर jgomo3

10

कंटेनरों में चलने वाली चीजों के रूप में उबंटू में समर्थित होना दिखाई नहीं देता है, मेरा अगला सबसे अच्छा सुझाव आईपी एड्रेस पट्टों को देखना है dnsmasqजो हाथ से बाहर हैं। यह वास्तव में सरल है:

$ 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 के नए संस्करण (यानी रेयरिंग में) के आउटपुट में आईपी एड्रेस दिखाते हैं lxc-ls --fancy
Stefano Palazzo

FYI करें, उबंटू पर इस आईपी पट्टों के नाम के रिकॉर्ड में 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: -f2अगर आप सिर्फ आईपी एड्रेस चाहते हैं।
ओली

दुर्भाग्य से मुझे उसी तरह की त्रुटियाँ हो रही हैं। No such file or directory - failed to open '/proc/28741/ns/pid'और failed to enter the namespace। मैंने पाया एक बग है कि ठीक समस्या का वर्णन करता है, लेकिन यह 2010 से है
Stefano Palazzo

मुझे ifconfig के लिए पूर्ण पथ का उपयोग करना था: lxc-संलग्न-कंटेनर / sbin / ifconfig
Epeli

जैसा कि help.ubuntu.com/12.04/serverguide/lxc.html कहता है, lxc-संलग्न समर्थित नहीं है।

5

यह Ubuntu 14.04 पर काम करता है:

lxc-info -n $name -i

और यदि आप केवल आईपी पते (लिपियों के लिए उपयोगी) चाहते हैं, (धन्यवाद @ जूलियनहैम))

lxc-info -n $name -iH

अगर किसी स्क्रिप्ट के माध्यम से कॉल किया जाता है, तो आप lxc-info -n $name -Hiबिना आईपी के सिर्फ एक्स्ट्राएर्न व्हाट्सएप प्राप्त करने के लिए भी कर सकते हैं
जूलियन एच। लैम


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 द्वारा लॉन्च किया गया है (जैसा कि अधिकांश वर्तमान उबंटू डेस्कटॉप इंस्टॉलेशन के साथ है) तो /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"

यदि आपको कन्टेनर याद नहीं है, तो बस sudo lxc-ls -f टाइप करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.