Что такое.dockerenv и.dockerinit?
Каковы .dockerenv а также .dockerinit файлы в корне файловой системы моего контейнера? Как они используются? Есть ли документация по этим файлам?
root@18ceee4f9041:/# ls -al /
total 72
drwxr-xr-x. 21 root root 4096 Jan 4 20:45 .
drwxr-xr-x. 21 root root 4096 Jan 4 20:45 ..
-rwxr-xr-x. 1 root root 0 Jan 4 20:45 .dockerenv
-rwxr-xr-x. 1 root root 0 Jan 4 20:45 .dockerinit
Другие люди задавали подобные вопросы, но я не могу найти ответы:
- .dockerinit /.dockerenv (12.09.2015)
Я спрашиваю, потому что я работаю над ошибкой в моем инструменте для запуска docker, называемом scuba. Вы можете пройти --user в docker run установить UID процесса в контейнере, но он не имеет записи в / etc / passwd, поэтому я изучал варианты создания пользователя во время запуска контейнера.
(Перекрестная публикация в переполнении стека, где она может быть закрыта.)
2 ответа
AFAIK нет официальной документации о них.
Те файлы, которые используются только старым и устаревшим драйвером выполнения LXC. Это были хаки, необходимые докеру при использовании LXC для запуска контейнеров.
.dockerinit был своего рода процесс инициализации. Это был двоичный файл, управляемый lxc-attachКоманда вызывается при запуске контейнера. Он отвечал за настройку среды, пользователя и рабочего каталога, а затем запустил вашу точку входа / cmd.
.dockerenvсодержит переменные среды, определенные внутри контейнера. Они использовались для правильной настройки переменных среды после lxc-attach. Этот файл был прочитан .dockerinit процесс.
Новый драйвер libcontainer/ runc ( драйвер включен по умолчанию) не использует эти файлы. Вы найдете их пустыми в ваших контейнерах. Фактически, поддержка LXC была недавно удалена из ветки разработки докеров.
Поэтому, возможно, эти файлы со временем исчезнут, хотя в настоящее время они широко используются приложениями для обнаружения наличия докера.
Чтобы выяснить, выполняется ли их код в среде докера, было популярно проверять наличие /.dockerinit или /.dockerenv файл.
Поскольку файл dockerinit был удален в более новых версиях, лучше всего теперь проверить наличие файла docker env.
- Цитирую другой источник:
Я не уверен, насколько официально
/.dockerenvэто - это в значительной степени недокументировано, но докер /libnetwork#815, кажется, подразумевает, что это будет дольше
Пример реализации такой проверки из нашего кода:
if ! [ -f /.dockerenv ] ; then
echo "Not running inside docker, exiting to avoid data damage." >&2
exit 1
fi