Estoy empezando a trabajar con Docker. Estoy usando la imagen base de WordPress y docker-compose.
Estoy tratando de ingresar a uno de los contenedores para inspeccionar los archivos / directorios que se crearon durante la compilación inicial. Traté de correr docker-compose run containername ls -la
, pero eso no hizo nada. Incluso si lo hiciera, prefiero tener una consola donde pueda atravesar la estructura del directorio, en lugar de ejecutar un solo comando. ¿Cuál es la forma correcta de hacer esto con Docker?
docker
docker-container
Andrés
fuente
fuente
docker exec
askubuntu.com/a/543057/35816 . Obtenga la identificación del contenedor usandodocker ps
sudo docker run -it --entrypoint /bin/bash <container_name>
te mete en el contenedor de forma interactiva. Entonces uno puede inspeccionar el sistema de archivos en el contenedor usandocd <path>
Respuestas:
docker attach
le permitirá conectarse a su contenedor Docker, pero esto no es realmente lo mismo quessh
. Si su contenedor está ejecutando un servidor web, por ejemplo,docker attach
probablemente lo conectará a la salida estándar del proceso del servidor web. No necesariamente te dará una concha.El
docker exec
comando es probablemente lo que estás buscando; Esto le permitirá ejecutar comandos arbitrarios dentro de un contenedor existente. Por ejemplo:Por supuesto, cualquier comando que esté ejecutando debe existir en el sistema de archivos del contenedor.
En el comando anterior se
<mycontainer>
encuentra el nombre o ID del contenedor de destino. No importa si estás usando o nodocker compose
; simplemente ejecutedocker ps
y use la ID (una cadena hexadecimal que se muestra en la primera columna) o el nombre (que se muestra en la columna final). Por ejemplo, dado:Puedo correr:
Podría lograr lo mismo ejecutando:
Del mismo modo, podría comenzar una cáscara en el contenedor;
fuente
docker exec
solo funciona en contenedores en ejecución (de lo contrario, usedocker run -it --entrypoint /bin/bash
o similar).-it
es una combinación de-i
y-t
que es--interactive
("Mantenga STDIN abierto incluso si no está adjunto") respectivamente--tty
("Asigne un pseudo-TTY").docker run -it --entrypoint /bin/bash <imageid> --any --more --args
, solo para aclarar a las personas--any --more --args
que tiene serán alimentados a lo que la imagen haya definido como suCMD
y no Docker (o si su imagen solo define unENTRYPOINT
y noCMD
, entonces estas opciones se incorporarán/bin/bash
como ha especificado aquí ) Entonces, por ejemplo, cualquier otradocker run
opción (por ejemplo--net "host"
) debe ir antes que<imageid>
.Para golpear en un contenedor en ejecución, escriba esto:
o
o
fuente
docker exec -it
lugar dedocker exec -t -i
Digamos que, por razones que son propias, realmente desea utilizar SSH. Toma unos pocos pasos, pero se puede hacer. Estos son los comandos que ejecutaría dentro del contenedor para configurarlo ...
Ahora incluso puede ejecutar aplicaciones gráficas (si están instaladas en el contenedor) utilizando el reenvío X11 al cliente SSH:
Aquí hay algunos recursos relacionados:
fuente
Si está buscando una respuesta específica de Docker Compose como yo, proporciona una manera fácil de ingresar sin tener que buscar la ID del contenedor generado.
docker-compose exec
toma el nombre del servicio según sudocker-compose.yml
archivo.Entonces, para obtener un shell Bash para su servicio 'web', puede hacer:
fuente
docker-compose run
funciona bien, si su contenedor aún no existe.Aviso : esta respuesta promueve una herramienta que he escrito.
He creado un servidor SSH en contenedores que puede 'pegar' a cualquier contenedor en ejecución. De esta manera puedes crear composiciones con cada contenedor. El único requisito es que el contenedor tenga Bash.
El siguiente ejemplo iniciaría un servidor SSH conectado a un contenedor con el nombre 'my-container'.
Cuando se conecte a este servicio SSH (con su cliente SSH de elección), se iniciará una sesión Bash en el contenedor con el nombre 'my-container'.
Para obtener más sugerencias y documentación, consulte: https://github.com/jeroenpeeters/docker-ssh
fuente
less
estaba mostrando una advertencia cada vez que lo ejecutaba, etc. Usar el contenedor de Jeroen me está dando una experiencia mucho mejor hasta ahora. Solo asegúrate de revisar la documentación . El comando de muestra en la respuesta ya no parece válido.Si está utilizando Docker en Windows y desea obtener acceso de shell a un contenedor, use esto:
Lo más probable es que ya tenga instalado Git Bash . Si no lo hace, asegúrese de instalarlo.
fuente
Si el contenedor ya ha salido (tal vez debido a algún error), puede hacer
o
o
para crear un nuevo contenedor y ponerle un caparazón. Como especificó --rm, el contenedor se eliminaría cuando salga del shell.
fuente
En algunos casos, su imagen puede estar basada en Alpine. En este caso arrojará:
Porque
/bin/bash
no existe En lugar de esto, debes usar:o
fuente
SSH en un contenedor Docker con este comando:
fuente
Para conectarse a cmd en un contenedor de Windows, use
Donde d8c25fde2769 es la identificación del contenedor.
fuente
Es simple !
Enumere todas sus imágenes de Docker:
En mi sistema mostró el siguiente resultado:
Tengo dos imágenes Docker en mi PC. Digamos que quiero ejecutar el primero.
Esto le dará el control terminal del contenedor. Ahora puede hacer todo tipo de operaciones de shell dentro del contenedor. Al igual que hacerlo,
ls
generará todas las carpetas en la raíz del sistema de archivos.fuente
Para inspeccionar archivos, ejecute
docker run -it <image> /bin/sh
para obtener una terminal interactiva. La lista de imágenes se puede obtener pordocker images
. Al contrario dedocker exec
esta solución, también funciona en caso de que una imagen no se inicie (o se cierre inmediatamente después de ejecutarse).fuente
Solución interior
instale la
goinside
herramienta de línea de comandos con:e ingrese a un contenedor acoplable con un tamaño de terminal adecuado con:
vieja respuesta
Hemos puesto este fragmento en
~/.profile
:Esto no solo hace que todos puedan ingresar a un contenedor con:
También resuelve un problema de larga duración sobre los tamaños fijos de terminales de contenedores Docker . Lo cual es muy molesto si lo enfrentas.
Además, si sigue el enlace, también tendrá que completar el comando para los nombres de los contenedores de la ventana acoplable.
fuente
O dependiendo del caparazón, puede ser
Puede obtener el ID del contenedor a través del
docker ps
comando-i
= interactivo-t
= para asignar un psuedo-TTYfuente
He creado una función de terminal para facilitar el acceso a la terminal del contenedor. Quizás también sea útil para ustedes:
Entonces el resultado es, en lugar de escribir:
escribirás:
Ponga lo siguiente en su ~ / .bash_profile (o cualquier otra cosa que funcione para usted), luego abra una nueva ventana de terminal y disfrute del acceso directo:
fuente
puede interactuar con la terminal en el contenedor acoplable pasando la opción -ti
-t significa terminal -i significa interactivo
fuente
docker exec
Definitivamente será una solución. Una manera fácil de trabajar con la pregunta que hizo es montando el directorio dentro de Docker en el directorio del sistema local .Para que pueda ver los cambios en la ruta local al instante.
fuente
Utilizar:
La otra forma, aunque existe un peligro, es usar
attach
, pero si Ctrl+ Cpara salir de la sesión, también detendrá el contenedor. Si solo quieres ver lo que está sucediendo, úsalodocker logs -f
.fuente
Usa este comando:
fuente
Si tiene instalado Docker
Kitematic
, puede usar la GUI. AbraKitematic
desde el icono de Docker y en laKitematic
ventana seleccione su contenedor, y luego haga clic en elexec
icono.También puede ver el registro del contenedor y mucha información del contenedor (en la pestaña de configuración) en esta GUI.
fuente
En mi caso, por alguna razón (es) necesito verificar toda la información involucrada en la red en cada contenedor. Entonces, los siguientes comandos deben ser válidos en un contenedor ...
Revisé todas estas respuestas, ninguna fue útil para mí. He buscado información en otros sitios web. No agregaré un súper enlace aquí, ya que no está escrito en inglés. Así que acabo de publicar esta publicación con una solución de resumen para las personas que tienen los mismos requisitos que yo.
Digamos que tiene un contenedor en ejecución llamado prueba de luz. Sigue los pasos a continuación.
docker inspect light-test -f {{.NetworkSettings.SandboxKey}}
. Este comando recibirá respuesta como/var/run/docker/netns/xxxx
.ln -s /var/run/docker/netns/xxxx /var/run/netns/xxxx
. Es posible que el directorio no exista,mkdir /var/run/netns
primero.ip netns exec xxxx ip addr show
para explorar el mundo de la red en contenedor.PD.
xxxx
es siempre el mismo valor recibido del primer comando. Y, por supuesto, cualquier otro comando es válido, es decirip netns exec xxxx netstat -antp|grep 8080
.fuente
Otra opción es usar nsenter .
fuente
nsenter
. La primera es que requiere que tengas acceso físico al host de Docker, lo cual no es un hecho (es posible que estés trabajando con una API de Docker remota). Además, ejecutar bajo lonsenter
exime de varias de las restricciones de seguridad y recursos que Docker establece (que puede ser un profesional o un estafador, dependiendo de su entorno).docker exec
estos días.docker exec
.docker exec
me parece más elegante.Si está usando Docker Compose, esto lo llevará dentro de un contenedor Docker.
Dentro del contenedor lo llevará a WORKDIR definido en el Dockerfile. Puedes cambiar tu directorio de trabajo por
fuente
Para ejecutar en un contenedor en ejecución llamado
test
, a continuación se muestran los siguientes comandosSi el contenedor tiene
bash
cáscaraSi el contenedor tiene
bourne
caparazón y la mayoría de los casos está presentefuente
Para docker-compose up (Docker4Drupal)
Yo uso Docker para Drupal en una computadora portátil Linux. Después de ejecutar el contenedor, uso '
docker-compose exec php bash
' para conectarme con el contenedor y poder ejecutar comandos drush. Funciona bien para mí.fuente