tl;dr: возможно, стоит попробовать
docker exec -it web_only bash
chown -R discourse:www-data /shared/backups
И ещё немного слов.
Не глядя, я бы следующим шагом попробовал пересобрать контейнер данных, надеясь, что любые внесённые изменения также затронули (или повлияли на) контейнер данных.
Плохой совет — сделать ...backups/default доступным для записи всем и проверить владельца резервной копии.
Так что, думаю, вам нужно изменить владельца директории default на discourse.www-data в контейнере web (именно он выполняет резервное копирование).
Вот пример недавнего одноконтейнерного решения:
root@forum.mbse-capella.org(app):~$ docker exec -it app bash
root@new-app:/# grep www /etc/passwd
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
root@new-app:/# grep discourse /etc/passwd
discourse:x:1000:1000::/home/discourse:/bin/bash
Раньше процесс сборки выполнял chown для всех файлов, но это могло занимать очень много времени, поэтому, возможно, эту операцию убрали (это скорее предположение, чем результат внимательного изучения коммитов).