web-dev-qa-db-ger.com

Wie kopiere ich Docker als Nicht-Root?

Wie kann ich beim Erstellen eines Docker-Images eine Datei COPY in das Image einfügen, sodass die resultierende Datei einem anderen Benutzer als root gehört?

91
FGreg

Für Versionen v17.09.0-ce und neuer

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

Zum Beispiel

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

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

Ausgabe 426 wurde zusammengeführt und ist verfügbar in Release v17.09.0-ce .


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

Docker unterstützt COPY nicht als Benutzer außer root. Sie müssen chown/chmod die Datei after den Befehl COPY.

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 v17.09.0-ce lautete die Dockerfile-Referenz für den Befehl COPY:

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


Verlauf Diese Funktion wurde in mehreren GitHub-Problemen nachverfolgt: 6119 , 994 , 136 , 273 , 28499 , Ausgabe 3011 .

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

128
FGreg