Parece un problema básico, pero no pude encontrar ninguna respuesta hasta ahora.
Al usar AGREGAR/COPIAR en Dockerfile y ejecutar la imagen en Linux, el permiso de archivo predeterminado del archivo copiado en la imagen es 644. El propietario de este archivo parece ser 'root'
Sin embargo, al ejecutar la imagen, un usuario no root inicia el contenedor y cualquier archivo copiado con el permiso 644 no puede ejecutar este archivo copiado/agregado y si el archivo se ejecuta en ENTRYPOINT, no se inicia con el error de permiso denegado.
Leí en una de las publicaciones que COPY/ADD después de Docker 1.17.0+ permite chown pero en mi caso no sé quién será el usuario no root que comenzará, así que no puedo establecer el permiso como ese usuario.
También vi otro trabajo para AGREGAR/COPIAR archivos en una ubicación diferente y usar EJECUTAR para copiarlos desde la ubicación temporal a la carpeta real como lo que estoy haciendo a continuación. Pero este enfoque no funciona ya que la imagen final no tiene los archivos en /otp/scm
#Installing Bitbucket and setting variables WORKDIR /tmp ADD atlassian-bitbucket-${BITBUCKET_VERSION}.tar.gz . COPY bbconfigupdater.sh . #Copying Entrypoint script which will get executed when container starts WORKDIR /tmp COPY entrypoint.sh . RUN ls -lrth /tmp WORKDIR /opt/scm RUN pwd && cp /tmp/bbconfigupdater.sh /opt/scm \ && cp /tmp/entrypoint.sh /opt/scm \ && cp -r /tmp/atlassian-bitbucket-${BITBUCKET_VERSION} /opt/scm \ && chgrp -R 0 /opt/ \ && chmod -R 755 /opt/ \ && chgrp -R 0 /scm/bitbucket \ && chmod -R 755 /scm/bitbucket \ && ls -lrth /opt/scm && ls -lrth /scmdataSe agradece cualquier ayuda para descubrir cómo puedo hacer que mi secuencia de comandos de punto de entrada se copie en la ruta deseada con los permisos de ejecución establecidos.
El permiso de archivo predeterminado es cualquiera que sea el permiso de archivo en su contexto de compilación desde donde copia el archivo. Si controla la fuente, es mejor corregir los permisos allí para evitar una operación de copia en escritura. De lo contrario, si no puede garantizar que el sistema que crea la imagen tendrá el bit de ejecución establecido en los archivos, un chmod después de la operación de copia arreglará el permiso. P.ej
RUN chmod +x entrypoint.sh No necesita saber quién administrará el contenedor. El usuario dentro del contenedor generalmente lo configura el creador de la imagen (usando USER ) y no depende del usuario que ejecuta el contenedor desde el host de la ventana acoplable. Cuando el usuario ejecuta el contenedor, envía una solicitud a la API de docker que no rastrea la identificación del usuario que llama.
La única vez que he visto que el usuario del host importa es si tiene un volumen de host y desea evitar problemas de permisos. Si ese es su escenario, a menudo inicio el punto de entrada como root, ejecuto un script llamado fix-perms para alinear el uid del contenedor con el uid del volumen del host y luego ejecuto gosu para cambiar de root al usuario del contenedor.
Se agregó un indicador --chmod a las instrucciones ADD y COPY en Docker CE 20.10 . Así que ahora puedes hacer.
COPY --chmod=0755 entrypoint.sh .Para poder usarlo, debe habilitar BuildKit .
# enable buildkit for docker DOCKER_BUILDKIT=1 # enable buildkit for docker-compose COMPOSE_DOCKER_CLI_BUILD=1Nota: Parece que no está documentado en este momento, consulte este problema .