Jak Docker COPY jako użytkownik inny niż root?

142

Jak podczas budowania obrazu COPYplatformy Docker mogę umieścić plik w obrazie, aby plik wynikowy był własnością innego użytkownika niż root?

FGreg
źródło

Odpowiedzi:

205

Dla wersji v17.09.0-ce i nowszych

Użyj opcjonalnej flagi --chown=<user>:<group>z poleceniami ADDlub COPY.

Na przykład

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

Dokumentacja dotycząca flagi --chown jest teraz dostępna na głównej stronie odniesienia do pliku Dockerfile .

Wydanie 34263 zostało scalone i jest dostępne w wersji 17.09.0-ce .


W przypadku wersji starszych niż 17.09.0-ce

Docker nie obsługuje COPYużytkownika innego niż root. Musisz chown/ chmodpliku po tym COPYpoleceniu.

Przykładowy plik 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"]

Przed wersją 17.09.0-ce w dokumencie Dockerfile Reference dla COPYpolecenia było napisane:

Wszystkie nowe pliki i katalogi są tworzone z UID i GID równym 0.


Historia Ta funkcja była śledzona w wielu wydaniach GitHub: 6119 , 9943 , 13600 , 27303 , 28499 , wydanie 30110 .

Problem 34263 to problem polegający na zaimplementowaniu opcjonalnej funkcji flagi, a wydanie 467 zaktualizowało dokumentację.

FGreg
źródło
3
To frustrujące, ponieważ chowning wielu plików stał się niewiarygodnie powolny, odkąd nakładka 2 stała się domyślnym sterownikiem pamięci masowej
hbogert
1
Tak, poza tym tworzy dużą dodatkową warstwę obrazu bez wyraźnego powodu (w moim przypadku:> 300 MB do uruchamiania chownna 40 MB plików).
Dirk
Uruchamianie polecenia chown wraz z poleceniem COPY ma również jedną zaletę, czyli zmniejszenie rozmiaru. Jeśli uruchomimy te dwie komendy oddzielnie (COPY <ścieżka_hosta> <ścieżka_źródła>; chown other_user: other_user), to utworzyło jedną dodatkową warstwę, która ostatecznie podwaja rozmiar obrazu.
abhishek thakur
Ta odpowiedź jest ratunkiem. Dziękuję bardzo, rozwiązałem problem, z którym walczyłem przez kilka godzin.
Colby Hill