После переноса 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 шт):
Если docker-compose.yaml используется только локально, добавьте в секцию для нужного контейнера user: "1000:1000"
. 1000 обычно UID пользователя от которого происходит вход по умолчанию. В некоторых случаях он может быть другой
Либо, можно заходить в контейнер из-под юзера, который является владельцем файлов в контейнере docker compose exec -u www-data <container> <shell>
Первый способ предпочтительнее, поскольку не портит владельца файлов на хостовой машине