run name imagenes hub container change docker tty

name - Cómo ingresar en un contenedor Docker que ya se está ejecutando con un nuevo TTY



download docker image (9)

¿Qué pasa con la ejecución de la pantalla tmux / GNU dentro del contenedor? Parece la forma más fácil de acceder a tantos vty como quieras con un simple:

$ docker attach {container id}

Tengo un contenedor que ejecuta el servicio de Apache en primer plano. Me gustaría poder acceder al contenedor desde otro shell para "hurgar" dentro de él y examinar los archivos. En este momento, si me adjunto al contenedor, me quedo mirando el demonio de Apache y no puedo ejecutar ningún comando.

¿Es posible adjuntar otra tty a un contenedor en ejecución? Posiblemente, puedo aprovechar el hecho de que Docker en realidad solo está envolviendo los contenedores LXC. He probado sudo lxc-console -n [container-id] -t [1-4] pero parece que solo hay un tty disponible y ese es el que ejecuta el daemon de apache. Tal vez hay una manera de habilitar múltiples consolas lxc durante la compilación?

Preferiría no configurar y construir el contenedor con un servicio openssh si es posible.


Comencé a usar powershell en un microsoft / iis en ejecución ejecutando como un demonio usando

docker exec -it <nameOfContainer> powershell


Con docker 1.3, hay un nuevo comando docker exec . Esto le permite ingresar a una ventana acoplable en ejecución:

docker exec -it [container-id] bash


Debe usar la herramienta Jérôme Petazzoni llamada ''nsenter'' para ingresar a un contenedor sin usar SSH. Consulte: https://github.com/jpetazzo/nsenter

Instale simplemente ejecutando: docker run -v /usr/local/bin:/target jpetazzo/nsenter

Luego use el comando docker-enter <container-id> para ingresar al contenedor.


La forma "nsinit" es:

instalar nsinit

git clone [email protected]:dotcloud/docker.git cd docker make shell

desde el interior del contenedor:

go install github.com/dotcloud/docker/pkg/libcontainer/nsinit/nsinit

desde afuera:

docker cp id_docker_container:/go/bin/nsinit /root/

utilízalo

cd /var/lib/docker/execdriver/native/<container_id>/ nsinit exec bash


nsenter hace eso. Sin embargo, también necesitaba ingresar un contenedor de una manera sencilla y nsenter no era suficiente para mis necesidades. En algunas ocasiones, estaba defectuoso (la pantalla negra y el indicador ww no funcionan). Además, quería iniciar sesión como usuario específico y en un directorio específico.

Terminé haciendo mi propia herramienta para entrar en contenedores. Puede encontrarlo en: https://github.com/Pithikos/docker-enter

Su uso es tan fácil como

./docker-enter [-u <user>] [-d <directory>] <container ID>


Actualizar

A partir de la ventana acoplable 0.9, para que los pasos a continuación funcionen, ahora hay que actualizar el /etc/default/docker con ''-e lxc'' en la opción de inicio del daemon de la ''-e lxc'' acoplable antes de reiniciar el daemon (lo hice reiniciando el anfitrión).

Esto es todo porque ...

... [docker 0.9] contiene una nueva abstracción de "controlador de motor" para hacer posible el uso de otra API distinta de LXC para iniciar contenedores. También proporciona un nuevo controlador de motor basado en una nueva biblioteca de API (libcontainer) que puede manejar grupos de control sin utilizar herramientas LXC. El problema principal es que si confía en lxc-attach para realizar acciones en su contenedor, como iniciar un shell dentro del contenedor, que es increíblemente útil para el entorno de desarrollo ...

source

Tenga en cuenta que esto evitará que la nueva función opcional de red solo host de la ventana acoplable 0.11 funcione y que solo verá la interfaz de loopback. informe de error

Resulta que la solución a una pregunta diferente fue también la solución a esta:

... puede usar docker ps -notrunc para obtener el ID de contenedor lxc completo y luego usar lxc-attach -n <container_id> ejecutar bash en ese contenedor como root.

Actualización: pronto necesitará usar ps --no-trunc lugar de ps -notrunc que está en desuso.

Encuentra la ID del contenedor completo

Ingrese el comando lxc attach.

Arriba muestra mi proceso de apache ejecutando esa ventana acoplable iniciada.


Primer paso para obtener la identificación del contenedor:

docker ps

Esto te mostrará algo como

CONTAINER ID IMAGEN COMANDO ESTADO CREADO NOMBRES DE PUERTOS

1170fe9e9460 localhost: 5000 / python: env-7e847468c4d73a0f35e9c5164046ad88 "./run_notebook.sh" Hace 26 segundos Hasta 25 segundos 0.0.0.0:8989->9999/tcp SLURM_TASK-303337_0

1170fe9e9460 es la identificación del contenedor en este caso.

Segundo , ingrese a la ventana acoplable:

docker exec -it [container_id] bash

así que en el caso anterior: docker exec -it 1170fe9e9460 bash


docker exec -t -i container_name /bin/bash

Te llevará a la consola de contenedores.