To start an interactive shell for the Ubuntu image we can run:
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
But when this is run for the Alpine Docker image, the following results:
ole@T:~$ docker run -it --rm alpine
Error response from daemon: No command specified
What is the command for starting an interactive shell in an Alpine base container?
Nowadays, Alpine images will boot directly into
/bin/sh
by default, without having to specify a shell to execute:This is since the
alpine
image Dockerfiles now contain aCMD
command, that specifies the shell to execute when the container starts:CMD ["/bin/sh"]
.In older Alpine image versions (pre-2017), the CMD command was not used, since Docker used to create an additional layer for CMD which caused the image size to increase. This is something that the Alpine image developers wanted to avoid. In recent Docker versions (1.10+), CMD no longer occupies a layer, and so it was added to
alpine
images. Therefore, as long as CMD is not overridden, recent Alpine images will boot into/bin/sh
.For reference, see the following commit to the official Alpine Dockerfiles by Glider Labs:
https://github.com/gliderlabs/docker-alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf53a96578d4900cb5b
Usually, an Alpine Linux image doesn't contain
bash
, Instead you can use/bin/ash
,/bin/sh
,ash
or onlysh
./bin/ash
/bin/sh
ash
sh
I hope this information helps you.
Options used above:
/bin/ash
is Ash (Almquist Shell) provided by BusyBox--rm
Automatically remove the container when it exits (docker run --help
)-i
Interactive mode (Keep STDIN open even if not attached)-t
Allocate a pseudo-TTY