Estoy creando una imagen de Docker para mi Symfony la aplicación y yo necesitamos dar permiso al servidor apache para escribir en la caché y las carpetas de registro
Cuando construyo esta imagen con docker build -t myname/symfony_apps:latest . y ejecute el contenedor con docker run -p 8080:80 myname/symfony_apps:latest.El registro de Apache está inundado de errores de permiso denegado , lo extraño que he comprobado con ls -a y los permisos están bien. y cuando ejecuto chmod desde bash del contenedor , los problemas de permisos de Apache desaparecen y la aplicación funciona bien
Situación
Ejecución de comandos chmod desde dockerfile: los permisos se cambian, pero apache aún se queja de permiso denegado.Ejecución de los mismos comandos chmod con bash dentro del contenedor: se cambian los permisos y mi aplicación se está ejecutando
¿Alguna idea , me estoy perdiendo algo, tal vez debería agregar el usuario root en algún lugar del Dockerfile ?
Tuve el mismo problema y parece que hay algún error en docker o overlay2 si el contenido del directorio se crea en una capa y sus permisos se cambian en otra.
Como solución alternativa, puede copiar las fuentes al directorio temporal:
COPY . /src
Y luego muévelo a /var/www/html y permisos de configuración (en uno RUN comando):
Este problema es probablemente el resultado de un VOLUME definición dentro del Dockerfile ascendente. Cuando se define un volumen en Dockerfile, puede agregar archivos con un COPY o ADD comando directamente en la imagen. Sin embargo, a RUN línea:
Cree un contenedor temporal utilizando la definición de imagen a partir del punto actual del dockerfile
Ese contenedor temporal tendrá un volumen anónimo montado como usted o una imagen principal especificada dentro del Dockerfile
El volumen anónimo se inicializará a partir del contenido de la imagen
Su comando se ejecutará dentro del contenedor
Si enumera el directorio durante este RUN comando, verá los cambios aplicados, pero esos cambios se han aplicado al volumen
Cuando se complete el comando ejecutar, docker capturará los cambios en el contenedor
Estos cambios se pueden ver con un docker diff si no elimina los contenedores temporales (puede ejecutar una compilación con --rm=false para que permanezcan)
Estos cambios no incluirán el contenido anónimo del volumen porque no existe dentro del sistema de archivos contenedor temporal, los volúmenes están separados
Debido a este comportamiento, tiene las opciones de:
puede copiar sus archivos a un directorio diferente y cambiar los permisos allí
puede corregir los permisos en su host para que se copien con esos permisos directamente
puede eliminar el volumen de su imagen, hacer que la imagen ascendente elimine su definición de volumen o puede reconstruir su propia copia de la imagen ascendente sin la definición de volumen y basar sus imágenes en eso
Tenga en cuenta que dentro de las imágenes php actuales, parece que el volumen se ha eliminado, lo que significa que efectivamente tenemos la opción 3.
Cuando anulo ese archivo ejecutable a través de volúmenes docker-compose, el execute el permiso es simplemente como un retroceso, técnicamente anulado al permiso de archivo original.
La solución para el modo de desarrollo es simplemente chmod a+x yourfile del host, que se heredará en el montaje del volumen de composición.
Veo un espacio extra en tu último comando (estoy en mi teléfono, así que no puedo estar seguro). Como el problema de permisos parece estar en el directorio de registro, cambie la última línea a: ``
EJECUTAR chmod -R 777 /var/www/html/app/cache /var/www/html/app/logs
No puedo reproducir su problema. Si uso su dockerfile y configuro algunos archivos ficticios localmente,los permisos son correctos y todo Funciona. Puedo arrancar un contenedor y acceder al contenido a través de un navegador web. ¿Puede actualizar su pregunta para incluir mensajes de error específicos? Está seguro de su configuración de Apache ('apache2.conf) no está causando un problema? Los errores desaparecen si no install apache2.conf?