¿Cómo docker COPY como no root?


143

Al crear una imagen de Docker, ¿cómo agrego COPYun archivo a la imagen para que el archivo resultante sea propiedad de un usuario que no sea root?

Respuestas:


206

Para versiones v17.09.0-ce y posteriores

Use la bandera opcional --chown=<user>:<group>con los comandos ADDo COPY.

Por ejemplo

COPY --chown=<user>:<group> <hostPath> <containerPath>

La documentación para el indicador --chown ahora está activa en la página principal de referencia de Dockerfile .

El número 34263 se ha fusionado y está disponible en la versión v17.09.0-ce .


Para versiones anteriores a v17.09.0-ce

Docker no es compatible COPYcomo usuario que no sea root. Necesita chown/ chmodel archivo después del COPYcomando.

Dockerfile de ejemplo:

from centos:6
RUN groupadd -r myuser && adduser -r -g myuser myuser
USER myuser
#Install code, configure application, etc...
USER root
COPY run-my-app.sh /usr/local/bin/run-my-app.sh
RUN chown myuser:myuser /usr/local/bin/run-my-app.sh && \
    chmod 744 /usr/local/bin/run-my-app.sh
USER myuser
ENTRYPOINT ["/usr/local/bin/run-my-app.sh"]

Antes de v17.09.0-ce, la referencia de Dockerfile para el COPYcomando decía:

Todos los archivos y directorios nuevos se crean con un UID y GID de 0.


Historial Esta función ha sido rastreada a través de múltiples problemas de GitHub: 6119 , 9943 , 13600 , 27303 , 28499 , problema 30110 .

El problema 34263 es el problema que implementó la funcionalidad de marca opcional y el problema 467 actualizó la documentación.


3
Esto es frustrante, ya que la creación de una gran cantidad de archivos se ha vuelto increíblemente lenta desde que overlay2 se ha convertido en el controlador de almacenamiento predeterminado
— hbogert

1
Sí, además, crea una gran capa de imagen adicional sin razón aparente (en mi caso:> 300 MB para ejecutarse chownen 40 MB de archivos).
— Dirk

También hay un beneficio para ejecutar chown junto con el comando COPY, que es la reducción de tamaño. Si ejecutamos esos dos comandos por separado (COPY <host_path> <source_path>; chown other_user: other_user), se creó una capa adicional que finalmente duplica el tamaño de la imagen.
— abhishek thakur

Esta respuesta es un salvavidas. Muchas gracias, resolvió un problema que había estado luchando durante unas horas.
— Colby Hill
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.