Există câteva lucruri în configurația dvs. pe care le-aș face diferit și voi încerca să subliniez acest lucru în răspunsul meu. Nu pot garanta că va funcționa, dar așa am configurat containerele, așa că sper că poate ajuta.
În primul rând, nu mi-aș monta discul de date cu uid
și gid
atribute. Aș monta cu atribute implicite, așa:
UUID=MY_UUID /home/user/my_mount_point auto umask=022, implicit 0 1
(Din acest moment, voi folosi /home/user/my_mount_point
ca referință de unde este montat discul.)
În al doilea rând, nu înțeleg referința dvs. de volum în docker-compose.yml
. as avea asa:
volume:
- /home/user/my_mount_point/db-volume-folder/db-one:/var/lib/mysql
Rețineți că aș folosi întotdeauna o cale absolută în docker-compose.yml
.
De asemenea, proprietatea ar trebui să se potrivească cu cele ale containerului care rulează, deci folderul db-one
ar trebui să fie deținut de root.
myUser@ubuntu:~/my_mount_point/db-volume-folder$
drwxr-xr-x 3 root root 4028276 26 iulie 04:47 db-one
Rețineți că numele folderului db-one
ar trebui să se potrivească cu ultimul folder pe partea stanga în calea de montare a volumului - acesta este folderul în care contează permisiunile.
În cele din urmă, după cum ați observat, docker-compose acceptă, de asemenea, să specificați cu ce utilizator ar trebui să ruleze containerul. Deci, cred că ați putea schimba utilizatorul și apoi să schimbați dreptul de proprietate în consecință.
Deci, dacă schimbați utilizatorul astfel:
versiunea: "3.7"
Servicii:
my_sql_db:
container_name: my_sql_db
utilizator: myUser
Și apoi permisiunile folderului să se potrivească:
myUser@ubuntu:~/my_mount_point/db-volume-folder$
drwxr-xr-x 3 myUser myUser 4028276 26 iulie 04:47 db-one
Sper că unele dintre aceste instrucțiuni vor funcționa pentru dvs. - vă rugăm să ne anunțați dacă da.
EDITAȚI | ×:
Tocmai am testat containerul MySql cu următorul docker-compose.yml:
versiunea: "3.7"
Servicii:
my_sql_db:
container_name: my_sql_db
utilizator: root
imagine: mysql/mysql-server:latest
porturi:
- „1533:3306”
mediu inconjurator:
MYSQL_ROOT_PASSWORD: secret
MYSQL_USER: mysqluser
MYSQL_PASSWORD: mysqlpassword
volume:
- /mnt/zfs/docker-data/mysql-test/db-one:/var/lib/mysql
reporniți: întotdeauna
Acesta este conținutul folderului /mnt/zfs/docker-data/mysql-test
:
/mnt/zfs/docker-data/mysql-test$ ls -la
total 7
drwxr-xr-x 3 rădăcină rădăcină 4 Aug 1 22:02 .
drwxr-xr-x 22 root root 22 Aug 1 21:47 ..
drwxr-xr-x 6 27 sudo 30 august 1 21:59 db-one
-rw-r--r-- 1 rădăcină rădăcină 374 1 august 21:58 docker-compose.yml
În acest fel, containerul se ridică cu succes. Se pare că containerul însuși își schimbă proprietarul în 27:sudo
(Bănuiesc că acestea sunt valori implicite).
Dacă schimb utilizatorul în docker-compose.yml
la myuser:myuser
și, de asemenea, modifica permisiunile pentru folder db-one
la myuser:myuser
, primesc această eroare când încerc să pornesc containerul:
EROARE: pentru my_sql_db Nu se poate porni serviciul my_sql_db: nu se poate găsi utilizatorul myuser: nu există intrări care se potrivesc în fișierul passwd
Deci, se pare că problema este între utilizatorii potriviți și nu proprietatea sistemului de fișiere. Și dacă primești o altă eroare, probabil că este altceva decât proprietatea sistemului de fișiere - vezi linkul meu în comentarii.