Определение командной оболочки ОС по-умолчанию в Docker-контейнере

Чтобы определить, какую неинтерактивную командную оболочку (shell) использует Docker-контейнер по-умолчанию, необходимо сделать следующее (Заменяем <CONTAINER_NAME> на имя контейнера, в котором надо определить оболочку):

  1. Создать в контейнере скрипт[1][2] :

     # docker exec <CONTAINER_NAME> sh -c "echo 'readlink /proc/\$\$/exe' > test.sh"
    
  2. Добавить скрипту права на запуск:

     # docker exec <CONTAINER_NAME> sh -c "chmod +x test.sh"
    

    При желании можно объединить обе команды в кавычках в одну с помощью &&:

    # docker exec <CONTAINER_NAME> sh -c "echo 'readlink /proc/\$\$/exe' > test.sh && chmod +x test.sh"
    
  3. Запустить скрипт:

     # docker exec <CONTAINER_NAME> sh -c "./test.sh"
    

Результат зависит от используемой по-умолчанию (/bin/sh) оболочки, например, в стоковой Ubuntu вывод будет следующий:

/usr/bin/dash

  1. https://unix.stackexchange.com/a/71185 - определение оболочки ↩︎

  2. https://unix.stackexchange.com/a/162477 - экранирование $ в echo ↩︎