Ich versuche, einem Docker-Image, das aus dem offiziellen tomcat
Image erstellt wurde , eine Datei hinzuzufügen . Dieses Image scheint keine Root-Rechte zu haben, da ich als Benutzer angemeldet bin, tomcat
wenn ich bash ausführe:
docker run -it tomcat /bin/bash
tomcat@06359f7cc4db:/usr/local/tomcat$
Wenn ich a Dockerfile
anweise, eine Datei in diesen Container zu kopieren, hat die Datei Berechtigungen 644
und der Besitzer ist root
. Soweit ich weiß, scheint dies sinnvoll zu sein, da alle Befehle in der Docker-Datei als root ausgeführt werden. Wenn ich jedoch versuche, den Besitz dieser Datei zu ändern tomcat:tomcat
, wird eine Operation not permitted
Fehlermeldung angezeigt.
Warum kann ich die Berechtigungen einer auf dieses Image kopierten Datei nicht ändern?
Wie es reproduziert werden kann:
mkdir docker-addfilepermission
cd docker-addfilepermission
touch test.txt
echo 'FROM tomcat
COPY test.txt /usr/local/tomcat/webapps/
RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt' > Dockerfile
docker build .
Die Ausgabe von docker build .
:
Sending build context to Docker daemon 3.072 kB
Sending build context to Docker daemon
Step 0 : FROM tomcat
---> 44859847ef64
Step 1 : COPY test.txt /usr/local/tomcat/webapps/
---> Using cache
---> a2ccb92480a4
Step 2 : RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt
---> Running in 208e7ff0ec8f
chown: changing ownership of '/usr/local/tomcat/webapps/test.txt': Operation not permitted
2014/11/01 00:30:33 The command [/bin/sh -c chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt] returned a non-zero code: 1
root
? WarumUSER
berücksichtigen sie die Richtlinie nicht?Seit Docker 17.09 können Sie das
--chown
Flag für ADD / COPY-Vorgänge in Dockerfile verwenden, um den Eigentümer im ADD / COPY-Schritt selbst zu ändern, anstatt einen separaten RUN-Vorgang mit chown auszuführen, der das Bild vergrößert, wie Sie bemerkt haben. Es wäre gut gewesen, dies als Standardmodus zu verwenden, dh die Berechtigungen des Benutzers, der die Dateien kopiert, werden auf die kopierten Dateien angewendet. Das Docker-Team wollte jedoch die Abwärtskompatibilität nicht aufheben und führte daher eine neue Flagge ein.Die anderen Alternativen sind:
quelle