Bagaimana cara menambahkan file ke wadah docker yang tidak memiliki izin root?

Saya mencoba menambahkan file ke gambar buruh pelabuhan yang dibuat dari pejabat tomcat gambar. Gambar itu tampaknya tidak memiliki hak root, karena saya masuk sebagai pengguna tomcat jika saya menjalankan bash:

docker run -it tomcat /bin/bashtomcat@06359f7cc4db:/usr/local/tomcat$ 

Jika saya menginstruksikan a Dockerfile untuk menyalin file ke wadah itu, file memiliki izin 644 dan pemiliknya adalah 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 menjadi tomcat:tomcat, Saya mendapatkan Operation not permitted kesalahan.

Mengapa saya tidak dapat mengubah izin file yang disalin ke gambar itu?

Bagaimana itu bisa direproduksi:

mkdir docker-addfilepermissioncd docker-addfilepermissiontouch test.txtecho 'FROM tomcatCOPY test.txt /usr/local/tomcat/webapps/RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt' > Dockerfiledocker build .

Output dari docker build .:

Sending build context to Docker daemon 3.072 kBSending build context to Docker daemon Step 0 : FROM tomcat ---> 44859847ef64Step 1 : COPY test.txt /usr/local/tomcat/webapps/ ---> Using cache ---> a2ccb92480a4Step 2 : RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt ---> Running in 208e7ff0ec8fchown: changing ownership of '/usr/local/tomcat/webapps/test.txt': Operation not permitted2014/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

Kemungkinan ada cara untuk melihat dan mengubah Dockerfile untuk tomcat, tetapi saya tidak dapat mengetahuinya setelah beberapa menit. Solusi janggal saya adalah menambahkan baris ini sebelum chown:

USER root

Jika Anda ingin menghilangkan hak istimewa setelahnya (yang disarankan) , anda dapat menambahkan baris ini:

USER tomcat

Bergantian, bekerja dengan gambar yang tidak memiliki perangkat lunak yang diinstal sehingga anda dapat memulai Dockerfile Anda sebagai root dan menginstal tomcat dan semua itu. Sebenarnya aneh mereka mengubah itu dalam citra mereka dari pengalaman saya. Masuk akal untuk mengizinkan pengguna akhir yang dimaksud untuk mengatur direktif pengguna sesuai keinginan mereka.

Sejak Docker 17.09 seseorang dapat menggunakan --chown tandai operasi Tambah / Salin di Dockerfile untuk mengubah pemilik di langkah Tambah / Salin itu sendiri daripada operasi jalankan terpisah dengan chown yang meningkatkan ukuran gambar seperti yang anda catat. Akan lebih baik untuk memiliki ini sebagai mode default yaitu izin pengguna yang menyalin file diterapkan ke file yang disalin. Namun, tim buruh pelabuhan tidak ingin merusak kompatibilitas ke belakang dan karenanya memperkenalkan bendera baru.

COPY --chown=<user>:<group> <hostPath> <containerPath>

Alternatif lainnya adalah:

  1. Mengubah izin dalam folder pementasan sebelum membangun gambar.
  2. Jalankan wadah melalui skrip bootstrap yang mengubah kepemilikan.
  3. Squash lapisan!