Problems with How to docker-compose with notify_push (2024)

The Basics

  • Nextcloud Server version:
    • 31.0.5
    • container image latest
  • Operating system and version (uname -a):
    • Linux server 6.1.0-35-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.137-1 (2025-05-07) x86_64 GNU/Linux
  • Web server and version:
    • Apache 2 (what is used in docker image latest)
  • Reverse proxy and version:
    • Traefik 3.4
  • PHP version:
    • 8.3.21 (what is used in docker image latest)
  • Is this the first time you’ve seen this error? (Yes / No):
    • Some errors already appeared on the previous server installation with arch linux
  • When did this problem seem to first start?
    • directly after installation
  • Installation method:
    • Docker compose in portainer
  • Are you using CloudfIare, mod_security, or similar?
    • desec DynDNS

Summary of the issue you are facing:

I tried installing nextcloud in docker compose with portainer based on this guide

unfortuantely I got several issues and will cluster them a bit. I did not analyse them yet but if you already know the answer :wink:

  • shown in system / docker
    • AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.29.0.4. Set the 'ServerName' directive globally to suppress this message → seems to be no problem
    • Notify_push got insufficient permission even the file is chmodded to 777,
    • login redirect does not work (stuck on loading) → worked after stack restart
    • Content-Security-Policy: Die Einstellungen der Seite haben das Laden einer Ressource (img-src) auf http://sub.myzone.dedyn.io/index.php/apps/calendar/public/getCalendarDotSvg/%23B8BE68.svg blockiert, da sie gegen folgende Direktive verstößt: “img-src ‘self’ data: blob: https://*.tile.openstreetmap.org” 3 NcAvatar-C7__uk4K.mjs:575:6 → somehow it was gone
    • cron container can’t access the database
    • notify push container does not know the file / folder (I guess because of the following error).
    • apps are not stored on my specified host system path
      - the nextcloud container becomes unhealthy after a short time. Doing the health check command on the server (via SSH), I see the message “Moved permanently”. running th ecurl within the container, I do not get a response (too impatient to wait more than 3 minutes for an answer). Maybe it is a coincidence, but the redis contaienr got problems befor ethis error occures (see log section please :slight_smile: ) → when restarting the container nextcloud works again
  • shown in nextcloud
    • background job not running (guess because cron error mentioned before)
      -The reverse proxy header configuration is incorrect. This is a security issue and can allow an attacker to spoof their IP address as visible to the Nextcloud → removed overwrite environment variables
      -Accessing site insecurely via HTTP. You are strongly advised to set up your server to require HTTPS instead. Without it some important web functionality like “copy to clipboard” or “service workers” will not work!
    • Some headers are not set correctly on your instance - The Strict-Transport-Security HTTP header is not set (should be at least 15552000 seconds). For enhanced security, it is recommended to enable HSTS. → in traefik I enabled the STS headers (updated the env file)
    • The database is used for transactional file locking. To enhance performance, please configure memcache, if available → did not do something knowingly
    • RedisException ->Connection refused → Could not boot notify_push: Connection refused (I guess this will also be fixed when notfiy push container is running)
    • PHP → Array to string conversion at /var/www/html/lib/private/AllConfig.php#141

Steps to replicate it (hint: details matter!):

I don’t know, because I assume, that this does not happen to anyone else.

Log entries

Nextcloud

Please provide the log entries from your Nextcloud log that are generated during the time of problem (via the Copy raw option from Administration settings->Logging screen or from your nextcloud.log located in your data directory). Feel free to use a pastebin/gist service if necessary.

Already mentioned it in errors.

 - RedisException -> Connection refused -> Could not boot notify_push: Connection refused (I guess this will also be fixed when notfiy push container is running)
 - PHP -> Array to string conversion at /var/www/html/lib/private/AllConfig.php#141

Web Browser

If the problem is related to the Web interface, open your browser inspector Console and Network tabs while refreshing (reloading) and reproducing the problem. Provide any relevant output/errors here that appear.

no errors here

Web server / Reverse Proxy

The output of your Apache/nginx/system log in /var/log/____:

85.88.20.82 - - [21/May/2025:10:58:08 +0000] "GET /ocs/v2.php/apps/user_status/api/v1/user_status HTTP/2.0" 200 151 "-" "-" 369 "nextcloud@docker" "http://172.19.0.6:80" 104ms
85.88.20.82 - - [21/May/2025:10:58:08 +0000] "PUT /ocs/v2.php/apps/user_status/api/v1/heartbeat?format=json HTTP/2.0" 200 151 "-" "-" 370 "nextcloud@docker" "http://172.19.0.6:80" 81ms
85.88.20.82 - - [21/May/2025:10:58:09 +0000] "GET /ocs/v2.php/apps/notifications/api/v2/notifications HTTP/2.0" 200 81 "-" "-" 371 "nextcloud@docker" "http://172.19.0.6:80" 67ms
85.88.20.82 - - [21/May/2025:10:58:18 +0000] "GET /index.php/apps/logreader/api/poll?lastReqId=DJXnXufB5jARWBMmvw89 HTTP/2.0" 200 4177 "-" "-" 372 "nextcloud@docker" "http://172.19.0.6:80" 66ms
85.88.20.82 - - [21/May/2025:10:58:28 +0000] "GET /index.php/apps/logreader/api/poll?lastReqId=xSC3sX61EdwWkI2KCMbR HTTP/2.0" 200 1382 "-" "-" 373 "nextcloud@docker" "http://172.19.0.6:80" 69ms
85.88.20.82 - - [21/May/2025:10:58:39 +0000] "GET /index.php/apps/logreader/api/poll?lastReqId=G7QnVfFU1dRy3j5S5ZeP HTTP/2.0" 200 1512 "-" "-" 374 "nextcloud@docker" "http://172.19.0.6:80" 114ms
85.88.20.82 - - [21/May/2025:10:58:39 +0000] "GET /ocs/v2.php/apps/notifications/api/v2/notifications HTTP/2.0" 304 0 "-" "-" 375 "nextcloud@docker" "http://172.19.0.6:80" 117ms
85.88.20.82 - - [21/May/2025:10:58:49 +0000] "GET /index.php/apps/logreader/api/poll?lastReqId=GIGW1e751UhvFNquUQvj HTTP/2.0" 200 1892 "-" "-" 376 "nextcloud@docker" "http://172.19.0.6:80" 76ms
85.88.20.82 - - [21/May/2025:10:58:59 +0000] "GET /index.php/apps/logreader/api/poll?lastReqId=l30PsgmpNTG6LnklCgs3 HTTP/2.0" 200 1382 "-" "-" 377 "nextcloud@docker" "http://172.19.0.6:80" 64ms
85.88.20.82 - - [21/May/2025:10:59:09 +0000] "GET /ocs/v2.php/apps/notifications/api/v2/notifications HTTP/2.0" 304 0 "-" "-" 378 "nextcloud@docker" "http://172.19.0.6:80" 63ms
85.88.20.82 - - [21/May/2025:10:59:10 +0000] "GET /index.php/apps/logreader/api/poll?lastReqId=RhrYqfwWuv4DiTeJGyTt HTTP/2.0" 200 1536 "-" "-" 379 "nextcloud@docker" "http://172.19.0.6:80" 59ms
85.88.20.82 - - [21/May/2025:10:59:20 +0000] "GET /index.php/apps/logreader/api/poll?lastReqId=1jpMXdqwjWcEOO3TikMF HTTP/2.0" 200 1382 "-" "-" 380 "nextcloud@docker" "http://172.19.0.6:80" 57ms
85.88.20.82 - - [21/May/2025:10:59:30 +0000] "GET /index.php/apps/logreader/api/poll?lastReqId=OZGUN1lkHF6TQD651Dan HTTP/2.0" 200 1379 "-" "-" 383 "nextcloud@docker" "http://172.19.0.6:80" 63ms
85.88.20.82 - - [21/May/2025:10:59:35 +0000] "GET /core/css/server.css.map HTTP/2.0" 200 5311 "-" "-" 384 "nextcloud@docker" "http://172.19.0.6:80" 5ms
85.88.20.82 - - [21/May/2025:10:59:36 +0000] "GET /index.php/settings/admin/logging HTTP/2.0" 200 9438 "-" "-" 385 "nextcloud@docker" "http://172.19.0.6:80" 452ms
85.88.20.82 - - [21/May/2025:10:59:40 +0000] "GET /index.php/settings/admin/logging HTTP/2.0" 200 9447 "-" "-" 386 "nextcloud@docker" "http://172.19.0.6:80" 416ms
85.88.20.82 - - [21/May/2025:10:59:42 +0000] "GET /index.php/apps/logreader/api/log?offset=0&query= HTTP/2.0" 200 12855 "-" "-" 387 "nextcloud@docker" "http://172.19.0.6:80" 70ms
85.88.20.82 - - [21/May/2025:10:59:42 +0000] "GET /ocs/v2.php/apps/user_status/api/v1/user_status HTTP/2.0" 200 151 "-" "-" 388 "nextcloud@docker" "http://172.19.0.6:80" 69ms
85.88.20.82 - - [21/May/2025:10:59:42 +0000] "PUT /ocs/v2.php/apps/user_status/api/v1/heartbeat?format=json HTTP/2.0" 200 151 "-" "-" 389 "nextcloud@docker" "http://172.19.0.6:80" 70ms
85.88.20.82 - - [21/May/2025:10:59:43 +0000] "GET /ocs/v2.php/apps/notifications/api/v2/notifications HTTP/2.0" 200 81 "-" "-" 390 "nextcloud@docker" "http://172.19.0.6:80" 65ms
85.88.20.82 - - [21/May/2025:10:59:52 +0000] "GET /index.php/apps/logreader/api/poll?lastReqId=CWGxX2VFHc39nF5ZgnrU HTTP/2.0" 200 4182 "-" "-" 391 "nextcloud@docker" "http://172.19.0.6:80" 72ms
85.88.20.82 - - [21/May/2025:10:59:55 +0000] "GET /index.php HTTP/2.0" 302 0 "-" "-" 392 "nextcloud@docker" "http://172.19.0.6:80" 73ms
85.88.20.82 - - [21/May/2025:10:59:55 +0000] "GET /index.php/apps/dashboard/ HTTP/2.0" 200 9245 "-" "-" 393 "nextcloud@docker" "http://172.19.0.6:80" 398ms
85.88.20.82 - - [21/May/2025:10:59:57 +0000] "PROPFIND /remote.php/dav/files/Matthias/ HTTP/2.0" 207 531 "-" "-" 395 "nextcloud@docker" "http://172.19.0.6:80" 81ms
85.88.20.82 - - [21/May/2025:10:59:57 +0000] "GET /ocs/v2.php/apps/dashboard/api/v1/widgets HTTP/2.0" 200 783 "-" "-" 394 "nextcloud@docker" "http://172.19.0.6:80" 340ms
85.88.20.82 - - [21/May/2025:10:59:57 +0000] "GET /ocs/v2.php/apps/recommendations/api/v1/recommendations/always HTTP/2.0" 200 213 "-" "-" 396 "nextcloud@docker" "http://172.19.0.6:80" 127ms
85.88.20.82 - - [21/May/2025:10:59:58 +0000] "GET /ocs/v2.php/apps/user_status/api/v1/user_status HTTP/2.0" 200 151 "-" "-" 397 "nextcloud@docker" "http://172.19.0.6:80" 78ms
85.88.20.82 - - [21/May/2025:10:59:58 +0000] "PUT /ocs/v2.php/apps/user_status/api/v1/heartbeat?format=json HTTP/2.0" 200 151 "-" "-" 398 "nextcloud@docker" "http://172.19.0.6:80" 72ms
85.88.20.82 - - [21/May/2025:10:59:58 +0000] "GET /ocs/v2.php/apps/notifications/api/v2/notifications HTTP/2.0" 200 81 "-" "-" 401 "nextcloud@docker" "http://172.19.0.6:80" 54ms
85.88.20.82 - - [21/May/2025:10:59:58 +0000] "GET /ocs/v2.php/apps/dashboard/api/v2/widget-items?widgets%5B%5D=calendar HTTP/2.0" 200 139 "-" "-" 399 "nextcloud@docker" "http://172.19.0.6:80" 325ms
85.88.20.82 - - [21/May/2025:10:59:58 +0000] "GET /ocs/v2.php/apps/dashboard/api/v2/widget-items?widgets%5B%5D=mail HTTP/2.0" 200 135 "-" "-" 400 "nextcloud@docker" "http://172.19.0.6:80" 328ms
85.88.20.82 - - [21/May/2025:10:59:58 +0000] "GET /dist/core-common.js.map?v=00a3f61ea67970bbdb88 HTTP/2.0" 200 3102507 "-" "-" 402 "nextcloud@docker" "http://172.19.0.6:80" 991ms
85.88.20.82 - - [21/May/2025:11:00:29 +0000] "GET /ocs/v2.php/apps/notifications/api/v2/notifications HTTP/2.0" 304 0 "-" "-" 403 "nextcloud@docker" "http://172.19.0.6:80" 332ms
85.88.20.82 - - [21/May/2025:11:01:00 +0000] "GET /ocs/v2.php/apps/notifications/api/v2/notifications HTTP/2.0" 304 0 "-" "-" 404 "nextcloud@docker" "http://172.19.0.6:80" 65ms

redis container

1:M 21 May 2025 21:31:49.070 * 100 changes in 300 seconds. Saving…
1:M 21 May 2025 21:31:49.071 * Background saving started by pid 242
242:C 21 May 2025 21:31:49.072 # Failed opening the temp RDB file temp-242.rdb (in server root dir /data) for saving: Permission denied
1:M 21 May 2025 21:31:49.174 # Background saving error

Cron Container

crond: USER cron pid 36 cmd php -f /var/www/html/cron.php
Doctrine\DBAL\Exception: Failed to connect to the database: An exception occurred in the driver: SQLSTATE[08006] [7] could not translate host name “postgres” to address: Name or service not known in /var/www/html/lib/private/DB/Connection.php:237

notify push


Failed to deploy a stack: compose up operation failed: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec /var/www/html/custom_apps/notify_push/bin/x86_64/notify_push: permission denied: unknown

Configuration

Compose yaml

networks:
  nextcloud-network:
    external: false
  proxy:
    external: true

volumes:
  nextcloud-data:
  redis-data:
  nextcloud-postgres:

services:
  postgres:
    image: ${NEXTCLOUD_POSTGRES_IMAGE_TAG}
    volumes:
      - ${HOME_PATH}/postgres:/var/lib/postgresql/data
      - /etc/passwd:/etc/passwd:ro
    environment:
      POSTGRES_DB: ${NEXTCLOUD_DB_NAME}
      POSTGRES_USER: ${NEXTCLOUD_DB_USER}
      POSTGRES_PASSWORD: ${NEXTCLOUD_DB_PASSWORD}
    container_name: nextcloud_postgres
    user: ${UID}:${GID}
    networks:
      - nextcloud-network
    healthcheck:
      test: [ "CMD", "pg_isready", "-q", "-d", "${NEXTCLOUD_DB_NAME}", "-U", "${NEXTCLOUD_DB_USER}" ]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 60s
    restart: unless-stopped

  redis:
    image: redis:alpine
    command: ["redis-server", "--requirepass", "${NEXTCLOUD_REDIS_PASSWORD}"]
    volumes:
      - redis-data:/data
    networks:
      - nextcloud-network
    user: ${UID}:${GID}
    container_name: nextrcloud_redis
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 60s
    restart: unless-stopped

  nextcloud:
    image: ${NEXTCLOUD_IMAGE_TAG}
    user: ${UID}:${GID}
    volumes:
      - ${DATA_PATH}/nextcloud:/var/www/html
      - ${DATA_PATH}/data:/var/www/html/data
      - ${DATA_PATH}/apps:/var/www/html/custom_apps
      - ${DATA_PATH}/config:/var/www/html/config
      - ${HOME_PATH}/redis-session.ini:/usr/local/etc/php/conf.d/redis-session.ini
      - /home/j0chn/portainer/configs/remoteip.conf:/etc/apache2/conf-available/remoteip.conf:ro
    environment:
      TZ: Europe/Berlin
      NC_SETUP_CREATE_DB_USER: "false"
      POSTGRES_HOST: postgres
      DB_PORT: 5432
      POSTGRES_DB: ${NEXTCLOUD_DB_NAME}
      POSTGRES_USER: ${NEXTCLOUD_DB_USER}
      PHP_MEMORY_LIMIT: 5G
      POSTGRES_PASSWORD: ${NEXTCLOUD_DB_PASSWORD}
      REDIS_HOST: redis
      REDIS_HOST_PORT: 6379
      REDIS_HOST_PASSWORD: ${NEXTCLOUD_REDIS_PASSWORD}
      NEXTCLOUD_ADMIN_USER: ${NEXTCLOUD_ADMIN_USERNAME}
      NEXTCLOUD_ADMIN_PASSWORD: ${NEXTCLOUD_ADMIN_PASSWORD}
      NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_HOSTNAME}
      #OVERWRITECLIURL: ${NEXTCLOUD_URL}
      #OVERWRITEPROTOCOL: https
      #OVERWRITEHOST: ${NEXTCLOUD_HOSTNAME}
      TRUSTED_PROXIES: 172.16.0.0/12 192.168.0.0/16 10.0.0.0/8 fc00::/7 fe80::/10 2001:db8::/32 192.168.178.0/24
    networks:
      - nextcloud-network
      - proxy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:80/"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 90s
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.nextcloud.service=nextcloud"
      - "traefik.http.routers.nextcloud.entrypoints=websecure"
      - "traefik.http.routers.nextcloud.rule=Host(`sub.server.local`) || Host(`sub.myzonededyn.io`)"
      - "traefik.http.middlewares.nc-rep.redirectregex.regex=https://(.*)/.well-known/(card|cal)dav"
      - "traefik.http.middlewares.nc-rep.redirectregex.replacement=https://$$1/remote.php/dav/"
      - "traefik.http.middlewares.nc-rep.redirectregex.permanent=true"
      - "traefik.http.middlewares.nc-header.headers.customFrameOptionsValue=SAMEORIGIN"
      - "traefik.http.middlewares.nc-header.headers.customResponseHeaders.Strict-Transport-Security=15552000"
      - "traefik.http.routers.nextcloud.tls=true"
      - "traefik.http.routers.nextcloud.tls.domains[0].main=myzone.dedyn.io"
      - "traefik.http.routers.nextcloud.tls.domains[0].sans=*.myzone.dedyn.io"
      - "traefik.http.routers.nextcloud.tls.certresolver=desec"
      - "traefik.http.services.nextcloud.loadbalancer.server.port=80"
      - "traefik.http.services.nextcloud.loadbalancer.passHostHeader=true"
      - "traefik.http.routers.nextcloud.middlewares=nextcloud-redirectregex1,nextcloud-redirectregex2,compresstraefik,nextcloud-securityheaders"
     # Define settings for the compression middleware
      - "traefik.http.middlewares.compresstraefik.compress=true"
      # Settings for the first redirect regex middleware
      - "traefik.http.middlewares.nextcloud-redirectregex1.redirectregex.permanent=true"
      - "traefik.http.middlewares.nextcloud-redirectregex1.redirectregex.regex=https?://([^/]*)/.well-known/(card|cal)dav"
      - "traefik.http.middlewares.nextcloud-redirectregex1.redirectregex.replacement=https://$${1}/remote.php/dav/"
     # Settings for the second redirect regex middleware
      - "traefik.http.middlewares.nextcloud-redirectregex2.redirectregex.permanent=true"
      - "traefik.http.middlewares.nextcloud-redirectregex2.redirectregex.regex=https?://([^/]*)(/.well-known[^#]*)"
      - "traefik.http.middlewares.nextcloud-redirectregex2.redirectregex.replacement=https://$${1}/index.php$${2}"
      # Specify which Docker network Traefik should use for routing
      - "traefik.docker.network=proxy"
      - "traefik.http.middlewares.nextcloud-securityheaders.headers.stsSeconds=315360000"
      - "traefik.http.middlewares.nextcloud-securityheaders.headers.stsIncludeSubdomains=true"
      - "traefik.http.middlewares.nextcloud-securityheaders.headers.stsPreload=true"
      - "traefik.http.middlewares.nextcloud-securityheaders.headers.browserXssFilter=true"
      - "traefik.http.middlewares.nextcloud-securityheaders.headers.contentTypeNosniff=true"
      - "traefik.http.middlewares.nextcloud-securityheaders.headers.forceSTSHeader=true"
      - "traefik.http.middlewares.nextcloud-securityheaders.headers.frameDeny=true"
      - "traefik.http.middlewares.nextcloud-securityheaders.headers.sslProxyHeaders.X-Forwarded-Proto=https"
      - "traefik.http.middlewares.permissions-policy.headers.customResponseHeaders.Permissions-Policy=geolocation=(self), microphone=(), camera=(), fullscreen=*"

    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy

#  notify_push:
#    image: ${NEXTCLOUD_IMAGE_TAG}
#    restart: unless-stopped
#    user: ${UID}:${GID}
#    depends_on:
#      - nextcloud
#    environment:
#      - PORT=7867
#      - NEXTCLOUD_URL=http://app        # don't go through the proxy to contact the nextcloud server
#    entrypoint: /var/www/html/custom_apps/notify_push/bin/x86_64/notify_push /var/www/html/config/config.php
#    volumes:
#      - ${DATA_PATH}/apps:/var/www/html/custom_apps
#      - ${DATA_PATH}/config:/var/www/html/config
#    labels:
#      - traefik.enable=true
#      - traefik.http.routers.nextcloud_notify_push.entryPoints=websecure
#      - traefik.http.routers.nextcloud_notify_push.priority=2
#      - traefik.http.routers.nextcloud_notify_push.middlewares=nextcloud_strip_push
#      - traefik.http.routers.nextcloud_notify_push.tls.certresolver=desec
 #     # necessary for the notify_push app to work:
 #     - traefik.http.routers.nextcloud_notify_push.rule=(Host(`sub.myzone.dedyn.io`) || Host(`cloud.server.local`) ) && PathPrefix(`/push`)
 #     - traefik.http.routers.nextcloud_notify_push.middlewares=nextcloud_striprefix_push@file
 ##     - traefik.http.services.nextcloud_notify_push.loadbalancer.server.port=7867
 #   networks:
 #     - proxy

  imaginary:
    image: nextcloud/aio-imaginary:latest
    restart: unless-stopped
    user: ${UID}:${GID}
    expose:
      - "9000"
    depends_on:
      - nextcloud
    cap_add:
      - SYS_NICE
    tmpfs:
      - /tmp

  cron:
    image: ${NEXTCLOUD_IMAGE_TAG}
    restart: unless-stopped
   # special UID handling https://github.com/nextcloud/docker/issues/1740
    environment:
      - UID=${UID}
    depends_on:
      - nextcloud
    volumes:
      - ${DATA_PATH}/nextcloud:/var/www/html
      - ${DATA_PATH}/data:/var/www/html/data
      - ${DATA_PATH}/apps:/var/www/html/custom_apps
      - ${DATA_PATH}/config:/var/www/html/config
      - /home/j0chn/portainer/scripts/nc_cron.sh:/cron.sh
    entrypoint: /cron.sh
    netrworks:
      - nextcloud-network

env data

HOME_PATH=/mnt/extern
DATA_PATH=/mnt/extern/ncdata
NEXTCLOUD_DB_NAME=nextcloud_db
NEXTCLOUD_DB_USER=nextcloud_user
NEXTCLOUD_DB_PASSWORD=nextcloud_db_pw
NEXTCLOUD_POSTGRES_IMAGE_TAG=postgres
NEXTCLOUD_REDIS_PASSWORD=nextcloud_redis_pw
NEXTCLOUD_ADMIN_USERNAME=<user>
NEXTCLOUD_ADMIN_PASSWORD=<pw>
NEXTCLOUD_HOSTNAME=sub.myzone.dedyn.io
NEXTCLOUD_IMAGE_TAG=nextcloud
NEXTCLOUD_URL=https://sub.myzone.dedyn.io
TRUSTED_PROXIES=172.16.0.0/12 192.168.0.0/16 10.0.0.0/8 fc00::/7 fe80::/10 2001:db8::/32
COMPOSE_PROJECT_NAME=nextcloud
NEXTCLOUD_VERSION=27
UID=1974
GID=1974

Nextcloud

The output of occ config:list system or similar is best, but, if not possible, the contents of your config.php file from /path/to/nextcloud is fine (make sure to remove any identifiable information!):

    {
    "system": {
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "secret": "***REMOVED SENSITIVE VALUE***",
        "trusted_domains": [
            "localhost",
            "cloud.fischers.dedyn.io"
        ],
        "apps_paths": [
            {
                "path": "\/var\/www\/html\/apps",
                "url": "\/apps",
                "writable": false
            },
            {
                "path": "\/var\/www\/html\/custom_apps",
                "url": "\/custom_apps",
                "writable": true
            }
        ],
        "datadirectory": "***REMOVED SENSITIVE VALUE***",
        "dbtype": "pgsql",
        "version": "31.0.5.1",
        "overwrite.cli.url": "http:\/\/localhost",
        "dbname": "***REMOVED SENSITIVE VALUE***",
        "dbhost": "***REMOVED SENSITIVE VALUE***",
        "dbport": "",
        "dbtableprefix": "oc_",
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "installed": true,
        "instanceid": "***REMOVED SENSITIVE VALUE***",
        "maintenance": false,
        "maintenance_window_start": "",
        "default_phone_region": {
            "DE": ""
        },
        "enabledPreviewProviders": [
            "OC\\Preview\\TXT",
            "OC\\Preview\\MarkDown",
            "OC\\Preview\\MP3",
            "OC\\Preview\\OpenDocument",
            "OC\\Preview\\Krita",
            "OC\\Preview\\Imaginary",
            "OC\\Preview\\ImaginaryPDF"
        ],
        "preview_imaginary_url": "***REMOVED SENSITIVE VALUE***",
        "preview_concurrency_all": "12",
        "preview_concurrency_new": "8",
        "app_install_overwrite": [],
        "SETUP_CREATE_DB_USER": "false"
    }
}

Apps

The output of occ app:list (if possible).

Enabled:
  - activity: 4.0.0
  - app_api: 5.0.2
  - bruteforcesettings: 4.0.0
  - calendar: 5.2.4
  - circles: 31.0.0
  - cloud_federation_api: 1.14.0
  - comments: 1.21.0
  - contacts: 7.1.1
  - contactsinteraction: 1.12.0
  - dashboard: 7.11.0
  - dav: 1.33.0
  - federatedfilesharing: 1.21.0
  - federation: 1.21.0
  - files: 2.3.1
  - files_downloadlimit: 4.0.0
  - files_pdfviewer: 4.0.0
  - files_reminders: 1.4.0
  - files_sharing: 1.23.1
  - files_trashbin: 1.21.0
  - files_versions: 1.24.0
  - firstrunwizard: 4.0.0
  - groupfolders: 19.0.4
  - logreader: 4.0.0
  - lookup_server_connector: 1.19.0
  - mail: 5.1.0
  - nextcloud_announcements: 3.0.0
  - notes: 4.12.0
  - notifications: 4.0.0
  - notify_push: 1.1.0
  - oauth2: 1.19.1
  - password_policy: 3.0.0
  - passwords: 2025.5.21
  - photos: 4.0.0-dev.1
  - privacy: 3.0.0
  - profile: 1.0.0
  - provisioning_api: 1.21.0
  - recommendations: 4.0.0
  - related_resources: 2.0.0
  - serverinfo: 3.0.0
  - settings: 1.14.0
  - sharebymail: 1.21.0
  - support: 3.0.0
  - survey_client: 3.0.0
  - systemtags: 1.21.1
  - text: 5.0.0
  - theming: 2.6.1
  - twofactor_backupcodes: 1.20.0
  - updatenotification: 1.21.0
  - user_oidc: 7.2.0
  - user_status: 1.11.0
  - viewer: 4.0.0
  - weather_status: 1.11.0
  - webhook_listeners: 1.2.0
  - workflowengine: 2.13.0
Disabled:
  - admin_audit: 1.21.0
  - encryption: 2.19.0
  - files_external: 1.23.0
  - suspicious_login: 9.0.1
  - twofactor_nextcloud_notification: 5.0.0
  - twofactor_totp: 13.0.0-dev.0
  - user_ldap: 1.22.0

Thank you very much!!!

Questions

  • Is it a individual problem or does the cron container always need to have access to the same network as nextcloud itself?
  • Are folders and files created with wrong ownership / permissions because of portainer, or is it due to the setup? → had to adjust it for redis volume and some individual files in nextcloud folder
  • I thought the custom_apps path is automatically configured in config.php. At least I did nothave to do it on the old server. Am I wrong here?

cron container can’t access the database

Your cron container does not appear to be associated with your docker network nextcloud-network.

notify push container does not know the file / folder (I guess because of the following error). But when it worked on the previous machine, the problem was insufficient permission even the file was chmodded to 777,

This is, at least in part, caused by the underlying cause of the next item.

apps are not stored on my specified host system path

Did you migrate from a non-Docker installation at some point? Your config doesn’t have the apps_paths configuration in it that is needed for the Docker image.

2 Likes

Adding the cron container to the nextcloud network worked. Thank you.
I did not migrate from another installation. It was a fresh installation. I even deleted the complete stack and removed all volumes, iamges in portainer and all data on my hard drive.
It did not help to use my specified app folder. It even made it worse and I again get an unhealthy container after a while (like on the previous server).
if I curl -f http://localhost:80 on host, I get a “moved permanently” message.
if I curl -f http://localhost:80 in the container, nothing happens for a while. I was too impatient to wait for the result
I am not sure and maybe it is a coincidence, but my redis container says this, before the container becomes unhealthy → when restarting the container nextcloud works again

1:M 21 May 2025 21:31:49.070 * 100 changes in 300 seconds. Saving...

1:M 21 May 2025 21:31:49.071 * Background saving started by pid 242

242:C 21 May 2025 21:31:49.072 # Failed opening the temp RDB file temp-242.rdb (in server root dir /data) for saving: Permission denied

1:M 21 May 2025 21:31:49.174 # Background saving error

Seemed, that the permission was wrong on /var/lib/docker/volumes/nextcloud_redis_data. I changed it and it works right now. But I would have thought, the volumes are created with the correct permissions set. Maybe a problem with portainer?

I updated my config.php manually to use the custom_apps path. And now the apps are listed in my hosts mount directory. So now I again get the permission error on notify_push.

I will update my initial post.