Не могу открыть статические файлы, Докеризация. Permission denied, cannot open static files, Docker, Django

Я новичок с докером , я хочу докеризовать свое django приложение для продакшн. Моя ОС: Ubuntu 20.04.1 LTS, версия Docker 20.10.5, сборка 55c4c88, мой файл docker-compose.yml, как показано ниже:

version: '3.1'

services: 
    nginx-proxy:
        image: jwilder/nginx-proxy
        restart: "always"
        ports:
            - "80:80"
        volumes:
            - /var/run/docker.sock:/tmp/docker.sock:ro
            - ./nginx/vhost/:/etc/nginx/vhost.d:ro
            - ./nginx/conf.d/client_max_body_size.conf:/etc/nginx/conf.d/client_max_body_size.conf:ro
            - ./static/:/amd/static
            - ./media/:/amd/media
    postgres:
        image: postgres:9.6.6
        restart: always
        volumes:
            - ./pgdb/:/var/lib/postgresql/
        ports:
            - "5432:5432"
        env_file: ./.env

    redis:
        image: redis
        ports:
            - 6379:6379
        restart: always


    web:
        container_name: amd
        build: .
        restart: "always"
        ports:
            - "8000:8000"
        volumes:
            - .:/code/ 
            # - ./static/:/code/static
            # - ./media/:/code/media
        depends_on:
            - "postgres"
        env_file: .env

    celery:
        build:
            context: .
            dockerfile: celery.dockerfile
        volumes:
            - .:/code
        command: celery -A amdtelecom worker -l info   
        links:
            - redis
            - postgres
        depends_on:
            - "redis"
            - "postgres"
        env_file: ./.env

networks:
    default:
        external:
            name: nginx-proxy

Мой Dockerfile, как показано ниже:

FROM python:3.7

ENV PYTHONUNBUFFERED 1
ENV DEBUG False

COPY requirements.txt /code/requirements.txt
WORKDIR /code
RUN pip install -r requirements.txt
ADD . .

CMD [ "gunicorn", "--bind", "0.0.0.0", "-p", "8000",  "amdtelecom.wsgi" ]

Мой settings.py файл:

CORS_ALLOWED_ORIGINS = [
    "http://localhost:8000",
    "http://127.0.0.1:8000",
    "http://localhost"
]
STATIC_URL = '/static/'

if PROD:
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
else:
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    STATICFILES_DIRS = [
        BASE_DIR / "static",
    ]
    
    
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
MEDIA_URL = "/media/"

SITE_URL = 'http://localhost:80'

Я использую в своем терминале следующие шаги:

  1. docker-compose up -d --build
  2. docker ps -a
  3. docker exec -it 'my gunicorn id' bash
  4. ./manage.py migrate
  5. ./manage.py collectstatic
  6. ./manage.py loaddata data.json

и хочу открыть проект в браузере Chrome по URL-адресу localhost, и проект откроется без статических файлов (без js, без css) так открижяет. И в логах докера выходит следуещие ошибки:

> (docker-compose logs -f):
2021/03/25 10:51:32 [error] 51#51: *18 open() "/amd/static/images/fashion/product/13.jpg" failed (13: Permission denied), client: 172.23.0.1, server: localhost, request: 
"GET /static/images/fashion/product/13.jpg HTTP/1.1", host: "localhost", referrer: "http://localhost/"

логи докера

и одно важное замечание о моем коде - это приложение нормально работает в Mac OS, статические файлы открываются нормально. Думаю, моя проблема связана с моей ОС Linux, может и ошибаюсь. Как я могу решить эту проблему?

Заранее спасибо. Для получения дополнительной информации о моем коде github repo


Ответы (0 шт):