Докер, монтуйте обсяги як тільки читайте


106

Я працюю з Docker, і я хочу встановити динамічну папку, яка сильно змінюється (тому мені не доведеться робити зображення Docker для кожного виконання, що було б занадто дорого), але я хочу, щоб ця папка була доступною лише для читання . Зміна власника папки на когось іншого працює. Однак chownпотрібен rootдоступ, який я вважаю за краще не піддавати програмі.

Коли я використовую -vпрапор для монтажу, він дає будь-яке ім'я користувача, яке я дав, я створив некореневого користувача всередині зображення докера, однак усі файли в томі з власником як користувач, який запустив докер, змінюється на користувача I дайте з командного рядка, тому я не можу створювати файли та папки лише для читання. Як я можу запобігти цьому?

Я також додав mustafa ALL=(docker) NOPASSWD: /usr/bin/docker, щоб я міг змінити іншого користувача через термінал, але все-таки файли мають дозволи для мого користувача.


Я просто подумав, що я залишу тут коментар, кажучи, що дозволити користувачеві запускати контейнери докера це те саме, що надати йому повний root-доступ. Це також зафіксовано в розділі безпеки документації докера.
Blackclaws

Відповіді:


170

Ви можете вказати, що том потрібно читати лише для читання, додавши :roдо -vкомутатора:

docker run -v volume-name:/path/in/container:ro my/image

Зверніть увагу, що папка потім є лише для читання в контейнері і читає-пише на хості.

2018 Редагувати

Згідно з документацією на використання томів , тепер існує інший спосіб монтажу об'ємів за допомогою --mountперемикача. Ось як це використати лише для читання:

$ docker run --mount source=volume-name,destination=/path/in/container,readonly my/image

докер-композит

Ось приклад, як вказати контейнери лише для читання docker-compose:

version: "3"
services:
  redis:
    image: redis:alpine
    read_only: true

8
чи дозволяють писати, але не записувати їх назад до хоста? це було б фантастично
Рей Фосс

9
Це здається, що ви хочете взагалі не задавати гучність.
Альп

1
Начебто ... Мені просто не подобається створювати зображення просто для використання Dockerfile COPY або використання окремої docker cpкоманди на закритому контейнері.
Рей Фосс

5
Можливо, ви могли б створити нове запитання для цього, де ви надасте більше деталей та посилання тут?
Альп

Ви також можете використовувати короткий синтаксис з компотом redis:alpine:ro
docker

23

докер-композит

Ось правильний спосіб вказати том лише для читання у docker-compose:

version: "3.2" # Use version 3.2 or above
services:
  my_service:
    image: my:image
    volumes:
      - type: volume
        source: volume-name
        target: /path/in/container
        read_only: true
volumes:
  volume-name:

https://docs.docker.com/compose/compose-file/#long-syntax-3


2
Це справді правильно, але тут читається лише об'єм, а не контейнер.
Константин Ван

Це працює лише для мене version: "3.2"- Дякую :)
Дейві

"Додано у форматі файлу версії 3.2." так
rybo111

3
Ви можете також зробити - './my-file.txt:/container-readonly-file.txt:ro'під volumes- відзначають :roв кінці.
rybo111
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.