Запуск оболонки в альпійському контейнері Docker


165

Щоб запустити інтерактивну оболонку для зображення 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?

Відповіді:


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

Параметри, які використовуються вище:

  • /bin/ash- це попел ( Almquist Shell ), наданий BusyBox
  • --rmАвтоматично видаліть контейнер при його виході ( docker run --help)
  • -i Інтерактивний режим (Тримайте STDIN відкритим, навіть якщо його немає)
  • -t Виділяють псевдо-TTY

1
Звичайно - хороша ідея - зола є оболонкою і - rm видаляє контейнер після завершення запуску. Отже, якщо ви хочете, щоб контейнер все ще був доступний після запуску, тоді пропустіть використання --rm. Я використовую його, оскільки експериментую лише з банкоматами.
Оле

Тоді як запустити його з властивістю від'єднати на зразок ubuntu?
Benyamin Limanto

Я вірю в обох випадках ... Ubuntu або Alpine ... ви просто даєте йому -dможливість.
Оле

2
+1 за те, що зауважив, що Alpine має, ashа ні bash, що, не дуже добре знайомий з Alpine, це те, що мене змусило і заважало мені раніше отримувати доступ до контейнера.
code_dredd

Якщо ви перебуваєте на RHEL і отримуєте відмову в дозволі відхилено, це знову SELinux ... треба зробити це setenforce 0 тимчасово: P
Parth Patel

67

Зазвичай, 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

Я сподіваюся, що ця інформація вам допоможе.


1
У чому різниця між /bin/ashі ash? Подібні для /bin/shта sh.
Пітер Мортенсен

1
Привіт @ peter-mortensen, різниця в тому, що ashце лише символічне посилання на /bin/ash. Деякі дистрибутиви Linux не мають символічних посилань.
jansanchez

28

Сьогодні альпійські зображення завантажуватимуться безпосередньо /bin/shза замовчуванням, без необхідності вказувати оболонку для виконання:

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

Це , так як alpineзображення Dockerfiles тепер містить в CMDкоманді, що визначає оболонку для виконання при запуску контейнера: CMD ["/bin/sh"].

У старих версіях для альпійських зображень (до 2017 року) команда CMD не використовувалася, оскільки Docker використовував для створення додаткового шару для CMD, який спричинив збільшення розміру зображення. Це те, чого розробники альпійських зображень хотіли уникнути. В останніх версіях Docker (1.10+) CMD більше не займає шар, і тому його додавали до alpineзображень. Тому, поки CMD не буде відмінено, останні алпійські зображення завантажуватимуться /bin/sh.

Для ознайомлення дивіться наступне зобов’язання до офіційних альпійських докерфілів від Glider Labs:
https://github.com/gliderlabs/docker-alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf53a9655780049


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.