tag run remove hub example compose docker file-permissions dockerfile

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.