Pregunta ¿Cómo me meto en un contenedor Docker?


Estoy empezando a trabajar con Docker. Estoy usando la imagen base de WordPress y Docker-Componer.

Intento entrar en uno de los contenedores para inspeccionar los archivos / directorios que se crearon durante la compilación inicial. Intenté correr docker-compose run containername ls -la, pero eso no hizo nada. Incluso si lo hiciera, preferiría 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?


562
2018-05-11 16:12


origen


Respuestas:


docker attach le permitirá conectarse a su contenedor Docker, pero esto no es realmente lo mismo que ssh. Si su contenedor ejecuta un servidor web, por ejemplo, docker attach probablemente te conectará con el stdout del proceso del servidor web. No necesariamente te dará un caparazón.

los docker exec comando es probablemente lo que estás buscando; esto le permitirá ejecutar comandos arbitrarios dentro de un contenedor existente. Por ejemplo:

docker exec -it <mycontainer> bash

Por supuesto, cualquier comando que esté ejecutando debe existir en el sistema de archivos contenedor.

En el comando de arriba <mycontainer> es el nombre o ID del contenedor de destino. No importa si estás usando o no docker compose; solo corre docker ps y use el ID (una cadena hexadecimal que se muestra en la primera columna) o el nombre (que se muestra en la columna final). Por ejemplo, dado:

$ docker ps
d2d4a89aaee9        larsks/mini-httpd   "mini_httpd -d /cont   7 days ago          Up 7 days                               web                 

Puedo correr:

$ docker exec -it web ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
18: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:3/64 scope link 
       valid_lft forever preferred_lft forever

Podría lograr lo mismo ejecutando:

$ docker exec -it d2d4a89aaee9 ip addr

Del mismo modo, podría iniciar un shell en el contenedor;

$ docker exec -it web sh
/ # echo This is inside the container.
This is inside the container.
/ # exit
$

913
2018-05-11 16:44



Para golpear en un contenedor en ejecución, escribe esto:

docker exec -t -i container_name /bin/bash

178
2017-10-11 01:34



Digamos, por razones que son suyas, realmente quiere usar SSH. Toma unos pocos pasos, pero se puede hacer. Aquí están los comandos que ejecutaría dentro del contenedor para configurarlo ...

apt-get update
apt-get install openssh-server

mkdir /var/run/sshd
chmod 0755 /var/run/sshd
/usr/sbin/sshd

useradd --create-home --shell /bin/bash --groups sudo username ## includes 'sudo'
passwd username ## Enter a password

apt-get install x11-apps ## X11 demo applications (optional)
ifconfig | awk '/inet addr/{print substr($2,6)}' ## Display IP address (optional)

Ahora incluso puede ejecutar aplicaciones gráficas (si están instaladas en el contenedor) utilizando el reenvío X11 al cliente SSH:

ssh -X username@IPADDRESS
xeyes ## run an X11 demo app in the client

Aquí hay algunos recursos relacionados:


55
2018-05-16 03:36



darse cuenta: esta respuesta promueve una herramienta que he escrito.

Creé un servidor SSH en contenedor que puedes 'adherir' a cualquier contenedor en ejecución. De esta forma 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 'mi-contenedor'.

docker run -d -p 2222:22 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e CONTAINER=my-container -e AUTH_MECHANISM=noAuth \
  jeroenpeeters/docker-ssh

ssh localhost -p 2222

Cuando se conecta a este servicio SSH (con su cliente SSH de elección) se iniciará una sesión Bash en el contenedor con el nombre 'mi-contenedor'.

Para obtener más sugerencias y documentación, consulte: https://github.com/jeroenpeeters/docker-ssh


13
2017-10-03 20:56



SSH en un contenedor Docker usando este comando:

sudo docker exec -i -t (container ID) bash

11
2017-11-18 09:43



Si está aquí buscando una respuesta específica de docker-compose como yo, proporciona una manera fácil sin tener que buscar la ID del contenedor generado.

docker-compose exectoma el nombre del servicio según su docker-compose.yml archivo.

Entonces, para obtener un shell bash para su servicio 'web', puede hacer:

$ docker-compose exec web bash

9
2017-11-24 09:21



Si está utilizando Docker en Windows y desea obtener acceso de shell a un contenedor, use esto:

winpty docker exec -it <container_id> sh

Lo más probable es que ya tengas Git Bash instalado Si no lo hace, asegúrese de instalarlo.


5
2018-02-09 09:04



docker attach <container name/id here>

Por otro lado, aunque exista un peligro, use attach, pero si ctrl-c para salir de la sesión también se detendrá el contenedor. - si solo quieres ver lo que está pasando utiliza docker logs -f 

:~$ docker attach --help
Usage:  docker attach [OPTIONS] CONTAINER

Attach to a running container

Options:
      --detach-keys string   Override the key sequence for detaching a container
      --help                 Print usage
      --no-stdin             Do not attach STDIN
      --sig-proxy            Proxy all received signals to the process (default true)

4
2018-02-02 18:03



Para conectarse a cmd en el contenedor de Windows, use

docker exec -it d8c25fde2769 cmd

dónde d8c25fde2769 es el identificador del contenedor


4
2018-06-13 08:50



docker exec Definitivamente será una solución. Una manera fácil de trabajar con la pregunta que hizo es por montar el directorio dentro de Docker en el directorio del sistema local.

Para que pueda ver los cambios en la ruta local al instante.

docker run -v /Users/<path>:/<container path> 

3
2018-05-12 05:19