run - docker tag example
Docker Copiar y cambiar de propietario (3)
Copio los archivos al directorio temporal (e, g:
/tmp/
) que utilizo
RUN cp
para copiarlos cuando los quiero.
COPY myfile /tmp/
RUN cp -r /tmp/myfile /target/path/
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, configuré los permisos del 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 del sistema de archivos aufs, donde el directorio copiado aún es propiedad de root y los permisos están configurados en 770.
¿Hay alguna solución para este problema para establecer los permisos correctamente? Una podría ser establecer los permisos del directorio original en el uid del usuario del contenedor antes de copiarlo. Pero esto parece más un truco.
Creo que encontré una solución, que funciona. Usar 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 mis usuarios, que podrían verse así
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 configurar los permisos del usuario:
#!/bin/bash
if [ ! -e /data/.bootstrapped ] ; then
chown -R john:mygroup /data
touch /data/.bootstrapped
fi
Ahora solo tengo que usar
--volumes-from <myDataContainerId>
cuando
--volumes-from <myDataContainerId>
el contenedor de la aplicación.
Finalmente, se agregó una bandera
--chown
a
COPY
:
COPY --chown=patrick hostPath containerPath
Esta nueva sintaxis parece funcionar en Docker 17.09.
Vea el PR para más información.