Docker, monta i volumi in sola lettura


107

Sto lavorando con Docker e voglio montare una cartella dinamica che cambia molto (quindi non dovrei creare un'immagine Docker per ogni esecuzione, che sarebbe troppo costosa), ma voglio che quella cartella sia di sola lettura . La modifica del proprietario della cartella in qualcun altro funziona. Tuttavia, chownrichiede l' rootaccesso, che preferirei non esporre a un'applicazione.

Quando uso -vflag per montare, fornisce qualunque sia il nome utente che fornisco, ho creato un utente non root all'interno dell'immagine docker, tuttavia, tutti i file nel volume con il proprietario come utente che ha eseguito docker, cambia nell'utente I give dalla riga di comando, quindi non posso creare file e cartelle di sola lettura. Come posso impedirlo?

Ho anche aggiunto mustafa ALL=(docker) NOPASSWD: /usr/bin/docker, in modo da poter passare a un altro utente tramite terminale, ma comunque i file hanno i permessi per il mio utente.


Ho solo pensato di lasciare un commento qui dicendo che consentire a un utente di eseguire contenitori Docker equivale a dargli pieno accesso root. Questo è anche documentato nella sezione sulla sicurezza della documentazione del docker.
Blackclaws

Risposte:


171

È possibile specificare che un volume debba essere di sola lettura aggiungendo :roallo -vswitch:

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

Si noti che la cartella è quindi di sola lettura nel contenitore e di lettura / scrittura sull'host.

2018 Modifica

Secondo la documentazione sull'uso dei volumi , ora esiste un altro modo per montare i volumi utilizzando lo --mountswitch. Ecco come utilizzarlo con la sola lettura:

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

finestra mobile-composizione

Ecco un esempio su come specificare contenitori di sola lettura in docker-compose:

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

8
c'è consentire le scritture, ma non riscriverle sull'host? sarebbe fantastico
Ray Foss il

9
Sembra che tu non voglia specificare alcun volume.
Alp

1
Più o meno ... Non mi piace dover creare un'immagine solo per utilizzare Dockerfile COPY o utilizzare un docker cpcomando separato su un contenitore spento.
Ray Foss il

5
Forse potresti creare una nuova domanda per quello in cui fornisci maggiori dettagli e collegalo qui?
Alp

Puoi anche usare la sintassi breve con la composta redis:alpine:ro
docker

23

finestra mobile-composizione

Ecco un modo corretto per specificare il volume di sola lettura in 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
È davvero corretto, ma ciò che è di sola lettura qui è un volume, non un contenitore.
Константин Ван

Funziona solo per me con version: "3.2"- Grazie :)
Davey

"Aggiunto nel formato file della versione 3.2." sì
rybo111

3
Puoi anche fare - './my-file.txt:/container-readonly-file.txt:ro'sotto volumes: nota :roalla fine.
rybo111
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.