Container Manager(Docker) Nextcloud+MariaDB+Apache Berechtigungen

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Joschie

Benutzer
Registriert
10. Juli 2023
Beiträge
188
Reaktionspunkte
3
Punkte
18
Guten abend,

ich bin dabei auf meiner Synology NAS DS 723+ die folgenden Dienste, über den Container Manager, einzurichten, Nextcloud, MariaDB, phpMyAdmin, Redis. Leider stoße ich aktuell auf Berechtigungs-Probleme.

Ich möchte die Benutzer-Daten von Nextcloud auslagern nach </volume1/nextcloud-data/>, sowie auch die Datenbank von MariaDB nach </volume1/nexcloud-db/>. Wenn ich es richtig verstanden habe, dann wird standardmäßig </volume1/docker/> für alle Container-Daten verwendet?

Ist es überhaupt möglich dies zu ändern?

Ich möchte zudem die </volume1/nextcloud-data/> und </volume1/nexcloud-db/> als manuell verschlüsselte Freigabe einrichten. Ist dies möglich?
 
Hi Joschie,

für Verschlüsselung bin ich kein Experte, aber Nextcloud kenne ich seit Jahren. Hier mein immer noch optimierbarer, aber solide laufender Portainer Stack:
services:
mariadb:
container_name: Nextcloud-DB
image: mariadb:10.11
network_mode: bridge
restart: always
security_opt:
- no-new-privileges:true
user: 1024:100
command: --transaction-isolation=READ-COMMITTED --log-bin=ROW
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "-uxxxxxxxxxx", "-pxxxxxxxxxxxxxxxxxxx"]
interval: 20s
timeout: 10s
retries: 10
volumes:
- /volume1/docker/nextcloud/db:/var/lib/mysql:rw
- /volume1/docker/nextcloud/db/99-custom.cnf:/etc/mysql/mariadb.conf.d/99-custom.cnf:ro
ports:
- "40100:3306"
environment:
- MYSQL_ROOT_PASSWORD=xxxxxxxxxxxxxxxxx
- MYSQL_USER=xxxxxxxxxxxxxxx
- MYSQL_PASSWORD=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- MYSQL_DATABASE=xxxxxxxxxxxxxxxxxxxxx
- TZ=Europe/Berlin
# - MARIADB_AUTO_UPGRADE=1

phpmyadmin:
container_name: nextcloud_phpadmin
image: kwajahussain/phpadmin:latest
network_mode: bridge
restart: always
expose:
- "40102"
ports:
- "40102:80"
environment:
- PMA_HOST=mariadb
- PMA_PORT=3306
links:
- mariadb

redis:
container_name: Nextcloud-REDIS
image: redis
network_mode: bridge
restart: always
user: 1024:100
volumes:
- /volume1/docker/nextcloud/redis:/data:rw
environment:
- TZ=Europe/Berlin

nextcloud:
container_name: Nextcloud-APP
image: linuxserver/nextcloud:amd64-31.0.9
network_mode: bridge
links:
- mariadb
- redis
restart: always
ports:
- 8082:80
depends_on:
mariadb:
condition: service_healthy
redis:
condition: service_started
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80"]
interval: 300s
timeout: 15s
retries: 2
environment:
- REDIS_HOST=Nextcloud-REDIS
- MYSQL_USER=xxxxxxxxxxxx
- MYSQL_PASSWORD=xxxxxxxxxxxxxxxxxx
- MYSQL_DATABASE=xxxxxxxxxxxxxxxxxxx
- MYSQL_HOST=mariadb
- PUID=1024
- PGID=100
- TZ=ETC/UTC
volumes:
# - /volume1/docker/nextcloud/data:/data:rw
- /volume1/cloud/data:/data:rw
- /volume1/docker/nextcloud/app/config:/config/www/nextcloud/config:rw
- /volume1/docker/nextcloud/app/apps:/config/www/nextcloud/apps:rw
- /volume1/docker/nextcloud/php83/00_opcache.ini:/etc/php83/conf.d/00_opcache.ini:rw
- /volume1/docker/nextcloud/php2/php-local.ini:/config/php/php-local.ini:rw
- /volume1/docker/nextcloud/config_linuxserver:/config:rw
- /volume1/docker/nextcloud/config_linuxserver/custom-init.d:/custom-cont-init.d:ro
- /volume1/docker/nextcloud/scripts:/usr/local/bin

nextcloud-nc-backup:
container_name: Nextcloud_backup
image: waja/calcardbackup
network_mode: bridge
links:
- mariadb
- nextcloud
environment:
- CRON_TIME=15 22 * * *
- INIT_BACKUP=no
- CALCARD_OPTS=-i -r 20
- NC_DIR=/nextcloud
- NC_HOST=192.168.178.72
- NC_PORT=8082
- DB_HOST=mariadb
depends_on:
- mariadb
- nextcloud
restart: unless-stopped
volumes:
- /volume1/docker/nextcloud/backup/calcardbackup:/backup
- /volume1/docker/nextcloud/app/config:/nextcloud/config
- /etc/localtime:/etc/localtime:ro
Du kannst zunächst mal den Datenordner da belassen, wo ihn Nextcloud standardmäßig erwartet, alles über die Oberfläche einrichten und ihn später jederzeit und überall hin verschieben. Auf SSH-Ebene kann man dann der Nextcloud-Datenbank und der config-Datei verklickern, wo sie hingucken soll.

Da ich eine DS216+II fahre, musste ich mir ein Nextcloud-Image von Linuxserver aussuchen, denn mein docker-kernel hat da so seine eigene Meinung was das Thema random number generator :-) angeht.

cheers,
abrocksi
 
Zuletzt bearbeitet:
Ist es denn überhaupt möglich den Speicherort von der Datenbank zu verschieben? Also NICHT unter </volume1/docker/nextcloud/db/> sondern unter </volume1/nextcloud_db/>.
 
Natürlich. Wieso sollte das nicht gehen? Du kannst jeden Pfad auf dem Host nutzen, den du willst. Nur die Rechte müssten halt passen.
 
Bei mir hat MariaDB rumgemeckert, dass es keine Schreibrechte hatte im Docker-Ordner. Verständlich, da ich unter Docker vorher alles gelöscht habe und Ihm über die Volumen-Argumente andere Ordner zugeordnet hatte, außerhalb von </volume1/docker/>. Aber warum wollte MariaDB trotzdem im Docker-Ordner schreiben?
 
Dazu müsste man wissen, was du genau gemacht hast. Docker schreibt nicht einfach wahllos in irgendwelchen Ordnern. Auch nicht bei Synology.
 
Vielleicht sehe ich auch nur Gespenster. Es folgt meine YAML-Datei:

version: "3.9"

services:

mariadb:
image: mariadb:10.11
container_name: nc-db
restart: unless-stopped
command:
- --transaction-isolation=READ-COMMITTED
- --binlog-format=ROW
- --innodb_flush_log_at_trx_commit=2
- --sync_binlog=0
- --innodb_buffer_pool_size=2G
environment:
MYSQL_ROOT_PASSWORD: DEIN_DB_ROOT_PASSWORT
MYSQL_DATABASE: nextcloud
MYSQL_USER: ncuser
MYSQL_PASSWORD: DEIN_DB_USER_PASSWORT
volumes:
- /volume1/nextcloud-db:/var/lib/mysql
tmpfs:
- /tmp
shm_size: "256m"

redis:
image: redis:7
container_name: nc-redis
restart: unless-stopped
command: redis-server --save "" --appendonly no
mem_limit: 256m

nextcloud:
image: nextcloud:apache
container_name: nc-app
restart: unless-stopped
depends_on:
- mariadb
- redis
environment:
MYSQL_HOST: mariadb
MYSQL_DATABASE: nextcloud
MYSQL_USER: ncuser
MYSQL_PASSWORD: DEIN_DB_USER_PASSWORT
REDIS_HOST: redis
PHP_MEMORY_LIMIT: 1024M
volumes:
- /volume1/nextcloud-app:/var/www/html
- /volume1/nextcloud-data:/var/www/html/data
ports:
- "38888:80"
tmpfs:
- /tmp
shm_size: "256m"

phpmyadmin:
image: phpmyadmin:latest
container_name: nc-phpmyadmin
restart: unless-stopped
depends_on:
- mariadb
environment:
PMA_HOST: mariadb
PMA_PORT: 3306
UPLOAD_LIMIT: 256M
ports:
- "8081:80"
 
Und wie kommst du darauf, dass er in /volume1/docker was schreiben will? Das Problem wird eher wahrscheinlich sein, dass der verwendete User vom Image keine Rechte für deinen Ordner hat.
 
Habe nochmal Alles gelöscht und alle 3 Ordner neu erstellt über den DM mit Lese+Schreib-Rechten für alle Administratoren/admin/Admin-Benutzer/ContainerManager.

MariaDB hat Probleme mit Schreibrechten,

22.01.2026 04:49 Please check all of the above before submitting a bug report stdout
22.01.2026 04:49 stdout
22.01.2026 04:49 the MariaDB discuss email list at https://lists.mariadb.org/postorius/lists/discuss.lists.mariadb.org/ stdout
22.01.2026 04:49 You can find the latest source at https://downloads.mariadb.org and stdout
22.01.2026 04:49 https://mariadb.com/kb/en/installing-system-tables-mysql_install_db stdout
22.01.2026 04:49 The latest information about mysql_install_db is available at stdout
22.01.2026 04:49 stdout
22.01.2026 04:49 --general-log gives you a log in /var/lib/mysql/ that may be helpful. stdout
22.01.2026 04:49 Try '/usr/sbin/mariadbd --help' if you have problems with paths. Using stdout
22.01.2026 04:49 stdout
22.01.2026 04:49 MariaDB> show tables; stdout
22.01.2026 04:49 shell> /usr/bin/mariadb -u root mysql stdout
22.01.2026 04:49 stdout
22.01.2026 04:49 to connect to the mysql database and look at the grant tables: stdout
22.01.2026 04:49 and use the command line tool /usr/bin/mariadb stdout
22.01.2026 04:49 stdout
22.01.2026 04:49 shell> /usr/sbin/mariadbd --skip-grant-tables --general-log & stdout
22.01.2026 04:49 stdout
22.01.2026 04:49 You can also try to start the mariadbd daemon with: stdout
22.01.2026 04:49 stdout
22.01.2026 04:49 shell> /usr/bin/mariadb-install-db --defaults-file=~/.my.cnf stdout
22.01.2026 04:49 stdout
22.01.2026 04:49 my.cnf files. You can ignore these by doing: stdout
22.01.2026 04:49 The problem could be conflicting information in an external stdout
22.01.2026 04:49 stdout
22.01.2026 04:49 /var/lib/mysql/ for more information. stdout
22.01.2026 04:49 Installation of system tables failed! Examine the logs in stdout
22.01.2026 04:49 stdout
22.01.2026 04:49 2026-01-22 3:49:24 0 [ERROR] Aborting stderr
22.01.2026 04:49 /usr/sbin/mariadbd: Can't change dir to '/var/lib/mysql/' (Errcode: 13 "Permission denied") stderr
22.01.2026 04:49 2026-01-22 3:49:24 0 [Warning] Can't create test file '/var/lib/mysql/c25887017743.lower-test' (Errcode: 13 "Permission denied") stderr
22.01.2026 04:49 2026-01-22 03:49:24+00:00 [Note] [Entrypoint]: Initializing database files stdout
22.01.2026 04:49 2026-01-22 03:49:23+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.11.15+maria~ubu2204 started. stdout
22.01.2026 04:49 2026-01-22 03:49:23+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' stdout
22.01.2026 04:49 1:name=systemd:/docker/c25887017743c30938339bb17ee8a3bce66d22c9a8476687bb15f9b13bb50d75/memory.pressure not writable, functionality unavailable to MariaDB stderr
22.01.2026 04:49 2:name=synomonitor:/system.slice/pkg-ContainerManager-dockerd.service stderr
22.01.2026 04:49 3:devices:/docker/c25887017743c30938339bb17ee8a3bce66d22c9a8476687bb15f9b13bb50d75 stderr
22.01.2026 04:49 4:cpuacct:/docker/c25887017743c30938339bb17ee8a3bce66d22c9a8476687bb15f9b13bb50d75 stderr
22.01.2026 04:49 5:cpu:/docker/c25887017743c30938339bb17ee8a3bce66d22c9a8476687bb15f9b13bb50d75 stderr
22.01.2026 04:49 6:freezer:/docker/c25887017743c30938339bb17ee8a3bce66d22c9a8476687bb15f9b13bb50d75 stderr
22.01.2026 04:49 7:blkio:/docker/c25887017743c30938339bb17ee8a3bce66d22c9a8476687bb15f9b13bb50d75 stderr
22.01.2026 04:49 8:cpuset:/docker/c25887017743c30938339bb17ee8a3bce66d22c9a8476687bb15f9b13bb50d75 stderr
22.01.2026 04:49 2026-01-22 03:49:23+00:00 [Warn] [Entrypoint]: /sys/fs/cgroup/emory:/docker/c25887017743c30938339bb17ee8a3bce66d22c9a8476687bb15f9b13bb50d75 stderr

MariaDB hat Probleme beim wechseln zum internen Ordner </var/lib/mysql>. Die Berechtigungen habe ich DSM-konform eingestellt für alle 3 Ordner. Alle Admins dürfen Lesen+Schreiben.


1769054864947.png
 
Zuletzt bearbeitet:
Benutzer @abrocksi hat zweimal die UID/GID manuell festgelegt in seinem Compose-Code,
Ja, aber du nicht. Bei dir ist kein extra User gesetzt, also wird der default User vom Image benutzt.
Du meinst 999. Wie lautet die passende GID dazu?
Ich betreibe keine MariaDB daher weiß ich es nicht genau. Aber ich würde auch 999 vermuten.
Ansonsten siehe https://github.com/MariaDB/mariadb-docker/issues/287.
 
Wenn Du auf DSM 7 bist, würde ich es mit 1026:100 probieren. Damit hast Du Schreibrechte für die Container im Verzeichnis /volume1/docker/nextcloud...
Benutzer @abrocksi hat zweimal die UID/GID manuell festgelegt in seinem Compose-Code,
Code:
user: 1024:100
 
Er will ja seine Daten in eigenen Shares ablegen und nicht in docker. Wenn du die IDS von Usern wissen willst, dann verbinde dich einfach mit SSH und dann kannst du mit id deine Idee rausbekommen oder id Username die ID vom angegebenen User
 
Sehe ich das richtig, es gibt <Named-Volumes>, ist bei ContainerManager mit Docker Standard und dann gibt es <Path-Defined-Volumes>, hierfür benötige ich die explizite Angabe der GID/UID mit der MariaDB läuft?

<Named-Volumes> nextcloud-db:/var/lib/mysql
<Path-Defined-Volumes> /volume1/nexctcloud_db:/var/lib/mysql

Und dann stellt sich für mich die Frage, ob eine Verschlüsselung der Benutzerdaten sinnvoll ist? Kann sich die GID/UID nach einem System-Update ändern?
 
Zuletzt bearbeitet:
Ja, bei named Volumes übernimmt die Docker Engine die Verwaltung. Da kommst du aber nur noch mit SSH ran, wenn du z.B. die Sachen backupen willst.
 
Also ich würde aktuell für <nextcloud-db> "Named-Volume" nutzen, für <nextcloud-app> und <nextcloud-data> "Path-Defined-Volumes".

Muss ich dann für Nextcloud die GID/UID fest definieren in dem SERVICE-Abschnitt von Nextcloud?
 
Wollte nochmal meine jetzige funktionierende YAML-Datei hier veröffentlichen,

Code:
version: "3.9"

services:

  mariadb:
    image: mariadb:10.11
    container_name: nc-db
    restart: unless-stopped
    command:
      - --transaction-isolation=READ-COMMITTED
      - --binlog-format=ROW
      - --innodb_flush_log_at_trx_commit=2
      - --sync_binlog=0
      - --innodb_buffer_pool_size=2G
    environment:
      MYSQL_ROOT_PASSWORD: MARIADB-ROOT-PW
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: ncuser
      MYSQL_PASSWORD: MARIADB-NCUSER-PW
    volumes:
      - nc-db-data:/var/lib/mysql
    tmpfs:
      - /tmp
    shm_size: "256m"

  redis:
    image: redis:7
    container_name: nc-redis
    restart: unless-stopped
    command: redis-server --save "" --appendonly no
    mem_limit: 256m

  nextcloud:
    image: nextcloud:apache
    container_name: nc-app
    restart: unless-stopped
    depends_on:
      - mariadb
      - redis
    environment:
      MYSQL_HOST: mariadb
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: ncuser
      MYSQL_PASSWORD: MARIADB-NCUSER-PW
      REDIS_HOST: redis
      PHP_MEMORY_LIMIT: 1024M
    volumes:
      - /volume1/nextcloud-app:/var/www/html
      - /volume1/nextcloud-data:/var/www/html/data
    ports:
      - "38888:80"
    tmpfs:
      - /tmp
    shm_size: "256m"

  phpmyadmin:
    image: phpmyadmin:latest
    container_name: nc-phpmyadmin
    restart: unless-stopped
    depends_on:
      - mariadb
    environment:
      PMA_HOST: mariadb
      PMA_PORT: 3306
      UPLOAD_LIMIT: 256M
    ports:
      - "8081:80"

volumes:
    nc-db-data:

Werde schauen, wie diese Einstellung mit meinem NAS läuft. Gibt es von Euch noch Verbesserungs-Vorschläge.
 
Anscheinend muss ich für den Nextcloud-Service auch mit GID/UID arbeiten oder sonstige Berechtigungnen setzen?!

Der Zugriff auf meine Nextcloud-Seite, im lokalen Netzwerk, über,

http://NAS.fritz.box:PORTNC/

führt zu,

Forbidden
You don't have permission to access this resource.Server unable to read htaccess file, denying access to be safe

Apache/2.4.66 (Debian) Server at nas.fritz.box Port PORTNC
 
Befass dich mal bitte mit den Grundlagen von Docker. So macht das alles keinen Sinn.
Hast du auch an ein Backup Konzept bei den Named Volumes gedacht? Die DB ist ja nicht ganz unwichtig bei Nextcloud.
Also les dir mal die Doku zu Docker durch oder Grundlagen Tutorials. Solange bin ich hier raus...
 

Additional post fields

 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat