Как изменить расположение по умолчанию для команды docker create volume?

При создании томов через Volume API, то есть, поскольку шаблон тома контейнера теперь не обязательно является лучшей практикой:

# docker volume inspect test-data
[
    {
        "Name": "test-data",
        "Driver": "local",
        "Mountpoint": "/var/lib/docker/volumes/test-data/_data"
    }
]

Я хотел бы, например, чтобы тома докеров существовали в /data (которые смонтированы в другом физическом томе).

Это невозможно сделать с символическими ссылками, это можно сделать с помощью привязки, но мне интересно, есть ли в Docker какая-то конфигурация для изменения местоположения по умолчанию для каждого отдельного тома.


person dukeofgaming    schedule 15.03.2016    source источник
comment
Я сделал это с помощью символической ссылки: # cd /var/lib/docker/volumes # ln -s /mnt/myvolume myvolume, а затем создал том и запустил образ докера: # docker volume create --name myvolume # docker run -v myvolume:/myvolumemountpoint ...   -  person DoctorBug    schedule 17.06.2016
comment
использование символической ссылки похоже работает нормально, но тогда вы не можете удалить том, поскольку docker не позволит удалить том, если он не является подкаталогом data_root. (очевидно, docker разрешает символическую ссылку для томов.)   -  person go2null    schedule 26.11.2019
comment
относится к комментарию выше (о невозможности удалить тома, находящиеся по символической ссылке): github.com/moby /moby/issues/39446   -  person Sergey Grechin    schedule 21.04.2020


Ответы (4)


Вы можете указать, где Docker хранит свои файлы, включая тома, изменив один из его параметров запуска позвонил --data-root.

Если вы используете systemd для управления службами, файл обычно находится по адресу /lib/systemd/system/docker.service. Отредактируйте файл следующим образом:

# Old - taken from the generated docker.service file in Ubuntu 16.04's docker.io package
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS

# New
ExecStart=/usr/bin/dockerd --data-root /new_location/ -H fd:// $DOCKER_OPTS

Кроме того, вы можете отредактировать файл конфигурации демона Docker, который по умолчанию имеет значение /etc/docker/daemon.json.

Перезапустите демон Docker, и ваши тома будут меньше /new_location/volumes/{volume_name}/_data.

Примечание: будьте осторожны в производстве, а также локально! Вам также необходимо переместить существующие данные из /var/lib/docker/ в новое место, чтобы ваша установка Docker работала должным образом.

Вы можете использовать символические ссылки из нового местоположения, если хотите, чтобы определенные папки находились в определенном месте.

person Hugo R    schedule 25.08.2018
comment
Параметр --data-root перемещает все постоянные данные в указанный каталог, включая данные контейнера, данные изображения и т. д. Было бы неплохо иметь возможность указать каталог, в который помещаются тома, чтобы отделить пользовательские данные от докера. данные внутреннего состояния. - person Sebastian; 19.12.2020

2017: с 17.05.0-ce (2017-05-04), PR 28696 отменяет флаг --graph в пользу или --data-root: коммит 1ecaed0

Имя graph — это устаревший термин, который использовался давным-давно, когда в местоположении по умолчанию /var/lib/docker/graph был каталог.

Однако флаг указывает путь к родительскому каталогу каталога graph, который содержит не только данные изображений, но также данные для томов, контейнеров и сетей.
В самой последней версии docker этот каталог также содержит swarm состояние кластера и сертификаты узлов.

С выпуском 5922 и PR 5978 документация обновлена.

Пример:

ExecStart=/usr/bin/dockerd -H fd:// --data-root=/mnt/ssd/lib/docker

2016 (устарело)

Я знаю только вариант докера для изменения самого /var/lib/docker, а не его подпапок (часть его график, используемый драйвером хранилища демона docker)

См. разные параметры демона docker:

Docker поддерживает программные ссылки для каталога данных Docker (/var/lib/docker) и для /var/lib/docker/tmp.
Каталог DOCKER_TMPDIR и data можно настроить следующим образом:

DOCKER_TMPDIR=/mnt/disk2/tmp /usr/local/bin/docker daemon -D -g /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log 2>&1
# or
export DOCKER_TMPDIR=/mnt/disk2/tmp
/usr/local/bin/docker daemon -D -g /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log

Как упоминалось в разделе Где хранятся образы докеров на хост-компьютере? (и это применимо также к контейнерам/томам):

Содержимое каталога /var/lib/docker зависит от на драйвере. Docker использует для хранения.

person VonC    schedule 24.03.2016

Я успешно переместил место хранения докера, переместив содержимое /var/lib/docker в новое место, а затем поместив символическую ссылку, указывающую на новое место (я взял это решение отсюда https://askubuntu.com/questions/631450/change-data-directory-of-docker):

Внимание. Эти шаги зависят от того, является ли ваш текущий /var/lib/docker фактическим каталогом (а не символической ссылкой на другое место).

1) Остановить докер: service docker stop. Убедитесь, что не запущен ни один процесс докера: ps aux | grep -i [d]ocker

2) Двойная проверка докера действительно не работает. Взгляните на текущий каталог докеров: ls /var/lib/docker/

2b) Сделать резервную копию - tar -zcC /var/lib docker > /mnt/pd0/var_lib_docker-backup-$(date +%s).tar.gz

3) Переместите каталог /var/lib/docker в новый раздел: mv /var/lib/docker /mnt/pd0/docker

4) Сделать симлинк: ln -s /mnt/pd0/docker /var/lib/docker

5) Взгляните на структуру каталогов, чтобы убедиться, что она выглядит так, как это было до mv: ls /var/lib/docker/ (обратите внимание на косую черту в конце)

6) Запустите резервную копию докера service docker start

7) перезапустите свои контейнеры (разрешите символическую ссылку)

У меня работало на Ubuntu 18.04.1 LTS на виртуальной машине Azure с Docker 18.09.2

person Codev    schedule 27.02.2019

Если вы используете Fedora (проверено на 32), просто измените или добавьте флаг --data-root с нужным путем к переменной OPTIONS на /etc/sysconfig/docker, это файл среды, используемый systemd для запуска службы dockerd.

person Marcelo R.    schedule 25.09.2020