Como dizer ao Docker para armazenar e executar contêineres em uma unidade externa

Estou executando o Docker no Ubuntu Linux. Eu tenho um Dockerfile isso traz muitos dados de outros lugares. Eu coloquei o Dockerfile em uma unidade externa que eu montei para o sistema de arquivos local (ext4). Então eu executei a compilação de dentro desse sistema de arquivos de unidade externa.

docker build -t mycontainer .

Eu assisti o uso da unidade enquanto o contêiner estava construindo. Todo o uso da unidade estava no sistema de arquivos raiz em vez da unidade anexada.

Eu li alguns artigos sobre como alterar a raiz/base do Docker de /var/lib/docker para outro local, mas até agora tudo o que recebo é docker.service: Failed with result 'exit-code'.

Eu também tentei adicionar o -g options no /lib/systemd/system/docker.service arquivo:

ExecStart=/usr/bin/dockerd -H fd://  # originalExecStart=/usr/bin/dockerd -g /new/path/docker -H fd://  # updated

Isso também não ajudou.

Como posso dizer ao Docker para usar a unidade externa?

Várias coisas me ajudaram a fazer isso funcionar. Primeiro, eu estava montando o sistema de arquivos externo em um diretório inicial, que pode estar causando alguns problemas de permissões. Então eu remontei o sistema de arquivos em /mnt e permissões atualizadas e propriedade da seguinte forma:

# chown -R root:root /mnt/external-drive/docker-base# chmod 701 /mnt/external-drive/docker-base

Então eu criei o /etc/docker/daemon.json arquivo com estes conteúdos:

{    "graph": "/mnt/external-drive/docker-base"}

Reiniciei o serviço docker e tudo parece estar bem. Fazendo um docker build e a unidade externa está recebendo todo o conteúdo.