Запуск оболочки в контейнере Docker Alpine
Чтобы запустить интерактивную оболочку для образа Ubuntu, мы можем запустить:
[email protected]:~$ docker run -it --rm ubuntu
[email protected]:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
Но когда это выполняется для образа Alpine Docker, получаются следующие результаты:
[email protected]:~$ docker run -it --rm alpine
Error response from daemon: No command specified
Что такое команда для запуска интерактивной оболочки в базовом контейнере Alpine?
Ответы
Ответ 1
[email protected]:~$ docker run -it --rm alpine /bin/ash
(inside container) / #
Параметры, используемые выше:
-
/bin/ash
- Ash (Almquist Shell), предоставленный BusyBox
-
--rm
Автоматически удалять контейнер, когда он выходит (docker run --help
)
-
-i
Интерактивный режим (удерживайте STDIN открытым, даже если он не подключен)
-
-t
Выделить псевдотематику
Ответ 2
Обычно образ Alpine Linux не содержит bash
, вместо этого вы можете использовать /bin/ash
, /bin/sh
, ash
или только sh
.
/бен/зола
docker run -it --rm alpine /bin/ash
/бен/ш
docker run -it --rm alpine /bin/sh
золы
docker run -it --rm alpine ash
ш
docker run -it --rm alpine sh
Надеюсь, эта информация поможет вам.
Ответ 3
В настоящее время образы Alpine будут загружаться непосредственно в /bin/sh
по умолчанию, без указания оболочки для выполнения:
$ sudo docker run -it --rm alpine
/ # echo $0
/bin/sh
Это связано с тем, что файлы Docker alpine
изображений теперь содержат команду CMD
, которая указывает оболочку для выполнения при запуске контейнера: CMD ["/bin/sh"]
.
В более старых версиях alpine
Image (до 2017 года) команда CMD
не использовалась, поскольку Docker создавал дополнительный слой для CMD
что приводило к увеличению размера изображения. Это то, чего разработчики alpine
изображений хотели избежать. В последних версиях Docker (1. 10+) CMD
больше не занимает слой и поэтому был добавлен к alpine
изображениям. Таким образом, пока CMD
не переопределен, последние образы Alpine будут загружаться в /bin/sh
.
Для справки см. Следующий коммит к официальным альпийским Docker файлам Glider Labs:
https://github.com/gliderlabs/docker-alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf53a96578d4900cb5b