example - ¿Por qué chown no funciona en Dockerfile?
docker tag example (2)
Este blog http://container42.com/2014/11/03/docker-indepth-volumes/ explica este comportamiento en detalle.
Cada instrucción en Dockerfile crea un nuevo contenedor. La instrucción realiza algunos cambios en este contenedor y se convierte en una nueva capa. Los cambios realizados en "/ var / local / testrunner / logs" antes de la instrucción VOLUME se realizaron en el sistema de archivos del contenedor real. Sin embargo, después de la instrucción VOLUME, el directorio "/ var / local / testrunner / logs" es el directorio montado. Los cambios realizados en este directorio después de la instrucción VOLUME se aplicarán en el directorio montado y no en el sistema de archivos contenedor real.
My Dockerfile crea un directorio, lo usa y luego enumera el directorio. El directorio aún es propiedad de root. ¿Porqué es eso?
Aquí está el archivo Dockerfile:
FROM ubuntu:precise
RUN useradd -d /home/testuser -m -s /bin/bash testuser
RUN mkdir -p /var/local/testrunner/logs
VOLUME ["/var/local/testrunner/logs"]
RUN grep testuser /etc/passwd
RUN grep root /etc/passwd
RUN chown -R testuser:testuser /var/local/testrunner/logs
RUN ls -ld /var/local/testrunner/logs
Aquí está el resultado de "Docker Build":
Sending build context to Docker daemon 10.24 kB
Sending build context to Docker daemon
Step 0 : FROM ubuntu:precise
---> ab8e2728644c
Step 1 : RUN useradd -d /home/testuser -m -s /bin/bash testuser
---> Using cache
---> 640f12671c86
Step 2 : RUN mkdir -p /var/local/testrunner/logs
---> Using cache
---> bf7756fd5b1f
Step 3 : VOLUME ["/var/local/testrunner/logs"]
---> Using cache
---> 65c73ee76c20
Step 4 : RUN grep testuser /etc/passwd
---> Using cache
---> db72fff0b965
Step 5 : RUN grep root /etc/passwd
---> Running in ebff78df7a9a
root:x:0:0:root:/root:/bin/bash
---> ead0ff704a59
Removing intermediate container ebff78df7a9a
Step 6 : RUN chown -R testuser:testuser /var/local/testrunner/logs
---> Running in c925f67b2ab4
---> 253132be935e
Removing intermediate container c925f67b2ab4
Step 7 : RUN ls -ld /var/local/testrunner/logs
---> Running in 978bc66aa47e
drwxr-xr-x 2 root staff 4096 Oct 1 15:15 /var/local/testrunner/logs
Docker versión 1.2.0, compilación fa7b24f
El host ejecuta Ubuntu 12.04, pero con un núcleo genérico 3.13.0-36.
Respondiendo a mi propia pregunta: se declara que es un volumen. Si saca la instrucción VOLUME, el chown tiene efecto.
Además, si declara el volumen después de ejecutar chown, la configuración de chown permanecerá en vigencia.