Как указать Docker хранить и запускать контейнеры на внешнем диске

Я использую Docker на Ubuntu Linux. У меня есть Dockerfile это приводит к большому количеству данных из других источников. Я положил Dockerfile на внешнем диске, который я подключил к локальной файловой системе (ext4). Затем я запустил сборку из файловой системы этого внешнего диска.

docker build -t mycontainer .

Я наблюдал за использованием накопителя по мере создания контейнера. Все использование диска происходило в корневой файловой системе, а не на подключенном диске.

Я прочитал несколько статей об изменении корня / базы Docker с /var/lib/docker в другое место, но пока все, что я получаю, это docker.service: Failed with result 'exit-code'.

Я также попытался добавить -g options в /lib/systemd/system/docker.service файл:

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

Это тоже не помогло.

Как я могу сказать Docker использовать внешний диск?

Несколько вещей помогли мне заставить это работать. Во-первых, я монтировал внешнюю файловую систему в домашнем каталоге, что, возможно, вызывало некоторые проблемы с разрешениями. Поэтому я перемонтировал файловую систему под /mnt и обновленные разрешения и права собственности следующим образом:

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

Затем я создал /etc/docker/daemon.json файл с таким содержимым:

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

Я перезапустил службу docker, и, похоже, все в порядке. Делая docker build и внешний диск получает все содержимое.