Inicio de un depósito en el contenedor Docker Alpine

165

Para iniciar un shell interactivo para la imagen de Ubuntu podemos ejecutar:

ole@T:~$ docker run -it --rm ubuntu
root@1a6721e1fb64:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

Pero cuando esto se ejecuta para la imagen Alpine Docker , los siguientes resultados:

ole@T:~$ docker run -it --rm alpine
Error response from daemon: No command specified

¿Cuál es el comando para iniciar un shell interactivo en un contenedor base Alpine?

Viejo
fuente

Respuestas:

282
ole@T:~$ docker run -it --rm alpine /bin/ash
(inside container) / # 

Opciones utilizadas anteriormente:

  • /bin/ashes Ash ( Almquist Shell ) provisto por BusyBox
  • --rmRetire automáticamente el contenedor cuando salga ( docker run --help)
  • -i Modo interactivo (Mantenga STDIN abierto incluso si no está conectado)
  • -t Asignar un pseudo-TTY
Viejo
fuente
1
Claro, buena idea, la ceniza es el caparazón y --rm retira el contenedor una vez que se completa la ejecución. Entonces, si desea que el contenedor siga estando disponible después de la ejecución, omita el uso de --rm. Lo estoy usando ya que solo estoy experimentando cajeros automáticos.
Ole
Entonces, ¿cómo ejecutarlo con la propiedad detach como ubuntu?
Benyamin Limanto
Creo en ambos casos ... Ubuntu o Alpine ... solo tienes que darle una -dopción.
Ole
2
+1 por notar que Alpine tiene ashy no bash, lo cual, al no estar muy familiarizado con Alpine, es lo que me atrapó y me impidió acceder al contenedor antes.
code_dredd
Si está en RHEL y obtiene permiso de error denegado, es SELinux nuevamente ... tengo que hacer esa fuerza de seguridad 0 temporalmente: P
Parth Patel
67

Por lo general, una imagen Alpine Linux no contiene bash, su lugar se puede utilizar /bin/ash, /bin/sh, asho únicamente sh.

/ bin / ash

docker run -it --rm alpine /bin/ash

/ bin / sh

docker run -it --rm alpine /bin/sh

ceniza

docker run -it --rm alpine ash

sh

docker run -it --rm alpine sh

Espero que esta información te ayude.

jansanchez
fuente
1
¿Cuál es la diferencia entre /bin/ashy ash? Similar para /bin/shy sh.
Peter Mortensen
1
Hola @ peter-mortensen, la diferencia es que ashsolo es un enlace simbólico /bin/ash. Algunas distribuciones de Linux no tienen enlaces simbólicos.
jansanchez
28

Hoy en día, las imágenes Alpine se iniciarán directamente /bin/shde forma predeterminada, sin tener que especificar un shell para ejecutar:

$ sudo docker run -it --rm alpine  
/ # echo $0  
/bin/sh  

Esto es porque los alpineDockerfiles imagen ahora contienen un CMDcomando, que especifica el shell para ejecutar cuando el contenedor se inicia: CMD ["/bin/sh"].

En versiones anteriores de imágenes Alpine (anteriores a 2017), el comando CMD no se usaba, ya que Docker solía crear una capa adicional para CMD que hacía que aumentara el tamaño de la imagen. Esto es algo que los desarrolladores de imágenes Alpine querían evitar. En las versiones recientes de Docker (1.10+), CMD ya no ocupa una capa, por lo que se agregó a las alpineimágenes. Por lo tanto, siempre que CMD no se anule, las imágenes Alpine recientes se iniciarán /bin/sh.

Para referencia, consulte el siguiente compromiso con los Alpine Dockerfiles oficiales de Glider Labs:
https://github.com/gliderlabs/docker-alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf53a96578d4900cb5b

valiano
fuente
4

En caso de que el contenedor ya se esté ejecutando:

docker exec -it container_id_or_name ash
Marcos
fuente