Cred că modalitatea corectă de a face acest lucru este prin montarea unității externe pe sistemul dumneavoastră gazdă și apoi maparea volumului pe container la pornire.
Voi oferi un exemplu de bază cu Container NextCloud.
Deci, montați unitatea externă în mod normal pe sistemul dumneavoastră gazdă - să presupunem că o montați pe /mnt/my-data
.
Apoi, doriți să creați un director pentru datele NextCloud:
$ mkdir /mnt/my-data/nc-data
Apoi, când rulați imaginea containerului NextCloud, furnizați informații pentru a mapa volumul în directorul intern de date NextCloud:
$ docker run -d \
-v /mnt/my-data/nc-data:/var/www/html \
nextcloud
Dacă doriți o bază de date externă, faceți același lucru pentru MariaDB:
$ mkdir /mnt/my-data/nc-mariadb
$ docker run -d \
-v /mnt/my-data/nc-mariadb:/var/lib/mysql \
mariadb
Asigurați-vă că proprietarul și permisiunile pentru directoarele de date se potrivesc cu cele ale containerului care rulează.
Mi se pare ca este cel mai usor de folosit docker-compune
pentru a genera un fișier de instalare complet al întregii stive de containere. Folosind exemplul de mai sus și docker-compune
fișier afișat pe Docker Hub, acesta ar fi rezultatul:
versiunea: '2'
Servicii:
db:
imagine: mariadb
reporniți: întotdeauna
comandă: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volume:
- /mnt/my-data/nc-mariadb:/var/lib/mysql
mediu inconjurator:
- MYSQL_ROOT_PASSWORD=
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
aplicatie:
imagine: nextcloud
reporniți: întotdeauna
porturi:
- 8080:80
link-uri:
- db
volume:
- /mnt/my-data/nc-data:/var/www/html
mediu inconjurator:
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
Rețineți că secțiunea „volume” nu este prezentă, deoarece mapăm o cale absolută pe sistemul dumneavoastră gazdă (/mnt/my-data/nc-xxxx
) și nu un volum numit.