Изменение прав доступа к папке в Dockerfile с помощью RUN chmod не действует на тома (volumes), примонтированные при помощи инструкции volumes в docker-compose.yml. Это связано с тем, что тома подключаются после выполнения всех команд указанных в Dockerfile, и их содержимое не изменяется в процессе построения образа, что означает, что фактические данные тома и права доступа управляются внешним хостом.
Таким образом, для того чтобы установить нужные права, это должно быть сделано снаружи контейнера, на уровне вашей системы файлов хоста, и эти изменения будут отражены внутри контейнера за счет того, что папка примонтирована. Вы можете также установить права доступа непосредственно на хосте перед тем, как запустить контейнер, используя команды chown и chmod на машине хоста.
Если же настройка прав доступа должна выполняться внутри контейнера (например, при инициализации или запуске), вы можете использовать команду entrypoint или command в docker-compose.yml для запуска скрипта, который будет устанавливать нужные права доступа при запуске контейнера каждый раз. Пример такого скрипта:
# Dockerfile
...
# Установка прав доступа в скрипте инициализации
COPY ./set-permissions.sh /usr/local/bin/set-permissions.sh
RUN chmod +x /usr/local/bin/set-permissions.sh
# Запуск скрипта при старте контейнера
ENTRYPOINT ["set-permissions.sh"]
CMD ["apache2-foreground"]
bash:
# set-permissions.sh
#!/bin/bash
chmod o+w /app/web/uploads
chmod o+w /app/web/uploads/result
exec "$@"
Этот скрипт изменит права на каталоги при каждом запуске контейнера, не зависимо от прав на машине хоста.