Docker COPY'yi root olmayan olarak nasıl kullanabilirim?


143

Docker görüntüsü COPYoluştururken, ortaya çıkan dosyanın root dışındaki bir kullanıcıya ait olması için görüntüye nasıl dosya eklerim ?

Yanıtlar:


206

V17.09.0-ce ve daha yeni sürümler için

Opsiyonel bayrağını kullanın --chown=<user>:<group>biriyle ADDveya COPYkomutlar.

Örneğin

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

--Chown bayrağıyla ilgili belgeler artık ana Dockerfile Başvuru sayfasında yayınlanmaktadır .

Sayı 34263 birleştirildi ve v17.09.0-ce sürümünde mevcut .


V17.09.0-ce'den daha eski sürümler için

Docker, COPYroot dışında bir kullanıcı olarak desteklenmez . Sen gerek chown/ chmoddosyanın sonraCOPY komuta.

Örnek 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"]

V17.09.0-ce'den önce, komutun Dockerfile Başvurusu COPYşunları söyledi:

Tüm yeni dosyalar ve dizinler UID ve GID 0 ile oluşturulur.


Geçmiş Bu özellik birçok GitHub sorunu ile izlenmiştir: 6119 , 9943 , 13600 , 27303 , 28499 , Sayı 30110 .

Sayı 34263 , isteğe bağlı bayrak işlevini uygulayan sorundur ve Sayı 467 , belgeleri güncelleştirmiştir.


3
Bu çok canlandırıcıdır, çünkü bindirme2 varsayılan depolama sürücüsü haline geldiğinden çok fazla dosya kesilmesi inanılmaz derecede yavaş hale gelmiştir
— hbogert

1
Evet, ayrıca, belirgin bir sebep olmadan büyük bir ekstra görüntü katmanı oluşturur (benim durumumda: chown40MB dosyalarda çalıştırmak için> 300MB ).
— Dirk

Boyut küçültme olan KOPYA komutu ile birlikte chown çalıştırmanın bir yararı da vardır. Bu iki komutu ayrı olarak çalıştırırsak (COPY <host_path> <source_path>; chown other_user: other_user), daha sonra görüntü boyutunu iki katına çıkaran bir ekstra katman oluşturdu.
— abhishek thakur

Bu cevap bir cankurtaran. Çok teşekkür ederim, birkaç saattir savaştığım bir sorunu çözdüm.
— Colby Hill
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.