web-dev-qa-db-fra.com

Docker, montez les volumes en lecture seule

Je travaille avec Docker et je veux monter un dossier dynamique qui change beaucoup (je n'ai donc pas à créer de dockers pour chaque exécution, ce qui serait trop coûteux), mais je veux que ce dossier soit en lecture seule. Changer les propriétaires de dossiers en quelqu'un d'autre fonctionne cependant chown nécessite un accès root que je ne préférerais pas exposer à une application.

Lorsque j'utilise l'indicateur -v Pour monter, il donne quel que soit le nom d'utilisateur que je donne, j'ai créé un utilisateur non root dans l'image du menu fixe, mais tous les fichiers du volume avec le propriétaire en tant qu'utilisateur ayant exécuté le menu fixe changent. je donne à partir de la ligne de commande, je ne peux donc pas créer de fichiers ni de dossiers en lecture seule. Comment puis-je empêcher cela?

J'ai également ajouté mustafa ALL=(docker) NOPASSWD: /usr/bin/docker, afin de pouvoir changer d'utilisateur, via un terminal, mais les fichiers ont toujours des autorisations pour mon utilisateur.

90
Mustafa

Vous pouvez spécifier qu'un volume doit être en lecture seule en ajoutant :ro au -v interrupteur:

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

Notez que le dossier est alors en lecture seule dans le conteneur et en lecture-écriture sur l'hôte.

2018 Modifier

Selon = Utiliser la documentation sur les volumes , il existe maintenant un autre moyen de monter des volumes en utilisant le --mount _ commutateur. Voici comment utiliser cela en lecture seule:

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

docker-composer

Voici un exemple comment spécifier des conteneurs en lecture seule dans docker-compose:

version: "3"
services:
  redis:
    image: redis:Alpine
    read_only: true
150
Alp

docker-composer

Voici un moyen approprié de spécifier un volume en lecture seule dans docker-compose:

version: "3"
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-

4
Denis Stafichuk