Ich bin gefolgtdieses Tutorialzum Bereitstellen einer Webanwendung mit Django, Gunicorn, Nginx und Postgresql.
Beim Arbeiten mit der leeren Anwendung im Lernprogramm scheint alles in Ordnung zu sein, doch dann habe ich versucht, die gleiche Konfiguration mit meiner Django-App neu zu erstellen und beim Versuch, die statischen Dateien zu erfassen, erhalte ich die Meldung „Zugriff verweigert“.
Die YML-Konfiguration lautet:
version: '3.7'
services:
postgres:
image: postgres:11.2-alpine
volumes:
- database:/var/lib/postgresql/data
env_file: .env.pg
django:
build: .
command: gunicorn mysite.wsgi:application --bind 0.0.0.0:8000
volumes:
- static:/usr/src/django/static
expose:
- 8000
env_file: .env
depends_on:
- postgres
nginx:
build: ./nginx
volumes:
- static:/usr/src/django/static
ports:
- 8009:80
depends_on:
- django
volumes:
database:
static:
Der Fehler, den ich beim Ausführen erhalte, docker-compose exec django python manage.py collectstatic --clear --noinput
ist
Traceback (most recent call last):
File "manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 323, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 364, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python3.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 167, in handle
any(self.storage.listdir(destination_path))
File "/usr/local/lib/python3.7/site-packages/django/core/files/storage.py", line 315, in listdir
for entry in os.scandir(path):
PermissionError: [Errno 13] Permission denied: '/usr/src/django/static'
Ich habe versucht, eine Shell innerhalb des Containers auszuführen: Das Verzeichnis „static“ ist dort, wo es sein soll, aber ich kann nichts hineinschreiben (auch nicht als Root). Das Datenbank-Volume im Postgres-Container scheint einwandfrei zu funktionieren, daher denke ich, dass es ein Problem ist, wenn das Volume zwischen zwei Containern geteilt wird.
Irgendeine Idee?