Saya mencoba menambahkan file ke gambar Docker yang dibuat dari tomcat
gambar resmi . Gambar itu tampaknya tidak memiliki hak root, karena saya masuk sebagai pengguna tomcat
jika saya menjalankan bash:
docker run -it tomcat /bin/bash
tomcat@06359f7cc4db:/usr/local/tomcat$
Jika saya menginstruksikan Dockerfile
untuk menyalin file ke wadah itu, file tersebut memiliki izin 644
dan pemiliknya root
. Sejauh yang saya mengerti, itu tampaknya masuk akal karena semua perintah di Dockerfile dijalankan sebagai root. Namun, jika saya mencoba mengubah kepemilikan file itu tomcat:tomcat
, saya mendapatkan Operation not permitted
kesalahan.
Mengapa saya tidak bisa mengubah izin file yang disalin ke gambar itu?
Bagaimana bisa direproduksi:
mkdir docker-addfilepermission
cd docker-addfilepermission
touch test.txt
echo 'FROM tomcat
COPY test.txt /usr/local/tomcat/webapps/
RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt' > Dockerfile
docker build .
Output dari docker build .
:
Sending build context to Docker daemon 3.072 kB
Sending build context to Docker daemon
Step 0 : FROM tomcat
---> 44859847ef64
Step 1 : COPY test.txt /usr/local/tomcat/webapps/
---> Using cache
---> a2ccb92480a4
Step 2 : RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt
---> Running in 208e7ff0ec8f
chown: changing ownership of '/usr/local/tomcat/webapps/test.txt': Operation not permitted
2014/11/01 00:30:33 The command [/bin/sh -c chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt] returned a non-zero code: 1
root
? Mengapa mereka tidak mempertimbangkanUSER
petunjuknya?Karena Docker 17.09 orang dapat menggunakan
--chown
flag pada operasi ADD / COPY di Dockerfile untuk mengubah pemilik dalam langkah ADD / COPY itu sendiri daripada operasi RUN terpisah dengan chown yang meningkatkan ukuran gambar seperti yang telah Anda catat. Akan lebih baik untuk memiliki ini sebagai mode default yaitu izin pengguna menyalin file diterapkan ke file yang disalin. Namun, tim Docker tidak ingin merusak kompatibilitas dan karenanya memperkenalkan bendera baru.Alternatif lain adalah:
sumber