Root в Docker — не совсем root

Почему root в Docker — это не полноценный root

Контейнер может запускаться с UID 0, но это не означает, что у него есть все привилегии root на хосте.

По умолчанию Docker ограничивает права через Linux Capabilities — механизм ядра Linux, который разделяет полномочия суперпользователя на отдельные возможности.

Например, контейнеру оставляют только нужный минимум, а опасные capability вроде SYS_ADMIN, SYS_MODULE или SYS_PTRACE по умолчанию отключаются.

Так снижается риск компрометации хоста, даже если процесс внутри контейнера запущен от имени root.

Посмотреть список capabilities можно командой:


docker inspect <container> | jq '.[0].HostConfig.CapAdd, .[0].HostConfig.CapDrop'

А если нужно, capability можно добавить или убрать:


docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx

Чем меньше привилегий у контейнера, тем безопаснее среда.

Читать подробнее