Nextcloud OCC Command Execution Issue in Docker Environment

Hello Nextcloud Community,

I’m facing a challenging issue with Nextcloud running in Docker, where the OCC command fails for the www-data user due to PHP module access issues, despite working setups for other functionalities like web interface and Windows sync.

Environment Details:

  • Docker Setup: Using Portainer, this is my docker compose :
version: "3"

networks: 
  npm-frontend: 
    external: true
  backend:

services:
  nextcloud-app:
    image: nextcloud:latest
    container_name: nextcloud-app
    restart: always
    volumes:
      - /disk/nextcloud/data/:/var/www/html/data
      - /docker/nextcloud_server/nextcloud/:/var/www/html
      - /docker/nextcloud_server/etc/ImageMagick-6/:/etc/ImageMagick-6/
      - /docker/nextcloud_server/conf.d/:/usr/local/etc/php/conf.d/


    environment:
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_HOST=$MYSQL_HOST
      - PUID=1000
      - PGID=100
      - TZ=Europe/Paris
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_HOST_PASSWORD=${REDIS_HOST_PASSWORD}
      - PHP_INI_OPCACHE_MEMORY_CONSUMPTION=256
    networks:
      - npm-frontend
      - backend

  nextcloud-cron:
    image: nextcloud
    container_name: nextcloud-cron
    restart: always
    volumes:
      - /disk/nextcloud/data/:/var/www/html/data
      - /docker/nextcloud_server/nextcloud/:/var/www/html
    environment:
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_HOST=$MYSQL_HOST
      - PUID=1000
      - PGID=100
      - TZ=Europe/Paris
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_HOST_PASSWORD=${REDIS_HOST_PASSWORD}
    depends_on:
      - nextcloud-app
    entrypoint: /cron.sh
    networks:
      - npm-frontend
      - backend

  nextcloud-db:
    image: mariadb:11.2
    container_name: nextcloud-db
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --wait_timeout=28800 --max_allowed_packet=16M --character-set-server=utf8mb4
    volumes:
      - /docker/nextcloud_server/nextcloud-db/:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
    networks:
      - backend

  collabora:
    image: collabora/code
    container_name: collabora
    hostname: collabora
    cap_add:
      - MKNOD
    environment:
      - domain=${COLLABORA_DOMAIN}
      - username=${COLLABORA_USERNAME}
      - password=${COLLABORA_PASSWORD}
      - DONT_GEN_SSL_CERT="True"
      - server_name=${COLLABORA_SERVER_NAME}
      - extra_params=--o:ssl.enable=false --o:ssl.termination=true
      - aliasgroup1=https://nextcloud.mydomain.fr
    depends_on:
      - nextcloud-app
    ports :
      - 9980:9980
    networks:
      - npm-frontend
      - backend
    restart: always

  redis:
    image: redis
    container_name: redis
    hostname: redis
    environment:
      - PUID=1000
      - PGID=100
      - TZ=Europe/Paris
    command: ["redis-server", "--requirepass", "${REDIS_HOST_PASSWORD}", "--maxmemory", "256mb", "--maxmemory-policy", "allkeys-lru"]
    restart: always
    networks:
      - backend


  adminer:
    image: adminer
    container_name: adminer
    hostname: adminer
    networks:
      - npm-frontend
      - backend
    restart: unless-stopped

  • Nextcloud Version: Latest, 28.0.4.
  • PHP Version: 8.2.17.
  • Issue Faced: Execution of occ commands as www-data fails with database connection errors, indicating potential PHP module access issues :
docker exec -u www-data nextcloud-app php occ integrity:check-core
An unhandled exception has been thrown:
Doctrine\DBAL\Exception: Failed to connect to the database: An exception occurred in the driver: could not find driver in /var/www/html/lib/private/DB/Connection.php:139
Stack trace:
#0 /var/www/html/3rdparty/doctrine/dbal/src/Connection.php(1654): OC\DB\Connection->connect()
#1 /var/www/html/3rdparty/doctrine/dbal/src/Connection.php(1081): Doctrine\DBAL\Connection->getWrappedConnection()
#2 /var/www/html/lib/private/DB/Connection.php(261): Doctrine\DBAL\Connection->executeQuery('SELECT * FROM `...', Array, Array, NULL)
#3 /var/www/html/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php(337): OC\DB\Connection->executeQuery('SELECT * FROM `...', Array, Array, NULL)
#4 /var/www/html/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php(377): Doctrine\DBAL\Query\QueryBuilder->executeQuery()
#5 /var/www/html/lib/private/DB/QueryBuilder/QueryBuilder.php(280): Doctrine\DBAL\Query\QueryBuilder->execute()
#6 /var/www/html/lib/private/AppConfig.php(421): OC\DB\QueryBuilder\QueryBuilder->execute()
#7 /var/www/html/lib/private/AppConfig.php(187): OC\AppConfig->loadConfigValues()
#8 /var/www/html/lib/private/AppConfig.php(377): OC\AppConfig->getApps()
#9 /var/www/html/lib/private/App/AppManager.php(128): OC\AppConfig->getValues(false, 'enabled')
#10 /var/www/html/lib/private/App/AppManager.php(149): OC\App\AppManager->getInstalledAppsValues()
#11 /var/www/html/lib/private/legacy/OC_App.php(231): OC\App\AppManager->getInstalledApps()
#12 /var/www/html/lib/private/AppFramework/Bootstrap/Coordinator.php(90): OC_App::getEnabledApps()
#13 /var/www/html/lib/base.php(700): OC\AppFramework\Bootstrap\Coordinator->runInitialRegistration()
#14 /var/www/html/lib/base.php(1200): OC::init()
#15 /var/www/html/console.php(48): require_once('/var/www/html/l...')
#16 /var/www/html/occ(11): require_once('/var/www/html/c...')

Key Observations and Troubleshooting Attempts:

  1. Different PHP module access for root and www-data, with www-data lacking necessary permissions in /usr/local/etc/php/conf.d :
docker exec -u www-data nextcloud-app php -m
[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
hash
iconv
json
libxml
mbstring
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
random
readline
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib

[Zend Modules]
docker exec nextcloud-app php -m
[PHP Modules]
apcu
bcmath
Core
ctype
curl
date
dom
exif
fileinfo
filter
gd
gmp
hash
iconv
imagick
intl
json
ldap
libxml
mbstring
memcached
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_pgsql
pdo_sqlite
Phar
posix
random
readline
redis
Reflection
session
SimpleXML
sodium
SPL
sqlite3
standard
sysvsem
tokenizer
xml
xmlreader
xmlwriter
Zend OPcache
zip
zlib

[Zend Modules]
Zend OPcache
  1. Permissions adjustments attempted without success with docker exec nextcloud-app chmod -R a+r /usr/local/etc/php/conf.d/ ; www-data cannot access all PHP modules :
docker exec -u www-data nextcloud-app php --ini
Configuration File (php.ini) Path: /usr/local/etc/php
Loaded Configuration File:         (none)
Scan for additional .ini files in: /usr/local/etc/php/conf.d
Additional .ini files parsed:      (none)
docker exec nextcloud-app php --ini
Configuration File (php.ini) Path: /usr/local/etc/php
Loaded Configuration File:         (none)
Scan for additional .ini files in: /usr/local/etc/php/conf.d
Additional .ini files parsed:      /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini,
/usr/local/etc/php/conf.d/docker-php-ext-bcmath.ini,
/usr/local/etc/php/conf.d/docker-php-ext-exif.ini,
/usr/local/etc/php/conf.d/docker-php-ext-gd.ini,
/usr/local/etc/php/conf.d/docker-php-ext-gmp.ini,
/usr/local/etc/php/conf.d/docker-php-ext-imagick.ini,
/usr/local/etc/php/conf.d/docker-php-ext-intl.ini,
/usr/local/etc/php/conf.d/docker-php-ext-ldap.ini,
/usr/local/etc/php/conf.d/docker-php-ext-memcached.ini,
/usr/local/etc/php/conf.d/docker-php-ext-opcache.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pcntl.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_pgsql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-redis.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sodium.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sysvsem.ini,
/usr/local/etc/php/conf.d/docker-php-ext-zip.ini,
/usr/local/etc/php/conf.d/nextcloud.ini,
/usr/local/etc/php/conf.d/opcache-recommended.ini,
/usr/local/etc/php/conf.d/redis-session.ini,
/usr/local/etc/php/conf.d/session-settings.ini
docker exec -u www-data nextcloud-app ls -la /usr/local/etc/php/conf.d/
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-gmp.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-imagick.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/..': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-bcmath.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-memcached.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/nextcloud.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-pdo_pgsql.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-exif.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/opcache-recommended.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-sodium.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-gd.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-ldap.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-intl.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-pcntl.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-sysvsem.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/session-settings.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/.': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-apcu.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-opcache.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-zip.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/redis-session.ini': Permission denied
ls: cannot access '/usr/local/etc/php/conf.d/docker-php-ext-redis.ini': Permission denied
total 0
d????????? ? ? ? ?            ? .
d????????? ? ? ? ?            ? ..
-????????? ? ? ? ?            ? docker-php-ext-apcu.ini
-????????? ? ? ? ?            ? docker-php-ext-bcmath.ini
-????????? ? ? ? ?            ? docker-php-ext-exif.ini
-????????? ? ? ? ?            ? docker-php-ext-gd.ini
-????????? ? ? ? ?            ? docker-php-ext-gmp.ini
-????????? ? ? ? ?            ? docker-php-ext-imagick.ini
-????????? ? ? ? ?            ? docker-php-ext-intl.ini
-????????? ? ? ? ?            ? docker-php-ext-ldap.ini
-????????? ? ? ? ?            ? docker-php-ext-memcached.ini
-????????? ? ? ? ?            ? docker-php-ext-opcache.ini
-????????? ? ? ? ?            ? docker-php-ext-pcntl.ini
-????????? ? ? ? ?            ? docker-php-ext-pdo_mysql.ini
-????????? ? ? ? ?            ? docker-php-ext-pdo_pgsql.ini
-????????? ? ? ? ?            ? docker-php-ext-redis.ini
-????????? ? ? ? ?            ? docker-php-ext-sodium.ini
-????????? ? ? ? ?            ? docker-php-ext-sysvsem.ini
-????????? ? ? ? ?            ? docker-php-ext-zip.ini
-????????? ? ? ? ?            ? nextcloud.ini
-????????? ? ? ? ?            ? opcache-recommended.ini
-????????? ? ? ? ?            ? redis-session.ini
-????????? ? ? ? ?            ? session-settings.ini
  1. Other functional aspects of Nextcloud (web interface, sync) are unaffected, suggesting a specific issue with occ command execution and PHP module access within the Docker environment.

I’ve attempted downgrading MariaDB to 11.2 instead of latest 11.3 without resolving the issue. The situation seems complex, intertwining Docker permissions, PHP module access, and Nextcloud’s occ command functionality.

I’m seeking any insights, experiences, or guidance that could help unravel this issue, ensuring www-data has full access to required PHP modules and can successfully execute occ commands within this Dockerized Nextcloud environment.

Thank you for any assistance or pointers you can provide!

for me it works with ´image: mariadb:10.5´ can you confirm this is related to mariadb:11 ?

further I don’t see any issues with `ls -la /usr/local/etc/php/conf.d/´

do you run some kind of “limited” docker? rootless podman etc?

UPDATE: I see

      - PUID=1000
      - PGID=100

with this setup you should check user 1000:100 has access to the files… in my test environment created as in Nextcloud docker-compose setup with notify_push (2024) the command works as well…

the difference I spot is:

    user: ${UID}:${GID}

maybe it helps :wink:

Thank you so much for your input! Your suggestion to verify access for user 1000:100 was insightful. However, I encountered a separate issue where my Nextcloud became inaccessible due to a problematic MariaDB downgrade, leading to a soft lock on my database. Ultimately, I decided to reinstall Nextcloud following the official guidelines recommended in the Nextcloud documentation. This approach allowed me to restore my database successfully and get everything running smoothly from a clean state, avoiding the PHP module access issue. Your assistance was invaluable in this troubleshooting journey!

1 Like