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?
linux
docker
containers
alpine
Viejo
fuente
fuente
-d
opción.ash
y nobash
, lo cual, al no estar muy familiarizado con Alpine, es lo que me atrapó y me impidió acceder al contenedor antes.Por lo general, una imagen Alpine Linux no contiene
bash
, su lugar se puede utilizar/bin/ash
,/bin/sh
,ash
o únicamentesh
./ bin / ash
/ bin / sh
ceniza
sh
Espero que esta información te ayude.
fuente
/bin/ash
yash
? Similar para/bin/sh
ysh
.ash
solo es un enlace simbólico/bin/ash
. Algunas distribuciones de Linux no tienen enlaces simbólicos.Hoy en día, las imágenes Alpine se iniciarán directamente
/bin/sh
de forma predeterminada, sin tener que especificar un shell para ejecutar:Esto es porque los
alpine
Dockerfiles imagen ahora contienen unCMD
comando, 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
alpine
imá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
fuente
En caso de que el contenedor ya se esté ejecutando:
fuente