Dmidecode uvnitř jděte program běží v kubernetes pod

0

Otázka

Mám jít rutiny běží v docker kontejneru. Potřebuji výstup příkaz dmidecode. Ale jeho příchod prázdné.

Go:

funkce main() {

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

}

Docker run:

docker run-zařízení /dev/mem:/dev/mem-cap-přidejte SYS_RAWIO -p 8086:8086 -to my_img:1.0.1

Co mi tu chybí?

Aktualizováno:

Výše uvedené pracoval v docker poté, co jsem přidal níže v Dockerfile:

Z alpské:nejnovější RUN apk --no-cache --update --verbose přidat grep bash dmidecode &&
rm -rf /var/cache/apk/* /tmp/* /sbin/halt /sbin/poweroff /sbin/reboot

A níže v docker compose souboru:

privilegované: true

Ale Když se pokusil použít výše v kubernetes to není schopen načíst demidecode výstup.

Pomoc bude velmi ocenil.

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

Nejlepší odpověď

2

Co mi tu chybí?

Pro začátek ,zpracování chyb.

    x,_ := cmd.Output()

Nikdy, nikdy ignorovat chybu v Go. Na rozdíl od jazyků, jako je, řekněme, Pyhton, tam není výjimkou zvyšování manipulaci chybové návratové hodnoty je vaše jediná šance, jak zjistit, jestli se něco pokazilo.

Za druhé, vy jste také ignorovat váš příkaz je Standardní Výstupní proud. To je pravděpodobné, že obsahují užitečné chybová zpráva pokaždé, když spuštění příkazu nefunguje, tak os/exec's Output() poskytuje jako součást chybovou hodnotu , pokud již nejsou zachyceny v Cmd konfigurace. Součástí vašeho zpracování chyb by dělat typ tvrzení, na které chybovou hodnotu, pokud není nulová, a pokud je to platný *exec.ExitErrora pokud tento typ tvrzení uspěje, zkontrolujte jeho Stderr pole pro chybová zpráva.

Za třetí, při pohledu na váš příkaz, vidím, že jsi udělal malou chybu:

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

Na shell, s mezerami odděluje argumenty. ale není tam žádný shell; jste kolem -t 1 všichni jako jeden argument dmidecode. Měl by jsi být kolem nich jako samostatné argumenty, téměř jistě:

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

Konečně, už jste našli nelze spustit dmidecode na docker kontejner , ale ujistěte se, že číst a pochopit přijal odpověď. Pak si váš docker kontejner nakonfigurován tak, aby být schopen běžet dmidecode bez Jít. Jakmile se pracuje na příkazovém řádku, stejně docker konfigurace by měla umožnit to, aby práce za Go vyvolání stejně.

2021-11-23 17:22:34

V jiných jazycích

Tato stránka je v jiných jazycích

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