Vorrei aggiungere la mia risposta, perché credo che agli altri manchi il punto di Docker.
L'uso VOLUME
nel Dockerfile è il modo giusto ™, perché si comunica a Docker che una determinata directory contiene dati permanenti. Docker creerà un volume per tali dati e non lo eliminerà mai, anche se si rimuovono tutti i contenitori che lo utilizzano.
Inoltre, ignora il file system union, in modo che il volume sia effettivamente una directory effettiva che viene montata (lettura-scrittura o sola lettura) nel posto giusto in tutti i contenitori che la condividono.
Ora, per accedere a quei dati dall'host, devi solo ispezionare il tuo contenitore:
# docker inspect myapp
[{
.
.
.
"Volumes": {
"/var/www": "/var/lib/docker/vfs/dir/b3ef4bc28fb39034dd7a3aab00e086e6...",
"/var/cache/nginx": "/var/lib/docker/vfs/dir/62499e6b31cb3f7f59bf00d8a16b48d2...",
"/var/log/nginx": "/var/lib/docker/vfs/dir/71896ce364ef919592f4e99c6e22ce87..."
},
"VolumesRW": {
"/var/www": false,
"/var/cache/nginx": true,
"/var/log/nginx": true
}
}]
Quello che faccio di solito è creare collegamenti simbolici in un posto standard come / srv , in modo da poter accedere facilmente ai volumi e gestire i dati in essi contenuti (solo per i volumi che ti interessano):
ln -s /var/lib/docker/vfs/dir/b3ef4bc28fb39034dd7a3aab00e086e6... /srv/myapp-www
ln -s /var/lib/docker/vfs/dir/71896ce364ef919592f4e99c6e22ce87... /srv/myapp-log