Deixe-me adicionar minha própria resposta, porque acredito que os outros estão perdendo o objetivo do Docker.
O uso VOLUME
no Dockerfile é o caminho certo ™, porque você informa ao Docker que um determinado diretório contém dados permanentes. O Docker criará um volume para esses dados e nunca os excluirá, mesmo se você remover todos os contêineres que os usam.
Ele também ignora o sistema de arquivos da união, de modo que o volume é de fato um diretório real montado (leitura / gravação ou somente leitura) no lugar certo em todos os contêineres que o compartilham.
Agora, para acessar esses dados do host, você só precisa inspecionar seu contêiner:
# 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
}
}]
O que eu costumo fazer é criar links simbólicos em algum local padrão como / srv , para que eu possa acessar facilmente os volumes e gerenciar os dados que eles contêm (apenas para os volumes de seu interesse):
ln -s /var/lib/docker/vfs/dir/b3ef4bc28fb39034dd7a3aab00e086e6... /srv/myapp-www
ln -s /var/lib/docker/vfs/dir/71896ce364ef919592f4e99c6e22ce87... /srv/myapp-log