Чтобы запустить интерактивную оболочку для образа Ubuntu, мы можем запустить:

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

Но когда это выполняется для образа Alpine Docker, следующие результаты:

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

Какая команда запускает интерактивную оболочку в базовом контейнере Alpine?

Ole

Ответы (4)

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

Параметры, использованные выше:

  • / bin / ash - это ясень (Almquist Shell), предоставленный BusyBox
  • - rm Автоматически удалять контейнер при выходе (docker run --help)
  • -i Интерактивный режим (держать STDIN открытым, даже если он не подключен)
  • -t Назначить псевдо-TTY

В настоящее время образы Alpine загружаются непосредственно в / bin / sh по умолчанию, без необходимости указывать оболочку для выполнения:

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

Это связано с тем, что файлы Dockerfiles образа alpine теперь содержат команду CMD, которая указывает оболочку, выполняемую при запуске контейнера: CMD [ "/bin/sh"******************************************************************************"

В более старых версиях образов Alpine (до 2017 г.) команда CMD не использовалась, поскольку Docker использовался для создания дополнительного уровня для CMD, что приводило к увеличению размера образа. Этого разработчики изображений Alpine хотели избежать. В последних версиях Docker (1.10+) CMD больше не занимает слой, поэтому он был добавлен в образы alpine. Следовательно, пока CMD не переопределен, последние образы Alpine будут загружаться в / bin / sh.

Для справки см. Следующую фиксацию официальных файлов Alpine Dockerfiles от Glider Labs:
https://github.com/gliderlabs/docker-alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf53a96578d4900cb5b

Если контейнер уже запущен:

docker exec -it container_id_or_name ash

Обычно образ Alpine Linux не содержит bash, вместо этого вы можете использовать / bin / ash, / bin / 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

Надеюсь, эта информация вам поможет.

2022 WebDevInsider