Comment puis-je voir la commande complète d'un conteneur / processus en cours d'exécution dans Docker?
$ docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5b6291859b61 nginx:1.7.8 "nginx -g 'daemon of 4 minutes ago Exited (0) 4 minutes ago thirsty_brattain
Je ne vois que "démon nginx -g 'de" .. ici, pas la commande complète.
Réponses:
docker ps --no-trunc
affichera la commande complète avec les autres détails des conteneurs en cours d'exécution.la source
--no-trunc
.docker ps --no-trunc
docker ps --all --no-trunc|cut -c-400
Utilisation:
... il effectue une "inspection de docker" pour tous les conteneurs.
la source
docker inspect -f "{{.Name}} {{.Path}} {{.Args}}" $(docker ps -a -q)
sudo
devant la commande, vous obtiendrez à"docker inspect" requires at least 1 argument(s).
cause du deuxième appel pour obtenir tous les noms de conteneurs, vous voudrez probablement ajouter un sudo juste à l'intérieur de la$(
.Utilisation:
Cela affichera le chemin de commande et les arguments, similaires à
docker ps
.la source
kube-apiserver
?docker inspect -f "{{.Path}} {{.Args}} ({{.Id}})" $(docker ps -a -q) | grep kube-apiserver
Utilisez runlike depuis le dépôt git https://github.com/lavie/runlike
Pour installer runlike
Comme il accepte l'ID de conteneur comme argument, pour extraire l'ID de conteneur, utilisez la commande suivante
Vous êtes bon d'utiliser runlike pour extraire la commande runer docker complète avec la commande suivante
la source
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike YOUR-CONTAINER
TL-DR
docker ps --no-trunc
etdocker inspect CONTAINER
fournir le point d'entrée exécuté pour démarrer le conteneur, le long de la commande passée à, mais qui peut manquer certaines parties, par exemple${ANY_VAR}
parce que les variables d'environnement du conteneur ne sont pas imprimées comme résolues.Pour surmonter cela,
docker inspect CONTAINER
présente un avantage car il permet également de récupérer séparément les variables env et leurs valeurs définies dans le conteneur à partir de laConfig.Env
propriété.docker ps
etdocker inspect
fournir des informations sur le point d'entrée exécuté et sa commande. Il s'agit souvent d'un script de point d'entrée wrapper (.sh
) et non du programme "réel" démarré par le conteneur. Pour obtenir des informations à ce sujet, demandez des informations sur le processus avecps
ou/proc/1/cmdline
aide.1)
docker ps --no-trunc
Il imprime le point d'entrée et la commande exécutée pour tous les conteneurs en cours d'exécution. Bien qu'il affiche la commande passée au point d'entrée (si nous passons cela), il n'affiche pas la valeur des variables env de docker (telles que
$FOO
ou${FOO}
).Si nos conteneurs utilisent des variables env, cela peut ne pas être suffisant.
Par exemple, exécutez un conteneur alpin:
Lors de l'utilisation de docker -ps tels que:
Il imprime:
Nous voyons la commande passée au point d'entrée:
sh -c 'ls $MY_VAR'
mais$MY_VAR
n'est en effet pas résolue.2)
docker inspect CONTAINER
Lorsque nous inspectons le conteneur de l'exemple alpin:
La commande est également là mais nous ne voyons toujours pas la valeur de la variable env:
En fait, nous ne pouvions pas voir les variables interpolées avec ces commandes docker.
Bien que comme compromis, nous pourrions afficher séparément les variables de commande et d'environnement pour un conteneur avec docker inspect:
Cela imprime:
Une manière plus docker serait d'utiliser le
--format
drapeau dedocker inspect
qui permet de spécifier les attributs JSON à rendre:Cela génère:
3) Récupérez le processus démarré du conteneur lui-même pour exécuter les conteneurs
Le point d'entrée et la commande exécutés par docker peuvent être utiles mais dans certains cas, ils ne suffisent pas car il s'agit "uniquement" d'un script de point d'entrée wrapper (
.sh
) qui est chargé de démarrer le processus réel / principal.Par exemple, lorsque j'exécute un conteneur Nexus, la commande exécutée et affichée pour exécuter le conteneur est
"sh -c ${SONATYPE_DIR}/start-nexus-repository-manager.sh"
.Pour PostgreSQL, c'est
"docker-entrypoint.sh postgres"
.Pour obtenir plus d'informations, nous pouvons exécuter sur un conteneur en cours d'exécution
docker exec CONTAINER ps aux
.Il peut imprimer d'autres processus qui pourraient ne pas nous intéresser.
Pour limiter le processus initial lancé par le point d'entrée, nous pourrions faire:
Je précise
1
car le processus exécuté par le point d'entrée est généralement celui avec l'1
id.Sans
ps
, nous pourrions toujours trouver les informations dans/proc/1/cmdline
(dans la plupart des distributions Linux mais pas toutes). Par exemple :Si nous avons accès à l'hôte docker qui a démarré le conteneur, une autre alternative pour obtenir la commande complète du processus exécuté par le point d'entrée est:: exécuter
ps -PID
où PID est le processus local créé par le démon Docker pour exécuter le conteneur, par exemple:Formatage convivial avec docker ps
docker ps --no-trunc
n'est pas toujours facile à lire.La spécification des colonnes à imprimer et dans un format tabulaire peut améliorer la situation:
La création d'un alias peut aider:
la source
Déplacer le commentaire de Dylan dans une réponse complète car TROP UTILE:
Qu'est ce que ça fait? Exécute https://github.com/lavie/runlike à l' intérieur d'un conteneur, vous obtient la commande complète de docker run, puis supprime le conteneur pour vous.
la source