The post has been translated automatically. Original language: Russian
On September 3, 2026, Docker Engine 29.8.0 was released. In the release, several changes relate not to convenience, but to the behavior of containers in runtime: a standard way to set a umask for container processes appeared, the AppArmor profile settings expanded, workarounds to security policies were closed, and a significant part of the Swarm network was repaired.
Umask has become a startup parameter
The main innovation is the HostConfig.Umask option in the API and the corresponding --umask flag with an octal value for commands to create and launch a container. The value applies not only to the main process, but also to processes running through exec and to status checks.
Previously, the umask inside the container was set in workarounds: they replaced the entry point with a shell wrapper or prescribed a call in the startup script. Each such method was torn at the most inopportune moment — for example, during exec into a working container, where the wrapper is no longer involved, or into healthcheck, which is executed by its own process. Now the file creation mode is set once in the container configuration.
AppArmor profile and socketcall path
The daemon has learned how to configure the AppArmor profile template, which is applied to containers by default. Previously, the choice was binary — a standard profile or a completely custom, manually connected one; now the basic template can be edited at the daemon level without completely abandoning the mechanism.
The second edit closes a policy loophole: containers can no longer create AF_VSOCK sockets via the 32-bit socketcall system call path. The classic case was when the rule blocked a direct call, but not its outdated wrapper. The correction in working with checkpoints also applies there: identifiers containing path separators are now rejected so that the request does not go beyond the limits of the container's checkpoint catalog.
Network, Swarm, and Image Storage
The network part of the release is almost entirely about Swarm: service name resolution failures and state desynchronization between nodes have been fixed, and the volume of synchronization service traffic has been reduced. Separately, the case of the daemon hanging is closed, when the nft command issued a sufficiently large amount of output to the error stream, a classic lock on an unread channel. The names "container" and "container:" are reserved: previously, a network with this name was created, but it could not be used due to a conflict with the syntax of network mode.
In the containerd-based image storage, the size calculation in the image inspection output and in the disk usage summary, as well as the slowdown in image loading, have been corrected. Another practical edit: health checks are no longer delayed for too long if the interval of the start checks is set longer than the start period itself.
What does this mean in practice?
- The umask flag changes the rights to the files that the application creates. If the umask was previously set in the wrapper of the entry point, and now also with a flag, the values may differ — the final rights should be checked in the test loop, especially where files are read by another container or process on the host.
- Prohibiting the 32-bit AF_VSOCK creation path may affect rare loads that really need such sockets.: this should be checked separately if you are working with virtualization or agents on a hypervisor.
- The customizable AppArmor profile template is convenient, but it easily turns into an undocumented feature of the environment. Keep the template in the configuration management system next to the daemon settings.
- The healthcheck delay fix will shift the time of the first check for containers with a longer start interval. Where balancing or orchestration is tied to the state of the container, the behavior will change upon restart.
The release is built with updated components: BuildKit version 0.33.0, containerd 2.3.4 and runc 1.5.1. In rootless mode, RootlessKit has been updated to version 3.1.0.
The draft text was prepared with the participation of AI, the facts are checked against the original source — the official release notes of the Docker Engine branch 29 in the Docker documentation.
3 сентября 2026 года вышел Docker Engine 29.8.0. В релизе сразу несколько изменений касаются не удобства, а поведения контейнеров в рантайме: появился штатный способ задать umask процессам контейнера, расширились настройки профиля AppArmor, закрылись обходные пути к политикам безопасности и починилась заметная часть Swarm-сети.
Umask стал параметром запуска
Главное новшество — опция HostConfig.Umask в API и соответствующий флаг --umask с восьмеричным значением у команд создания и запуска контейнера. Значение применяется не только к основному процессу, но и к процессам, запущенным через exec, и к проверкам состояния.
Раньше umask внутри контейнера задавали обходными путями: подменяли точку входа шелл-обёрткой или прописывали вызов в скрипте запуска. Каждый такой способ рвался в самый неподходящий момент — например, при exec в работающий контейнер, где обёртка уже не участвует, или в healthcheck, который выполняется собственным процессом. Теперь режим создания файлов задаётся один раз в конфигурации контейнера.
Профиль AppArmor и путь через socketcall
Демон научился настраивать шаблон профиля AppArmor, который применяется к контейнерам по умолчанию. Раньше выбор был бинарным — стандартный профиль или полностью свой, подключаемый вручную; теперь базовый шаблон можно править на уровне демона, не отказываясь от механизма целиком.
Вторая правка закрывает лазейку в политиках: контейнеры больше не могут создавать сокеты семейства AF_VSOCK через 32-битный путь системного вызова socketcall. Классический случай, когда правило блокировало прямой вызов, но не его устаревшую обёртку. Туда же относится исправление в работе с контрольными точками: идентификаторы, содержащие разделители пути, теперь отклоняются, чтобы обращение не ушло за пределы каталога контрольных точек контейнера.
Сеть, Swarm и хранилище образов
Сетевая часть релиза почти целиком про Swarm: исправлены сбои разрешения имён сервисов и рассинхронизация состояния между узлами, уменьшен объём служебного трафика синхронизации. Отдельно закрыт случай зависания демона, когда команда nft выдавала достаточно большой объём вывода в поток ошибок, — классическая блокировка на непрочитанном канале. Имена «container» и «container:» зарезервированы: раньше сеть с таким именем создавалась, но пользоваться ею было нельзя из-за конфликта с синтаксисом сетевого режима.
В хранилище образов на базе containerd поправлены расчёт размеров в выводе инспекции образа и в сводке использования диска, а также замедление при загрузке образов. Ещё одна практичная правка: проверки состояния больше не откладываются слишком надолго, если интервал стартовых проверок задан большим, чем сам стартовый период.
Что это значит на практике
- Флаг umask меняет права на файлы, которые создаёт приложение. Если раньше umask задавался в обёртке точки входа, а теперь ещё и флагом, значения могут разойтись — итоговые права стоит проверить в тестовом контуре, особенно там, где файлы читает другой контейнер или процесс на хосте.
- Запрет 32-битного пути создания AF_VSOCK может задеть редкие нагрузки, которым такие сокеты действительно нужны: это стоит проверить отдельно, если работаете с виртуализацией или агентами на гипервизоре.
- Настраиваемый шаблон профиля AppArmor удобен, но легко превращается в незадокументированную особенность окружения. Держите шаблон в системе управления конфигурацией рядом с настройками демона.
- Исправление задержки healthcheck сместит момент первой проверки для контейнеров с большим стартовым интервалом. Там, где на состояние контейнера завязана балансировка или оркестрация, поведение при перезапуске изменится.
Релиз собран с обновлёнными компонентами: BuildKit версии 0.33.0, containerd 2.3.4 и runc 1.5.1. В rootless-режиме обновлён RootlessKit до версии 3.1.0.
Черновик текста подготовлен с участием ИИ, факты сверены с первоисточником — официальные release notes Docker Engine ветки 29 в документации Docker.