¿Cómo puedo ver el comando completo de un contenedor / proceso en ejecución en 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
Solo puedo ver "nginx -g 'daemon of" ... aquí, no el comando completo.
Respuestas:
docker ps --no-trunc
mostrará el comando completo junto con los demás detalles de los contenedores en ejecución.fuente
--no-trunc
.docker ps --no-trunc
docker ps --all --no-trunc|cut -c-400
Utilizar:
... realiza una "inspección del acoplador" para todos los contenedores.
fuente
docker inspect -f "{{.Name}} {{.Path}} {{.Args}}" $(docker ps -a -q)
sudo
frente al comando, obtendrá"docker inspect" requires at least 1 argument(s).
debido a la segunda llamada para obtener todos los nombres de contenedor, probablemente desee agregar un sudo justo dentro del$(
.Utilizar:
Eso mostrará la ruta de comando y los argumentos, similares a
docker ps
.fuente
kube-apiserver
?docker inspect -f "{{.Path}} {{.Args}} ({{.Id}})" $(docker ps -a -q) | grep kube-apiserver
Use runlike del repositorio de git https://github.com/lavie/runlike
Para instalar runlike
Como acepta la identificación del contenedor como argumento, para extraer la identificación del contenedor, use el siguiente comando
Puede usar runlike para extraer el comando completo de ejecución de Docker con el siguiente comando
fuente
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike YOUR-CONTAINER
TL-DR
docker ps --no-trunc
ydocker inspect CONTAINER
proporcione el punto de entrada ejecutado para iniciar el contenedor, junto con el comando pasado a, pero eso puede faltar algunas partes, como${ANY_VAR}
porque las variables de entorno del contenedor no se imprimen como resueltas.Para superar eso,
docker inspect CONTAINER
tiene una ventaja porque también permite recuperar por separado las variables env y sus valores definidos en el contenedor desde laConfig.Env
propiedad.docker ps
ydocker inspect
proporcionar información sobre el punto de entrada ejecutado y su comando. A menudo, es un script de punto de entrada de contenedor (.sh
) y no el programa "real" iniciado por el contenedor. Para obtener información sobre eso, solicite información de procesops
o/proc/1/cmdline
ayuda.1)
docker ps --no-trunc
Imprime el punto de entrada y el comando ejecutado para todos los contenedores en ejecución. Si bien imprime el comando pasado al punto de entrada (si lo pasamos), no muestra el valor de las variables docker env (como
$FOO
o${FOO}
).Si nuestros contenedores usan variables env, puede que no sea suficiente.
Por ejemplo, ejecute un contenedor alpino:
Cuando use docker -ps como:
Imprime:
Vemos el comando pasado al punto de entrada:
sh -c 'ls $MY_VAR'
pero de$MY_VAR
hecho no se resuelve.2)
docker inspect CONTAINER
Cuando inspeccionamos el contenedor de ejemplo alpino:
El comando también está allí, pero aún no vemos el valor de la variable env:
De hecho, no pudimos ver variables interpoladas con estos comandos docker.
Si bien, como compensación, podríamos mostrar por separado las variables de comando y env para un contenedor con docker inspeccionar:
Que imprime:
Una forma más acoplable sería utilizar el
--format
indicador dedocker inspect
que permite especificar atributos JSON para representar:Eso da salida:
3) Recupere el proceso iniciado desde el contenedor para ejecutar contenedores
El punto de entrada y el comando ejecutado por docker pueden ser útiles, pero en algunos casos, no es suficiente porque eso es "solo" un script de punto de entrada de contenedor (
.sh
) que es responsable de iniciar el proceso real / central.Por ejemplo, cuando ejecuto un contenedor Nexus, el comando ejecutado y mostrado para ejecutar el contenedor es
"sh -c ${SONATYPE_DIR}/start-nexus-repository-manager.sh"
.Para PostgreSQL que es
"docker-entrypoint.sh postgres"
.Para obtener más información, podríamos ejecutar en un contenedor en ejecución
docker exec CONTAINER ps aux
.Puede imprimir otros procesos que pueden no interesarnos.
Para limitarnos al proceso inicial lanzado por el punto de entrada, podríamos hacer:
Especifico
1
porque el proceso ejecutado por el punto de entrada es generalmente el que tiene la1
identificación.Sin
ps
, aún podríamos encontrar la información en/proc/1/cmdline
(en la mayoría de las distribuciones de Linux, pero no en todas). Por ejemplo :Si tenemos acceso al host docker que inició el contenedor, otra alternativa para obtener el comando completo del proceso ejecutado por el punto de entrada es:: ejecutar
ps -PID
donde PID es el proceso local creado por el demonio Docker para ejecutar el contenedor como:Formateo fácil de usar con docker ps
docker ps --no-trunc
No siempre es fácil de leer.Especificar columnas para imprimir y en formato tabular puede mejorarlo:
Crear un alias puede ayudar:
fuente
Moviendo el comentario de Dylan a una respuesta completa porque DEMASIADO ÚTIL:
¿Qué hace? Ejecuta https://github.com/lavie/runlike dentro de un contenedor, le da el comando completo de ejecución de la ventana acoplable, luego elimina el contenedor por usted.
fuente