Como posso alterar corretamente o diretório de dados padrão do Docker?

0

Temos docker-ce em execução em algumas máquinas Ubuntu 16.04 LTS. As máquinas têm um SSD rápido para o sistema operacional e um array ZFS para dados pesados, como contêineres docker.

Toda vez que sou chamado para corrigir a configuração do docker, parece que uma atualização redefiniu a configuração para usar o array do ZFS em seus dados.

Isso provavelmente é porque a maioria dos guias é bem antiga. Minhas alterações, inspiraram por este artigo , são assim:

Em /lib/systemd/system/docker.service , adicione -g "/mnt/var/lib/docker" da seguinte forma:

ExecStart=/usr/bin/dockerd -g "/mnt/var/lib/docker" -H fd://

Também adie o início do serviço até que o array do ZFS esteja online:

[Unit]
After=network.target docker.socket firewalld.service zfs-mount.service

Mesmo que isso pareça ser a maneira recomendada de adicionar um diretório diferente de acordo com os documentos e artigos antigos, isso deve estar desatualizado, pois esse arquivo é redefinido em todas as atualizações , e eu tenho que manualmente troque de volta. Depois de reiniciar o serviço, ele funciona bem até a próxima atualização.

Qual é a maneira correta de fazer essas alterações permanecerem enquanto o pacote é atualizado?

    
por Redsandro 12.03.2018 / 18:09

1 resposta

1

Esse problema tem a ver com systemd usa arquivos.

Conforme documentado em man file-hierarchy , o diretório /lib é para arquivos somente leitura fornecidos pelo fornecedor, enquanto /etc é para "configuração específica do sistema", que pode substituir os arquivos padrão fornecidos pelo fornecedor em /lib .

O local correto para colocar suas modificações está em /etc/sytemd/system .

Você pode substituir completamente o arquivo em questão por um arquivo em /etc/ ou usar um modelo "drop-in" para substituir somente parte do arquivo.

Pesquise man systemd.unit para "Drop-in" para os detalhes.

Os arquivos em /lib continuarão sendo sobrescritos durante os upgrades de pacotes, enquanto as alterações em /etc/ serão preservadas.

O conselho sobre / lib vs / etc aplica-se geralmente, não apenas a systemd .

exemplo de unidade drop-in do systemd

Em /etc/systemd/system/docker.service.d/10-fix-execstart.conf :

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -g "/mnt/var/lib/docker" -H fd://

Assim, você está seguindo um padrão para criar um arquivo em um diretório com o nome do serviço que deseja substituir, declarando apenas a seção específica e a diretiva que você deseja substituir.

De man systemd.service :

If the empty string is assigned to this option, the list of commands to start is reset, prior assignments of this option will have no effect.

    
por Mark Stosberg 12.03.2018 / 20:31