Estoy tratando de agregar un archivo a una imagen Docker creada a partir de la tomcat
imagen oficial . Esa imagen no parece tener derechos de root, ya que estoy conectado como usuario tomcat
si ejecuto bash:
docker run -it tomcat /bin/bash
tomcat@06359f7cc4db:/usr/local/tomcat$
Si instruir a un Dockerfile
copiar un archivo a ese contenedor, el archivo tiene permisos 644
y el propietario es root
. Según tengo entendido, eso parece ser razonable ya que todos los comandos en el Dockerfile se ejecutan como root. Sin embargo, si intento cambiar la propiedad de ese archivo tomcat:tomcat
, aparece un Operation not permitted
error.
¿Por qué no puedo cambiar los permisos de un archivo copiado a esa imagen?
Cómo se puede reproducir:
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 .
La salida de 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
? ¿Por qué no tomanUSER
en cuenta la directiva?Desde Docker 17.09, se puede usar el
--chown
indicador en las operaciones ADD / COPY en Dockerfile para cambiar el propietario en el paso ADD / COPY en lugar de una operación RUN separada con chown que aumenta el tamaño de la imagen como ha notado. Hubiera sido bueno tener esto como el modo predeterminado, es decir, los permisos del usuario que copia los archivos se aplican a los archivos copiados. Sin embargo, el equipo de Docker no quería romper la compatibilidad con versiones anteriores y, por lo tanto, introdujo una nueva bandera.Las otras alternativas son:
fuente