O serviço do Docker é iniciado antes do ZFS

4

Estou usando o Docker CE no Ubuntu 16.04, com o ZFS como armazenamento para o Docker. A configuração é praticamente padrão:

  1. Há um zpool com vários discos
  2. No zpool, há um sistema de arquivos zfs com o ponto de montagem /var/lib/docker .
  3. O Docker vê que o sistema de arquivos é o ZFS e usa isso automaticamente

Tudo funciona na maior parte do tempo. No entanto, de vez em quando, quando minha VM é inicializada, o zpool não é montado. Acredito (embora não tenha 100% de certeza) que isso ocorre porque o serviço Docker é iniciado antes de o sistema de arquivos ZFS ser montado e, na verdade, vejo uma pasta /var/lib/docker criada no FS raiz.

Como posso garantir que o serviço Docker não inicie até que todos os sistemas de arquivos ZFS sejam montados?

    
por ItalyPaleAle 24.03.2018 / 20:39

1 resposta

3

Consegui resolver isso fazendo duas coisas. Note que apenas um pode ser suficiente.

Primeiro, diga explicitamente ao Docker para usar o ZFS como sistema de arquivos, escrevendo {"storage-driver": "zfs"} no arquivo /etc/docker/daemon.json . (Se o arquivo existir em seu disco, basta adicionar a chave do driver de armazenamento)

Em segundo lugar, crie a seguinte unidade systemd no arquivo /etc/systemd/system/docker-wait-zfs.service :

[Unit]
Description=Wait for ZFS before starting Docker
RequiredBy=docker.service
Before=docker.service
Requires=zfs.target
After=zfs.target

[Service]
Type=oneshot
ExecStart=/bin/true
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Em seguida, execute:

systemctl enable docker-wait-zfs.service
    
por 11.06.2018 / 09:14