Ответ
Ограничение доступа к Docker Volume достигается комбинацией настроек прав доступа и политик безопасности. Вот основные подходы:
-
Права файловой системы и монтирования:
- Используйте опцию
:roдля монтирования тома в режиме только для чтения.docker run -v my_volume:/app/data:ro my_image - Явно задавайте UID/GID через переменные окружения или команды в
Dockerfile, чтобы процесс в контейнере работал от непривилегированного пользователя.FROM alpine RUN addgroup -g 1001 appgroup && adduser -u 1001 -G appgroup -D appuser USER appuser VOLUME /datadocker run -v /host/path:/data:ro -u 1001 my_image
- Используйте опцию
-
Политики безопасности хоста (SELinux/AppArmor):
- Используйте
--security-optдля применения конкретных политик.# Пример для AppArmor с профилем, запрещающим запись docker run --security-opt apparmor=docker-default-deny-write -v my_volume:/data my_image
- Используйте
-
Настройки драйвера Volume в Docker Compose:
volumes: restricted_data: driver: local driver_opts: type: none o: bind,ro,noexec,nosuid,nodev device: /srv/secure-dataОпции
noexec, nosuid, nodevдобавляют дополнительные ограничения на уровне монтирования. -
Для удаленных томов (NFS, cloud storage): ограничения настраиваются на стороне сервера хранения (ACL, IAM-политики).
Важно: Права на файлы и каталоги на хостовой машине (chmod, chown) должны быть установлены до запуска контейнера. Для хранения чувствительных данных (пароли, ключи) вместо volumes предпочтительнее использовать Docker Secrets (в Swarm) или сторонние решения типа HashiCorp Vault.