Wie kann ich COPY als Nicht-Root andocken?


140

Wie füge ich beim Erstellen eines Docker-Images COPYeine Datei in das Image ein, sodass die resultierende Datei einem anderen Benutzer als root gehört?

Antworten:


202

Für Versionen v17.09.0-ce und neuer

Verwenden Sie das optionale Flag --chown=<user>:<group>mit den Befehlen ADDoder COPY.

Beispielsweise

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

Die Dokumentation für das Flag --chown befindet sich jetzt auf der Hauptseite der Dockerfile-Referenz .

Ausgabe 34263 wurde zusammengeführt und ist in Version v17.09.0-ce verfügbar .


Für Versionen älter als v17.09.0-ce

Docker unterstützt keinen COPYanderen Benutzer als root. Sie müssen chown/ chmoddie Datei nach dem COPYBefehl.

Beispiel 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"]

Vor Version 17.09.0-ce lautete die Dockerfile-Referenz für den COPYBefehl:

Alle neuen Dateien und Verzeichnisse werden mit einer UID und GID von 0 erstellt.


Verlauf Diese Funktion wurde anhand mehrerer GitHub-Probleme verfolgt: 6119 , 9943 , 13600 , 27303 , 28499 , Ausgabe 30110 .

Problem 34263 ist das Problem, das die optionale Flag-Funktionalität implementiert hat, und Problem 467 hat die Dokumentation aktualisiert.


3
Dies ist frustrierend, da das Chowning vieler Dateien unglaublich langsam geworden ist, da das Overlay2 zum Standard-Speichertreiber geworden ist
— hbogert

1
Ja, außerdem wird ohne ersichtlichen Grund eine große zusätzliche Bildebene erstellt (in meinem Fall:> 300 MB für die Ausführung chownmit 40 MB Dateien).
— Dirk

Es gibt auch einen Vorteil beim Ausführen von chown zusammen mit dem Befehl COPY, nämlich die Größenreduzierung. Wenn wir diese beiden Befehle separat ausführen (COPY <Host_Pfad> <Quelle_Pfad>; chown other_user: other_user), wurde eine zusätzliche Ebene erstellt, die schließlich die Bildgröße verdoppelt.
— Abhishek Thakur

Diese Antwort ist ein Lebensretter. Vielen Dank, ein Problem gelöst, mit dem ich einige Stunden lang gekämpft hatte.
— Colby Hill
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.