Hallo,
ich bin fast am verzweifeln und habe schon verschiedenes probiert. Volume angelegt über Portainer etc. aber ich schaffe es nicht. Also habe ich mir ein compose file erstellt:
start ich den container nun mit docker compose up -d bekomme ich einen Fehler.
pi@docker2:~/ubuntu $ docker compose up
[+] Running 2/2
? Volume "ubuntu_cifs-mount" Created 0.0s
? Container ubuntu Created 0.2s
Attaching to ubuntu
Gracefully stopping... (press Ctrl+C again to force)
Error response from daemon: error while mounting volume '/var/lib/docker/volumes/ubuntu_cifs-mount/_data': failed to mount local volume: mount //192.168.178.2:/var/lib/docker/volumes/ubuntu_cifs-mount/_data, data: username=docker,password=********,file_mode=0777,dir_mode=0777 --name cifs-mount: invalid argument
Hi, es geht auch NFS. Muss ich aber erst noch auf dem NAS aktivieren.
Hab ich jetzt mal gemacht und dort zeigt es mir an als Bereitstellungspunkt:
nfs:///nfs/docker
Wie setze ich das im compose dann um?
Muss das den unbedingt immer erst gemountet werden wen der container startet? Mach doch einfach ein mount auf dem host und dem Container gibst du die Verzeichnisse
Hi,
ich möchte erreichen das der Container eben nicht startet wenn das volume nicht vorhanden ist.
Vom OS selbst kann ich das NFS Laufwerk mounten:
sudo mount -t nfs :/nfs/docker /mnt/NAS
Dan setz doch in der fstab den mount fest, so das wen der host hoch fährt das auch direkt der mount eingebunden wird, mache ich genau so, das funktioniert ohne Probleme auch für Container die sofort starten beim Hochfahren
PS:
CIFS/SMB ist eher für Windows, wen man in linux Umgebung unterwegs ist nutzt man für sowas eigentlich immer NFS, CIFS braucht man wen man von linux auf windows freigaben möchte.
Hi,
das habe ich in einem anderen Pi schon so gemacht aber irgendwie muss das doch auch aus docker gehen ohne einen Eintrag in der fstab.
Was passiert den wenn das NAS z.B. nicht eingeschaltet ist. Startet der container dann trotzdem?
Hi,
ich habe jetzt wieder eine menge gestestet. Ich implementiere einen mysql container (arm64v8/mysql) und habe per cifs oder auch mit NFS einen ordner vom NAS eingebunden. Wenn ich einen lokalen Ordner in dem container mit
volumes:
- ./database:/var/lib/mysql:rw
startet der mysql container. Benutze ich aber einen mount im OS mit:
volumes:
- /mnt/docker/db-data:/var/lib/mysql:rw
startet der container nicht. Deshalb bin ich auf die rechte gekommen.
Das kann durchaus sein, wen der ordner nicht die rechte hat wie der user im container sie benötigt, leicht lässt sich das prüfen, einfach mal 777 setzen, das sollte immer klappen, dan aus dem Container raus eine datei in der freigabe erstellen und anschließend prüfen welche user/gruppe die datei hat, dan kannst du der freigabe diese user/gruppe und die rechte nach Belieben setzen, bei sowas kann es durchaus sein das die user/gruppe sich unterscheiden zu den auf dem host oder freigabe
Es ist eine dumme Idee übrigens, MySQL/MariaDB-Datafiles nach „/var/lib/mysql“ via cifs zu mounten, da es grob mit den Berechtigungen nicht klappen kann.
MySQL/MariaDB sind da penibel, was das betrifft. Wenn per NAS, dann nur per NFS, aber auch das finde ich rein von der Performance nicht klug.
„/var/lib/mysql“ sollte als Owner rekursiv stets mysql:mysql haben und 755.
Die Verzeichnisse der DB in diesem Ordner sollten/müssen sogar 700 haben.
du hast es wohl falsch verstanden, das soll nicht dauerhaft so gesetzt werden, sondern nur um zu erkennen unter welchem user/gruppe der Container schreibt,
wen im container mysql:mysql ist, das heißt noch lange nicht das du es auch so in der freigabe setzen kannst…
Mir ist schon klar, dass du mit 777 erstmal testen willst. Das es für den produktiven Betrieb ein NoGo ist, möchte ich auch nicht in Frage stellen.
Es testweise auf 777 zu stellen heißt noch lange nicht, das es zum erstmal helfen kann, weil die Datenbank sich schon wegen dem falschen Owner weigert dort überhaupt etwas anzulegen.
mysql:mysql namentlich darzustellen, funktioniert nur lokal, wenn entsprechender Bezug in /etc/passwd und /etc/group vorhanden ist, andernfalls würde man es nur als bspw. 1054:1041 sehen. Somit muss es auch nicht auf einem NAS als mysql:mysql erscheinen, selbst wenn auf dem NAS ein MySQL/MariaDDB Deamon laufen würde. Mittels „id mysql“ lässt (sollte) sich die ID ermitteln.
Gut möglich, dass wir hier etwas aneinander vorbeireden. Wenn du letzteres mit deinem letzten Satz so gemeint hast, gut, andernfalls lasse es mich besser verstehen. Ich versuche auch nur zu helfen.
Das geht aber nicht. Von den logs die der container schreibt sieht es so aus als würde ein chown auf all directories die in docker existieren gemacht.
chown: changing ownership of ‚/var/lib/mysql/‘: Operation not permitted
Dateien sehen ich aber keine.
Hab jetzt in der fstab mal also mount point /home/pi/dbdata angegeben sowie auch im compose file. Hatte den ordner dbdata als user pi dort angelet:
drwxrwxrwx 6 root root 4096 Oct 16 07:10 dbdata
Dateien werden da aber nicht angelegt in dem Ordner.
also direkt in der compose ein nfs zu mounten habe ich nie gemacht, finde ich auch nicht unbedingt nötig, ein NAS läuft ja immer also kann man den share auch im OS mounten, ich denke dein Problem ist das du das Verzeichnis falsch angibst
so will er ein volume anlegen, du willst aber das er den pfad von einem mount benutzt
volumes:
- dbdata:/var/lib/mysql:rw
ich würde es eher so machen wen der mount im ordner z.b. /mnt/dbdata ist
volumes:
- /mnt/dbdata:/var/lib/mysql
das :rw dahinter habe ich für Verzeichnisse nie gemacht, nur wen es eine Datei ist z.b. :ro die nur gelesen werden darf