Docker, pasang volume hanya sebagai baca

106

Saya bekerja dengan Docker, dan saya ingin memasang folder dinamis yang banyak berubah (jadi saya tidak perlu membuat gambar Docker untuk setiap eksekusi, yang akan terlalu mahal), tetapi saya ingin folder itu menjadi hanya-baca . Mengubah pemilik folder menjadi orang lain berfungsi. Namun, chownmemerlukan rootakses, yang saya lebih suka untuk tidak mengekspos aplikasi.

Ketika saya menggunakan -vflag untuk memasang, itu memberikan nama pengguna apa pun yang saya berikan, saya membuat pengguna non-root di dalam gambar buruh pelabuhan, namun, semua file dalam volume dengan pemilik sebagai pengguna yang menjalankan buruh pelabuhan, berubah menjadi pengguna I berikan dari baris perintah, jadi saya tidak dapat membuat file dan folder hanya-baca. Bagaimana cara mencegahnya?

Saya juga menambahkan mustafa ALL=(docker) NOPASSWD: /usr/bin/docker, sehingga saya dapat beralih ke pengguna lain melalui terminal, tetapi tetap saja, file tersebut memiliki izin untuk pengguna saya.

Mustafa
sumber
Hanya berpikir saya akan meninggalkan komentar di sini mengatakan bahwa memungkinkan pengguna untuk menjalankan kontainer buruh pelabuhan itu sama dengan memberinya akses root penuh. Ini juga didokumentasikan di bagian keamanan dari dokumentasi buruh pelabuhan.
Blackclaws

Jawaban:

170

Anda dapat menentukan bahwa volume harus hanya-baca dengan menambahkan :roke -vsakelar:

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

Perhatikan bahwa folder kemudian menjadi hanya-baca di penampung dan baca-tulis di host.

Edit 2018

Menurut dokumentasi Gunakan volume , sekarang ada cara lain untuk memasang volume dengan menggunakan --mountsakelar. Berikut adalah cara memanfaatkannya dengan read-only:

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

buruh pelabuhan-menulis

Berikut adalah contoh cara menentukan penampung hanya-baca di docker-compose:

version: "3"
services:
  redis:
    image: redis:alpine
    read_only: true
Puncak gunung
sumber
8
apakah ada mengizinkan penulisan, tetapi tidak menulisnya kembali ke host? itu akan luar biasa
Ray Foss
9
Kedengarannya seperti Anda tidak ingin menentukan volume sama sekali.
Alp
1
Semacam ... Saya hanya tidak suka harus membuat gambar hanya untuk menggunakan Dockerfile COPY atau menggunakan docker cpperintah terpisah pada wadah mematikan.
Ray Foss
5
Mungkin Anda bisa membuat pertanyaan baru untuk itu di mana Anda memberikan detail lebih lanjut dan menautkannya di sini?
Alp
Anda juga dapat menggunakan sintaks pendek dengan kompot buruh pelabuhan, yaituredis:alpine:ro
mb14
23

buruh pelabuhan-menulis

Berikut adalah cara yang tepat untuk menentukan volume hanya-baca di 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

Denis Stafichuk
sumber
2
Memang pantas, tapi yang hanya bisa dibaca disini adalah volume, bukan wadah.
Константин Ван
Ini hanya bekerja untuk saya dengan version: "3.2"- Terima kasih :)
Davey
"Ditambahkan dalam format file versi 3.2." ya
rybo111
3
Anda juga dapat melakukan di - './my-file.txt:/container-readonly-file.txt:ro'bawah volumes- perhatikan :rodi akhir.
rybo111