2
respostas

[Dúvida] Volumes no Docker

Olá! Estou com uma pequena dúvida sobre volumes: Uso a imagem jacobalberty/firebird e iniciando o container + o - assim:

docker run --name firebird -d -p 3050:3050 -v /home/mult/bancos:/firebird jacobalberty/firebird:v3.0.9.

Estou colocando manualmente vários arquivos .fdb (os bancos de dados) na pasta do host (/home/mult/bancos). Eu faço isso porque esses bancos já existem e estão populados. Está funcionando normalmente, mas eu gostaria de saber se estou aplicando de forma correta o conceito de volumes, pois só vejo exemplos em que o próprio container é quem salva aqruivos na pasta onde volume foi configurado. É errado colocar arquivos manualmente na pasta do volume?

2 respostas

Olá! Não tenho domínio sólido sobre Docker, mas recentemente também precisei pesquisar sobre volumes, então resolvi deixar meu parecer.

Na verdade, o recurso que permite montar diretórios ou arquivos específicos do sistema de arquivos do host no container é chamado de bind mount, e se diferencia ligeiramente de um volume, cujo local é gerenciado exclusivamente pelo Docker. É por isso que só há esse tipo de exemplos de uso para volumes.

Quanto a estar certo ou errado utilizar bind mounts, acredito que dependa da sua necessidade: se você precisa ter o controle absoluto sobre um diretório utilizado pelo container, então não deve haver grandes problemas ao utilizá-los. Vale notar, entretanto, que a documentação do Docker alerta que os bind mounts podem representar uma ameaça (procurar por "Bind mounts allow access to sensitive files") se não forem utilizados adequadamente, pois permitem que processos internos a um container modifiquem o sistema de arquivos do host, potencialmente incluindo arquivos e diretórios importantes para o sistema.

Eu não sei se entendi corretamente o seu caso de uso, então não sei se funcionará para você, mas outra opção seria criar e montar um volume nomeado (gerenciado pelo Docker) para o diretório no container e copiar os arquivos necessários com o comando docker cp.

Por fim, encontrei essa resposta (em inglês) no ServerFault sobre algumas diferenças entre volumes e bind mounts, que achei interessante.

Espero ter ajudado!

Obrigado pela resposta!