Dmidecode aller à l'intérieur de programme en cours d'exécution dans un kubernetes pod

0

La question

J'ai un go routine en cours d'exécution dans le conteneur docker. J'ai besoin de la sortie de la commande dmidecode. Mais son passage à vide.

Aller:

func main() {

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

}

Docker run:

docker run --device /dev/mem:/dev/mem --cap-ajouter SYS_RAWIO -p 8086:8086 -il my_img:1.0.1

Ce qui me manque ici?

Mise à jour:

Le ci-dessus a travaillé dans le panneau après j'ai ajouté ci-dessous dans le Dockerfile:

Alpin:le dernier RUN apk --no-cache --update --verbose ajouter grep bash dmidecode &&
rm-rf /var/cache/apk/* /tmp/* /sbin/halt /sbin/poweroff /sbin/reboot

Et ci-dessous dans le menu fixe composer fichier:

privilégié: vrai

Mais Lorsque j'essaye d'utiliser le ci-dessus dans kubernetes-il pas en mesure de récupérer demidecode de sortie.

Une aide sera vraiment appréciée.

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

La meilleure réponse

2

Ce qui me manque ici?

Pour commencer ,la gestion des erreurs.

    x,_ := cmd.Output()

Jamais, jamais ignorer une erreur en Aller. À la différence des langues, comme, par exemple, Pyhton, il n'y a pas d'exception de sensibilisation - erreur de traitement de valeurs de retour est votre seule chance de comprendre si quelque chose s'est mal passé.

Deuxièmement, vous êtes également en ignorant votre commande du flux de Sortie Standard. Cela est susceptible de contenir un utile message d'erreur à chaque fois qu'une exécution de la commande ne fonctionne pas, donc os/exec's Output() fournit une partie de la valeur de l'erreur si ce n'est déjà capturé dans la Cmd la configuration. Une partie de votre gestion d'erreur devrait être de faire une assertion de type sur la valeur de l'erreur, si non nul, et si elle est valide *exec.ExitErroret si ce type d'assertion réussit, vérifier son Stderr champ pour un message d'erreur.

Troisièmement, regarder de votre commande, je vois que vous faites une erreur facile:

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

À la coque, espace sépare les arguments. mais il n'y a pas de shell ici; vous êtes de passage -t 1 tous, comme un argument de dmidecode. Vous devriez être en les passant en séparer les arguments, presque certainement:

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

Enfin, vous avez déjà trouvé ne Pouvez pas exécuter dmidecode sur conteneur docker , mais assurez-vous de lire et de comprendre la accepté de répondre. Puis, obtenez votre conteneur docker configuré pour être en mesure d'exécuter dmidecode sans Aller. Une fois que cela fonctionne en ligne de commande, le même panneau de configuration devrait lui permettre de travailler en vertu de l'Aller invocation ainsi.

2021-11-23 17:22:34

Dans d'autres langues

Cette page est dans d'autres langues

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