Quiero ssh o golpear en un contenedor acoplable en ejecución. Por favor, ver ejemplo:
$ sudo docker run -d webserver
webserver is clean image from ubuntu:14.04
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
665b4a1e17b6 webserver:latest /bin/bash ... ... 22/tcp, 80/tcp loving_heisenberg
ahora quiero obtener algo como esto (ir al contenedor en ejecución):
$ sudo docker run -t -i webserver (or maybe 665b4a1e17b6 instead)
$ root@665b4a1e17b6:/#
However when I run the line above I get new CONTAINER ID
$ root@42f1e37bd0e5:/#
Utilicé Vagrant y me gustaría tener un comportamiento similar al de vagrant ssh
.
sudo docker exec -i -t 665b4a1e17b6 /bin/sh
para poder instalar programas y paquetes aptsudo docker exec -i -t container-name /bin/bash
Es un camino a seguir.Respuestas:
La respuesta es el
attach
comando de Docker . Entonces, para mi ejemplo anterior, la solución será:Para Docker versión 1.3 o posterior: Gracias al usuario WiR3D que sugirió otra forma de obtener el shell de un contenedor. Si usamos
attach
, podemos usar solo una instancia del shell. Entonces, si queremos abrir una nueva terminal con una nueva instancia del shell de un contenedor, solo necesitamos ejecutar lo siguiente:o
fuente
sudo docker attach loving_heisenberg
-i -t
igual-it
docker attach
Invocar una instancia de MongoDB, por ejemplo, matará la instancia. Como se explica con más detalle en esta preguntaattach
yexec
son diferentes animales.Desde Docker 1.3 en adelante:
Básicamente, si el contenedor Docker se inició utilizando el
/bin/bash
comando, puede acceder a él utilizandoattach
. De lo contrario, debe ejecutar el comando para crear una instancia de Bash dentro del contenedor utilizandoexec
.También para salir de Bash sin dejar que Bash se ejecute en un proceso no autorizado:
Sí, es así de simple.
fuente
RUN
comando en el dockerfile es/bin/bash
. Pero depende de lo que quieras decir. Si desea ejecutar el contenedor y tienen fiesta disponible de inmediato en ese mismo terminal luego corriendo con-it
deberían hacerlosudo
vsdocker
grupo. De cualquier manera, hay un agujero de seguridad integrado en la ventana acoplable que puede proporcionar privilegios completos en el sistema de archivos del host desde el invitado, independientemente de si usa el grupo de la ventana acoplable osudo
para iniciar el contenedor.Aunque el autor de la pregunta dijo específicamente que están interesados en un contenedor en ejecución, también vale la pena señalar que si el contenedor no se está ejecutando, pero le gustaría ejecutarlo para hurgar, puede ejecutar:
docker run -i -t --entrypoint /bin/bash <imageID>
fuente
Prueba esto:
Fuente: https://docs.docker.com/articles/basics/#running-an-interactive-shell
fuente
root@42f1e37bd0e5:/#
y noroot@665b4a1e17b6:/#
)Basado en la respuesta de @ Timur, he creado el siguiente script útil
Preparar
Coloque el
docker-ssh
archivo en su$PATH
con los siguientes contenidosNota : Algunos contenedores no contienen
bash
, peroash
,sh
etc. En estos casosbash
se reemplazarán en el script anterior.Uso
Si solo tiene una instancia en ejecución, simplemente ejecute
De lo contrario, proporcione un parámetro de id de docker que obtenga de
docker ps
(primer col)fuente
Si su contenedor no tiene bash instalado, puede probar sh:
O busque conchas en / bin primero:
fuente
He creado un servidor SSH en contenedores que proporciona capacidades SSH a cualquier contenedor en ejecución. No necesita cambiar su contenedor. El único requisito es que el contenedor tenga bash.
Si tiene un contenedor con el nombre 'web-server1'. El siguiente comando de ejecución de docker iniciaría un segundo contenedor que proporcionaría SSH para el primer contenedor.
Para obtener más sugerencias, consulte https://github.com/jeroenpeeters/docker-ssh
fuente
@jpetazzo tiene una publicación increíble sobre este tema . La respuesta corta sería usar
nsenter
:PD: No te olvides de revisar la discusión en los comentarios de la publicación ...
Salud
fuente
docker exec
solución de @ WiR3D es bastante más conveniente.También puede darle al contenedor Docker una dirección IP enrutable con Pipework, y luego SSH en la máquina con esa nueva dirección IP.
Esto será más "tradicional" (ssh), en lugar de usar un comando específico de la aplicación como
docker attach
, y eventualmente lo hará más "portátil" en todos los sistemas y versiones.fuente
A veces será útil poder ingresar en un contenedor Docker, especialmente durante el desarrollo. La siguiente imagen de Docker permite ssh en un contenedor utilizando una clave privada:
UbuntuWithSSH-Docker
La esencia del Dockerfile es https://gist.github.com/devbkhadka/98792f7bca57f9778793b2db758b3d07 .
fuente
Esto funciona :-)
fuente
VE ADENTRO
instale la
goinside
herramienta de línea de comandos con:e ingrese a un contenedor acoplable con un tamaño de terminal adecuado con:
para más detalles mira esto .
fuente
Para golpear en un contenedor en ejecución, escriba esto:
fuente
Solo para información. Si necesita iniciar sesión en un contenedor simple que no sea un demonio, debe usar los siguientes comandos:
fuente
si el contenedor se detiene como, por ejemplo, un contenedor de solo datos, entonces una buena solución es ejecutar un contenedor desechable cada vez que quiera adjuntarlo al contenedor de datos. En este caso, el contenedor de datos podría estar completamente vacío, ya que el contenedor temporal tendría las herramientas del sistema operativo.
fuente