代码之家  ›  专栏  ›  技术社区  ›  ltdev

Laravel&Docker:无法打开流或文件“/var/www/html/storage/logs/laravel.log”:无法打开流:权限被拒绝

  •  0
  • ltdev  · 技术社区  · 6 年前

    这是我的文件夹结构:

    +-- 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 并尝试通过 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 回复  |  直到 6 年前
        1
  •  2
  •   Chad    5 年前

    有几种选择,可能有什么问题:

    1. 这个 storage 链接设置不正确,您可以阅读 here ,发射后 app 集装箱,你应该这样做 php artisan storage:link 检查是否有适当的连接
    2. 默认情况下,您对给定文件夹没有适当的权限, logs 文件夹应该有 www-data 可写权限,您可以通过ssh检查到machine和do ls -l 关于中的文件 /var/www/html/[your laravel app] 如果没有,请通过以下方式添加适当的权利: chown -R www-data:wwww-data *
    3. 还与文件权限相关:您可以通过cehcking状态来禁用selinux(但只能在dev server中,不能在live上执行此操作): sestatus 然后强制执行到 0 通过 setenforce 0 (不过,在Live服务器上,最好让SELinux继续运行,并尝试通过以下方式禁用问题: chcon -R -t httpd_sys_rw_content_t [path to storage folder here]
        2
  •  0
  •   Dave2e    6 年前

    从Tooschie的回答来看,
    chcon -R -t httpd_sys_rw_content_t [path to storage folder here]
    为我工作。