Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

persistir dados com dockerd

Estou estudando docker e acabei me deparando com a seguinte dúvida... É possível definir uma partição para que o docker crie os volumes? Por exemplo gostaria que quando eu executar o comando docker volume create, o volume fosse criado na partição /dev/sda5.

Vi que é possível realizar essa alteração através do dockerd, porém não sei como deixar a informação persistente, para que não se perca quando eu reiniciar o docker host por exemplo.

3 respostas

Olá Thalita, tudo bem? É isso mesmo, temos que alterar as propriedades de inicialização do Docker para que a mudança do local onde ficam salvos os volumes seja alterado de forma permanentemente. Para isso precisamos editar arquivo de inicialização do serviço do Docker, podemos fazer isso com o editor nano usando o seguinte comando:

nano /lib/systemd/system/docker.service

E nesse arquivo precisamos mudar a linha:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Indicando nosso novo local para salvar os volumes:

ExecStart=/usr/bin/dockerd --data-root /<nova-localizacao>/ -H fd:// --containerd=/run/containerd/containerd.sock

E por fim reiniciar o daemon e o Docker:

systemctl daemon-reload
systemctl restart docker

Espero ter ajudado!

Fiz exatamente como falou, mas quando crio o volume ele cria em /var/lib/docker/ exatamente igual... Testei outros parâmetros como o --iptables=false para ele não crie regras no iptables, mas ele também não funciona... Daí não sei se preciso alterar o containerd também.

solução!

Para funcionar eu precisei alterar o daemon pelo próprio systemctl

~$ sudo systemctl edit --full docker

Daí basta editar essa linha:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Para que ela fique dessa forma:

ExecStart=/usr/bin/dockerd --data-root=/<nova-localizacao>/ -H fd:// --containerd=/run/containerd/containerd.sock

Observação: No ubunto e no centos a alteração só funcionou depois que reiniciei o computador. Ainda estou procurando por qual motivo o comando systemctl daemon-reload não funcionou no meu caso.