После переноса docker-контейнера на Linux Failed to load resource: the server responded with a status of 403 (Forbidden) image.jpg

После переноса docker контейнера на linux не подгружаются картинки, в браузере получаю:

"GET /storage/image/WBRNZ0c6tnOfED2APNuYRcSjqIfzvJWXYnBlNRkB.jpg HTTP/1.1" 403

Файл docker-compose.yml выглядит так

services:
  nginx:
    image: nginx:latest
    volumes:
      - ./:/var/www/
      - ./_docker/nginx/conf.d/:/etc/nginx/conf.d/
    ports:
      - "8876:80"
    depends_on:
      - app
    container_name: project_nginx
  app:
    build:
        context: .
        dockerfile: _docker/app/Dockerfile
    volumes:
      - ./:/var/www/
    depends_on:
        - db
    container_name: project_app

  db:
      image: mysql:8.0
      restart: always
      volumes:
          - ./tmp/db:/var/lib/mysql
      environment:
          MYSQL_DATABASE: blogdb
          MYSQL_ROOT_PASSWORD: root
      ports:
          - "8101:3306"
      command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
      container_name: project_db
  phpmyadmin:
      image: phpmyadmin/phpmyadmin
      container_name: phpmyadmin
      environment:
          PMA_HOST: db
          PMA_USER: root
          PMA_PASSWORD: root
      ports:
          - "8080:80"
      depends_on:
          - db

файл nginx.conf выглядит так

server {
    listen 80;
    index index.php index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/public;
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    location / {
        try_files $uri $uri/ /index.php?$query_string;
        gzip_static on;
    }
}

Первым делом подумал, что проблема с правами, нашел на форуме информацию, что nginx не имеет прав к какой-то папке(в моем случае папке Ubuntu-18.04\home\danil\projects\blog\storage) и исправить это можно командой

chmod 777 -R storage

введите сюда описание изображения однако в таком случае получаю chmod: changing permissions of 'storage': Operation not permitted, далее нашел, что если выполнить через sudo, то смогу дать права от имени суперпользователя Команда проходит, однако картинки так и не подгружаются Копался дальше, для просмотра прав папок выполнил команду ls -l

drwxrwxrwx 5 www-data www-data 4096 Nov 5 22:58 storage

папка к storage вроде как имеет права www-data (как я понял обычно такое имя у сервера) Фрагмент который не подгружается выглядит так:

<div class="blog-post-thumbnail-wrapper">
<img src="storage/image/BWtshUfyslSSVQXa0xhqSaDopULa423pOeTRA0Jm.jpg" alt="blog post">
</div>

если попробовать напрямую обратиться к http://localhost:8876/storage/image/8CvZHzr5BJnZseIkh8Ne7sTMyVFHcGBUoXeAmNXS.jpg также получаю ошибку

Заранее спасибо, прошу не ругаться, я только учусь)


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

Автор решения: abu

Если docker-compose.yaml используется только локально, добавьте в секцию для нужного контейнера user: "1000:1000". 1000 обычно UID пользователя от которого происходит вход по умолчанию. В некоторых случаях он может быть другой

Либо, можно заходить в контейнер из-под юзера, который является владельцем файлов в контейнере docker compose exec -u www-data <container> <shell>

Первый способ предпочтительнее, поскольку не портит владельца файлов на хостовой машине

→ Ссылка