Dmidecode ไปข้างในโปรแกรมกำลังอยู่ใน kubernetes pod

0

คำถาม

ฉันต้องไปประจำวันกำลังอยู่ใน docker ตู้คอนเทนเนอร์. ฉันต้องการผลลัพธ์ของคำสั่ง dmidecode. แต่มันจะว่างเปล่า.

ไป:

func หลัก(){

    cmd := exec.Command("dmidecode","-t 1")
    x,_ := cmd.Output()
    fmt.Println("output =======", string(x))

}

Docker หนี:

docker วิ่งอุปกรณ์/dev/mem:/dev/mem--หมวก-เพิ่ม SYS_RAWIO-p 8086:8086-มัน my_img:1.0.1

ฉันพลาดอะไรที่นี่ไป?

ปรับปรุง:

ที่อยู่เหนือทำงานใน docker หลังจากที่ฉันถูกเพิ่มไว้ทางด้านล่างใน Dockerfile:

จาก alpine:ล่าสุด วิ่ง apk--ไม่มีแคช--ปรับปรุง--verbose เพิ่ม grep ตบ dmidecode&&
rm-rf แล้วคือ/var/แคช/apk/*/tmp/*/sbin/หยุด/sbin/poweroff/sbin/รีบูทระบบ

และด้านล่างใน docker compose แฟ้ม:

สิทธิพิเศษ:เรื่องจริง

แต่ตอนที่พยายามใช้อยู่เหนือใน kubernetes มันไม่สามารถดึง demidecode แสดงผลหน้าจอ

ผู้ช่วยจะเป็นจริงเกียรติอย่างยิ่ง

devops docker go kubernetes
2021-11-23 17:03:05
1

คำตอบที่ดีที่สุด

2

ฉันพลาดอะไรที่นี่ไป?

สำหรับการเริ่มต้นเกิดข้อผิดพลาดจัดการ

    x,_ := cmd.Output()

ไม่เคยไม่สนใจข้อผิดพลาดเกิดขึ้นระหว่างเข้าไป ไม่เหมือนภาษาชอบพูดว่า Pyhton ไม่มีข้อยกเว้นเลี้ยง-จัดการเกิดข้อผิดพลาดกลับค่าของคุณคือ เพียง โอกาสที่จะคิดให้ออกว่ามีบางอย่างผิดพลาดเกิดขึ้น

อย่างที่สองคุณก็ไม่สนใจคำสั่งของคุณเป็นมาตรฐานผลส่งออกสายข้อมูลสื่อนี้ นี่มันดูเหมือนจะมีประโยชน์เกิดข้อผิดพลาดข้อความเมื่อไรก็ตามที่มีคำสั่งประหารไม่ทำงานแล้ว os/exec's Output() ทำให้มันเป็นส่วนหนึ่งของเกิดข้อผิดพลาดค่า ถ้าไม่ได้อยู่แล้วจับตัวเข้า Cmd การปรับแต่งได้ ส่วนหนึ่งของคุณเกิดข้อผิดพลาดจัดการเรื่อควรจะทำ ประเภท assertion บนั้นเกิดข้อผิดพลาดค่าถ้าไม่ nil และถ้ามันใช้ได้ *exec.ExitErrorและถ้ามันประเภท assertion ทำสำเร็จตรวจ การแจ้งข้อความผิดพลาดของมันสนาม สำหรับข้อผิดพลาดเกิดขึ้นระหว่างข้อความไว้

-ชั้นสามฝั่งมองหาผู้บังคับบัญชาของคุฉันสามารถมองเห็นนางทำให้เป็นเรื่องง่ายผิดพลาด:

    cmd := exec.Command("dmidecode","-t 1")

ที่ที่ เชลล์,ช่องว่างขวางกั้นระหว่างอาร์กิวเมนต์. แต่มันไม่มีเชลล์นี่คุณกำลังส่ง -t 1 ทั้งหมดว่าต้องรับอาร์กิวเมนต์หนึ่งตัว dmidecode. คุณควรจะส่งพวกเขาให้ แยกกัน อาร์กิวเมนต์หนึ่งตัวแทนแน่นอน:

    cmd := exec.Command("dmidecode","-t", "1")

ในที่สุดคุณพบ ไม่สามารถวิ่ง dmidecode บ docker ตู้คอนเทนเนอร์ แต่ให้แน่ใจว่าอ่านแล้วเข้าใจยอมรับคำตอบ งั้นก็ไปของคุณ docker ตู้คอนเทนเนอร์ปรับแต่งค่าให้เป็นสามารถหนีไป dmidecode โดยไม่ต้องไปแล้ว เมื่อมันทำงานที่บรรทัดคำสั่งเดียวกันกับ docker การปรับแต่งค่าควรจะอนุญาตให้มันทำงานภายใต้ไป invocation เช่นกัน

2021-11-23 17:22:34

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่