Docker Copiar y cambiar propietario
Dado el siguiente Dockerfile
FROM ubuntu
RUN groupadd mygroup
RUN useradd -ms /bin/bash -G mygroup john
MKDIR /data
COPY test/ /data/test data
RUN chown -R john:mygroup /data
CMD /bin/bash
En mi directorio de prueba, que se copia, he establecido los permisos de archivo en 770.
Si hago un su john
dentro de mi contenedor, no puedo acceder a ninguno de los archivos o subdirectorios en mi directorio de prueba. Parece que este problema está relacionado con la propiedad en el sistema de archivos aufs, donde el directorio copiado todavía es propiedad de root y los permisos se establecen en 770.
¿Hay alguna solución para este problema para establecer los permisos correctamente? Una podría ser establecer los permisos del directorio original al uid del usuario contenedor antes de copiarlo. Pero esto parece más un truco.
2 answers
Finalmente se ha agregado una bandera --chown
a COPY
:
COPY --chown=patrick hostPath containerPath
Esta nueva sintaxis parece funcionar en Docker 17.09.
Ver el PR para más información.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-03 19:26:27
Creo que encontré una solución, que funciona. El uso de un contenedor de volumen de datos hará el truco. Primero creo el Contenedor de Volumen de Datos, que contiene la copia de mi directorio externo:
FROM busybox
RUN mkdir /data
VOLUME /data
COPY /test /data/test
CMD /bin/sh
En mi contenedor de aplicaciones, donde tengo a mis usuarios, que podrían verse algo como esto
FROM ubuntu
RUN groupadd mygroup
RUN useradd -ms /bin/bash -G mygroup john
COPY setpermissions.sh /root/setpermissions.sh
CMD /root/setpermissions.sh && /bin/bash
El script setpermissions hace el trabajo de establecer los permisos de usuario:
#!/bin/bash
if [ ! -e /data/.bootstrapped ] ; then
chown -R john:mygroup /data
touch /data/.bootstrapped
fi
Ahora solo tengo que usar el --volumes-from <myDataContainerId>
al ejecutar el contenedor de la aplicación.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-06 07:58:44