Laravel & Docker: не удалось открыть поток или файл "/var/www/html/storage/logs/laravel.log": не удалось открыть поток: отказано в разрешении - PullRequest
0 голосов
/ 27 мая 2018

Это моя структура папок:

+-- root-app-dir
|   +-- docker
|   |   +-- Dockerfile
|   |   +-- nginx.conf
|   +-- src // this is where the Laravel app lives
|   +-- docker-compose.yml

Это мой docker-compose.yml

version: '2'

services:
  app:
    build:
      context: ./docker
      dockerfile: Dockerfile
    image: lykos/laravel
    volumes:
      - ./src/:/var/www/html/
    networks:
      - app-network

  nginx:
    image: nginx:latest
    volumes:
      - ./src/:/var/www/html/
      - ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
    ports:
      - 8000:80
    networks:
      - app-network

  mysql:
    image: mysql:5.7
    ports: 
      - "4306:3306"
    environment:
      MYSQL_DATABASE: homestead
      MYSQL_USER: homestead
      MYSQL_PASSWORD: secret
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - mysqldata:/var/lib/mysql
    networks:
      - app-network

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
      - 8080:80
    links:
      - mysql
    environment:
      PMA_HOST: mysql

volumes:
  mysqldata:
    driver: "local"

networks:
  app-network:
    driver: "bridge"

Это мой nginx.conf

server {
  root /var/www/html/public;

  index index.html index.htm index.php;

  server_name _;
  charset utf-8;

  location = /favicon.ico { log_not_found off; access_log off; }
  location = /robots.txt { log_not_found off; access_log off; }

  location / {
    try_files $uri $uri/ /index.php$is_args$args;
  }

  location ~ \.php$ {
    # include snippets/fastcgi-php.conf;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_pass app:9000;
    fastcgi_index index.php;
  }

  error_page 404 /index.php;

  location ~ /\.ht {
    deny all;
  }
}

Когда язапустите docker-compose up -d и попробуйте получить доступ к приложению Laravel через htts://localhost:8000 Я получаю эту ошибку на своем экране

UnexpectedValueException
The stream or file "/var/www/html/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied

Я запустил sudo chown lykos:lykos -R ./src с моего root-app-dir, но проблема все еще существует.Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

из ответа Тоши,
chcon -R -t httpd_sys_rw_content_t [path to storage folder here]
сработало для меня.

0 голосов
/ 27 мая 2018

Есть несколько вариантов, что может быть неправильным:

  1. ссылка storage установлена ​​неправильно, вы можете прочитать об этом здесь , после запуска app Контейнер, вы должны сделать php artisan storage:link, чтобы проверить, есть ли правильная ссылка
  2. У вас нет правильного права на данную папку, по умолчанию папка logs должна иметь www-data права на запись,вы можете проверить это с помощью ssh на машине и do ls -l для файлов в /var/www/html/[your laravel app], если нет, добавьте нужные права с помощью: chown -R www-data:wwww-data *
  3. , также связанной с правами доступа к файлам: вы можете отключить SELinux (но только на сервере dev, никогда не делайте это вживую), проверяя статус: sestatus и затем принудительно переводя его в 0 на setenforce 0 (однако на живом сервере лучше оставить SElinux запущенным и попытаться отключить проблемуchcon -R -t httpd_sys_rw_content_t [path to storage folder here]
...