Bagaimana cara Docker COPY sebagai bukan root?


143

Saat membangun gambar Docker, bagaimana cara saya COPYfile ke dalam gambar sehingga file yang dihasilkan dimiliki oleh pengguna selain root?

Jawaban:


206

Untuk versi v17.09.0-ce dan yang lebih baru

Gunakan bendera opsional --chown=<user>:<group>dengan perintah ADDatau COPY.

Sebagai contoh

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

Dokumentasi untuk flag --chown sekarang ditampilkan langsung di halaman Referensi Dockerfile utama .

Masalah 34263 telah digabungkan dan tersedia dalam rilis v17.09.0-ce .


Untuk versi yang lebih lama dari v17.09.0-ce

Docker tidak mendukung COPYsebagai pengguna selain root. Anda perlu chown/ chmodfile setelah itu COPYperintah.

Contoh Dockerfile:

from centos:6
RUN groupadd -r myuser && adduser -r -g myuser myuser
USER myuser
#Install code, configure application, etc...
USER root
COPY run-my-app.sh /usr/local/bin/run-my-app.sh
RUN chown myuser:myuser /usr/local/bin/run-my-app.sh && \
    chmod 744 /usr/local/bin/run-my-app.sh
USER myuser
ENTRYPOINT ["/usr/local/bin/run-my-app.sh"]

Sebelum v17.09.0-ce, Dockerfile Reference untuk COPYperintah tersebut mengatakan:

Semua file dan direktori baru dibuat dengan UID dan GID 0.


Sejarah Fitur ini telah dilacak melalui beberapa masalah GitHub: 6119 , 9943 , 13600 , 27303 , 28499 , Edisi 30110 .

Masalah 34263 adalah masalah yang mengimplementasikan fungsionalitas flag opsional dan Edisi 467 memperbarui dokumentasi.


3
Ini menyebalkan, karena chown-ing banyak file telah menjadi sangat lambat sejak overlay2 telah menjadi driver penyimpanan default
— hbogert

1
Yap, selain itu, ia menciptakan lapisan gambar ekstra besar tanpa alasan yang jelas (dalam kasus saya:> 300MB untuk berjalan chownpada 40MB file).
— Dirk

Ada satu manfaat juga untuk menjalankan chown bersama dengan perintah COPY yaitu pengurangan ukuran. Jika kita menjalankan kedua perintah secara terpisah (COPY <host_path> <source_path>; chown other_user: other_user) maka itu menciptakan satu lapisan tambahan yang akhirnya menggandakan ukuran gambar.
— abhishek thakur

Jawaban ini adalah penyelamat. Terima kasih banyak, memecahkan masalah yang telah saya perjuangkan selama beberapa jam.
— Colby Hill
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.