เหตุใด ifconfig จึงไม่พร้อมใช้งานในตู้คอนเทนเนอร์ Ubuntu Docker


64

ด้วยฐานubuntu:12.04, ifconfigไม่สามารถใช้ได้ในภาชนะที่แม้ว่าipคำสั่งที่มีอยู่ว่าทำไมเป็นแบบนี้? และวิธีการที่จะได้รับifconfigในภาชนะบรรจุ?



ฉันรู้ว่าifconfigเลิกใช้แล้ว แต่บางโปรแกรมก็ยังขึ้นอยู่กับมัน
Pellaeon

3
นักพัฒนายังมีชีวิตอยู่หรือไม่? นี่เลิกใช้เมื่อหลายปีก่อน
Michael Hampton

มีข้อผิดพลาดเมื่อใช้ipในซอฟต์แวร์เวอร์ชันปัจจุบัน ฉันต้องการวิธีแก้ไขปัญหาอย่างรวดเร็ว
Pellaeon

1
"บางโปรแกรม" และ "มีข้อผิดพลาด": คุณเจาะจงมากกว่านี้ได้ไหม?
Mark Wagner

คำตอบ:


95

apt-get install net-toolsคุณสามารถติดตั้งกับ ifconfig (โดยเฉพาะโดยเพิ่มRUN apt-get install -y net-toolsลงใน Dockerfile ของคุณ)

จากการทดสอบของฉัน ifconfig รวมอยู่ใน ubuntu: 14.04


6
ยังทำให้ฉันสงสัยว่าทำไมมันไม่รวมโดยค่าเริ่มต้น แต่ฉันคิดว่าจุดของภาชนะนี้คือว่ามันน้อยที่สุดเท่าที่จะเป็นไปได้และยังคงทำงาน
Iguananaut

5
ภาคผนวกอื่น ๆ - บนอินสแตนซ์ใหม่ของคอนเทนเนอร์ Ubuntu รายการแพคเกจจะไม่ได้รับการเติมข้อมูลดังนั้นคุณต้องเรียกใช้sudo apt-get updateถ้าคุณยังไม่ได้ทำ
Iguananaut

1
ifconfigubuntu:16:04ไม่รวมอยู่ใน
JamesThomasMoon1979

11
วิธีตอบ @Iguananaut: Ubuntu VM คือ 500+ MB ในขณะที่รูปภาพ Ubuntu Docker น้อยกว่า 100MB ผู้ชายที่สร้างภาพคอนเทนเนอร์ต้องวาดเส้นตามสิ่งที่ควรรวมอยู่ในแพ็คเกจ / ไบนารีและสิ่งใดที่ไม่ควรเก็บไว้เพื่อความจำเป็นพื้นฐานเท่านั้น คุณรู้ไหมว่าทั้งหมดนี้เหมาะสมกว่าถ้าคุณคิดว่าคอนเทนเนอร์เป็นกระบวนการและไม่ใช่เป็น 'สภาพแวดล้อมการคำนวณแบบแยกตัวที่จะเล่นภายในและรอบ ๆ '
Rushi Agrawal

13

เว้นแต่และจนกว่าคุณจะสามารถติดตั้งเครื่องมือเน็ตได้คุณไม่จำเป็นต้องให้มันเป็นค่าเริ่มต้น นอกจากนี้หากคุณต้องการดูที่อยู่ IP ก็จะมีคำสั่งอื่นให้ใช้งานโดยนักเทียบท่าเอง: -

docker inspect <container_name or container_id>

นักเทียบท่าตรวจสอบไวยากรณ์:docker inspect [OPTIONS] NAME|ID [NAME|ID...]

cmd นี้จะแสดงรายละเอียดการใช้งานคอนเทนเนอร์รวมถึงที่อยู่ IP ทุกครั้ง


4

ฉันยังสะดุดในความรำคาญ แต่เป็น Devendra เขียนนักเทียบท่าตรวจสอบnet-toolsคุณจะได้รับรายละเอียดทั้งหมดเกี่ยวกับภาชนะบรรจุโดยไม่ต้อง ในกรณีของฉันฉันต้องการ IP ของคอนเทนเนอร์ ในการแยก IP คุณสามารถใช้:

docker inspect <container-id> \
  | grep "\"IPAddress\"" -m 1 \
  | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'

แก้ไขแม้แต่สัญกรณ์สั้นลงเพื่อรับ IP ของคอนเทนเนอร์ (ดูตัวอย่างนักเทียบท่าตรวจสอบ ):

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container-id-or-name>

อย่างไรก็ตามสิ่งนี้จะไม่ทำงานภายในคอนเทนเนอร์ตามที่ OP ร้องขอ
Gerald Schneider

คุณถูก. ดูเหมือนว่าเป็นเคล็ดลับที่มีประโยชน์และฉันคิดว่า OP น่าจะมองหา IP ของคอนเทนเนอร์ด้วย
เชื่อฟัง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.