Saya punya yang berikut ini Dockerfile
:
FROM ubuntu:xenial
RUN useradd -d /home/ubuntu -ms /bin/bash -g root -G sudo -p ubuntu ubuntu
WORKDIR /home/ubuntu
USER ubuntu
VOLUME /opt/myvolume
Yang saya bangun itu:
$ docker build -t vol-test .
Sending build context to Docker daemon 2.048kB
Step 1/5 : FROM ubuntu:xenial
---> 0b1edfbffd27
Step 2/5 : RUN useradd -d /home/ubuntu -ms /bin/bash -g root -G sudo -p ubuntu ubuntu
---> Using cache
---> d82e3ecc5fe8
Step 3/5 : WORKDIR /home/ubuntu
---> Using cache
---> ab1db29ee8bf
Step 4/5 : USER ubuntu
---> Using cache
---> 129393a35d9e
Step 5/5 : VOLUME /opt/myvolume
---> Running in 691a4cbd077e
Removing intermediate container 691a4cbd077e
---> 11bc9e9db9d3
Successfully built 11bc9e9db9d3
Successfully tagged vol-test:latest
Namun, ketika dijalankan, /opt/myvolume
direktori dimiliki oleh root
, bukan ubuntu
:
$ docker run vol-test id
uid=1000(ubuntu) gid=0(root) groups=0(root),27(sudo)
$ docker run vol-test find /opt/myvolume -ls
66659 4 drwxr-xr-x 2 root root 4096 Jul 18 23:02 /opt/myvolume
$ docker run -u ubuntu vol-test find /opt/myvolume -ls
66940 4 drwxr-xr-x 2 root root 4096 Jul 18 23:12 /opt/myvolume
karena itu dibuat selama proses.
Apakah mungkin untuk mendefinisikan atau mengubah pemilik VOLUME
direktori default Dockerfile
?
Saya menjalankannya di macOS dan Linux.
docker
dockerfile
permissions
kenorb
sumber
sumber
Jawaban:
Seperti yang dinyatakan dalam dokumentasi , instruksi VOLUME mewarisi konten direktori dan izin yang ada di wadah, sehingga Anda dapat menyelesaikan masalah dengan buruh pelabuhan seperti ini:
Pembuatan direktori harus dilakukan sebagai root (untuk dapat menulis di dalam / opt).
sumber
VOLUME
setelah direktori dibuat: Jika langkah membangun apa pun mengubah data dalam volume setelah dideklarasikan, perubahan itu akan dibuang.Saya memiliki masalah yang sama, ini bekerja untuk saya:
Tulis file Docker dengan:
Jalankan perintah bash ini:
Perhatikan nama, UID, GID harus sama untuk pengguna Docker dan pengguna host. Perintah bash terakhir memberitahu gambar Docker bahwa pengguna host itu sama dengan pengguna volume bersama Docker, sehingga file dir kemudian menjadi milik "testuser" dalam wadah Docker.
sumber