aspendigital / docker-octobercms

Dockerized October CMS: PHP, Composer, October core and dependencies
MIT License
150 stars 54 forks source link

Problem writing to the storage directory #34

Open jonathandey opened 4 years ago

jonathandey commented 4 years ago

I'm attempting to get a fresh copy working but I'm getting this error:

Cannot create directory: /var/www/html/storage/cms/cache/91/8c

My docker-compose.yml file looks like this:

version: '2.2'

services:
  composer:
    image: composer:latest
    volumes:
      - ./:/app
    working_dir: /app

  october:
    image: aspendigital/octobercms:latest
    volumes:
      - ./db/database.sqlite:/var/www/html/storage/database.sqlite
      - ./plugins/rainlab/user:/var/www/html/plugins/rainlab/user
      - ./:/var/www/html/plugins/jd/dingoapi
    ports:
      - 9090:80
    environment:
      - APACHE_RUN_USER=www-data
      - CACHE_STORE=database
      - APP_DEBUG=true
      - API_PREFIX=api
      - API_DEBUG=true
      - JWT_TTL=31622400
      - JWT_BLACKLIST_ENABLED=false
      - API_DEFAULT_FORMAT=json

If I remove the CACHE_STORE env variable I get this error:

file_put_contents(/var/www/html/storage/framework/cache/11/de/11de31e1eabb2682cf62ee9c9ccb0630f1019006): failed to open stream: No such file or directory

I have tried with and without mounted volumes. My last resort was to add the APACHE_RUN_USER env variable, but again I get the same issue with or without it.

I'm running Docker for Mac and my version of Docker is 19.03.8, build afacb8b.

These are the permissions of the storage directories:

drwxrwsr-x 1 www-data www-data   4096 May  3 12:51 .
drwxrwxrwx 1 www-data www-data   4096 Feb 20 07:02 ..
-rw-r--r-- 1 www-data www-data      9 Feb 20 07:02 .gitignore
drwxrwsr-x 4 www-data www-data   4096 Feb 20 07:02 app
drwxrwsr-x 5 www-data www-data   4096 Feb 20 07:02 cms
-rwxrwxr-x 1 www-data www-data 806912 May  3 12:51 database.sqlite
drwxrwsr-x 1 www-data www-data   4096 Feb 20 07:02 framework
drwxrwsr-x 1 www-data www-data   4096 May  3 12:51 logs
drwxrwsr-x 3 www-data www-data   4096 Feb 20 07:02 temp

Any help would be much appreciated, thanks!

petehalverson commented 4 years ago

Hi @jonathandey!

Try clearing your cache within the container by running docker-compose exec october artisan cache:clear

After that, can you tell me what triggers the error?

I've stumbled on permission issues within the cache before. It typically occurs when I'm not paying attention to the user running artisan commands or I've upset permissions within a mounted volume.

After reviewing your compose file, I should point out composer is available within the aspendigital/octobercms image. Setting INIT_PLUGINS=true will run composer within the container on plugin folders that have a composer.json file and no vendor folder. See the entry options.

jonathandey commented 4 years ago

Thanks @petehalverson,

I tried clearing the cache but got the same result.

I’ll try removing the extra composer dependency and use INIT_PLUGINS as you suggested.

jonathandey commented 4 years ago

Still no luck, unfortunately.

My docker-compose.yml file now looks like this

version: '2.2'

services:
  october:
    image: aspendigital/octobercms:latest
    volumes:
      - ./plugins/rainlab/user:/var/www/html/plugins/rainlab/user
      # - ./db/database.sqlite:/var/www/html/storage/database.sqlite
      - ./:/var/www/html/plugins/jd/dingoapi
    ports:
      - 9090:80
    environment:
       - INIT_OCTOBER=true
       - INIT_PLUGINS=true
       - APP_DEBUG=true
       - PHP_DISPLAY_ERRORS=true
       - API_PREFIX=api
       - API_DEBUG=true
       - JWT_TTL=31622400
       - JWT_BLACKLIST_ENABLED=false
       - API_DEFAULT_FORMAT=json

I made sure to delete the container before trying again, even going as far as to delete the image aspendigital/octobercms:latest so that it is re-pulled. I have also tried clearing the cache using

docker-compose exec october artisan cache:clear
docker-compose exec october artisan view:clear
docker-compose exec october artisan config:clear

Something to note though. It always appears to be the same cache value that is failed to write: /var/www/html/storage/framework/cache/11/de/11de31e1eabb2682cf62ee9c9ccb0630f1019006

tobias-kuendig commented 4 years ago

I had a scheduled job that was creating a cache directory. Since cron is executed as root, the permissions on the created directory did not allow writes for www-data.

Maybe this could be the issue here as well.

I wonder if it is generally better to register the cron job for the www-data user instead of root.

# Remove from root
RUN crontab -u root -r
# Add to www-data
RUN crontab -u www-data /etc/cron.d/october-cron