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?

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

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.


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


4

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

docker exec -it container_id_or_name ash
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.