16 ответов:
С последними версиями Docker, вы бы установить значение
graphпараметр для вашего пользовательского пути, в/etc/docker/daemon.json(согласно https://docs.docker.com/v1.11/engine/reference/commandline/daemon/#daemon-configuration-file).С более старыми версиями вы можете изменить базовый каталог хранилища Docker (куда идут контейнер и изображения) с помощью
-gопция при запуске демона Docker. (проверьтеdocker --help). Этот параметр можно применить автоматически, если Докер начинает с добавления его в / etc / default / docker
следуя советам из комментариев я использую документация Docker systemd улучшить этот ответ. Ниже процедура не требует перезагрузки и намного чище.
создать каталог и файл для пользовательской конфигурации:
sudo mkdir -p /etc/systemd/system/docker.service.d sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.confдля версии docker до 17.06-ce вставить:
[Service] ExecStart= ExecStart=/usr/bin/docker daemon -H fd:// --graph="/mnt"для Docker после 17.06-ce вставить:
[Service] ExecStart= ExecStart=/usr/bin/dockerd -H fd:// --data-root="/mnt"альтернативный метод через
daemon.jsonя недавно пробовал выше процедуру с 17.09-ce в Fedora 25 и это, кажется, не работает. Вместо этой простой модификации в
/etc/docker/daemon.jsonсделать трюк:{ "graph": "/mnt", "storage-driver": "overlay" }несмотря на метод, вы должны перезагрузить конфигурацию и перезапустить Docker:
sudo systemctl daemon-reload sudo systemctl restart dockerчтобы подтвердить, что Docker была изменена:
docker info|grep "loop file"в последней версии (17.03) требуется другая команда:
docker info|grep "Docker Root Dir"выход должен выглядит так:
Data loop file: /mnt/devicemapper/devicemapper/data Metadata loop file: /mnt/devicemapper/devicemapper/metadataили:
Docker Root Dir: /mntтогда вы можете безопасно удалить старый Докер хранения:
rm -rf /var/lib/docker
поскольку я не нашел правильных инструкций для этого в Fedora (EDIT: люди указали в комментариях, что это также должно работать на CentOS и Suse) (/etc/default/docker там не используется), я добавляю свой ответ здесь:
редактирование / etc/sysconfig / docker, и добавьте параметр-g в переменную OPTIONS. Если есть несколько вариантов, убедитесь, что вы заключаете их в "". В моем случае этот файл содержал:
OPTIONS=--selinux-enabledтак это было стань
OPTIONS="--selinux-enabled -g /mnt"после перезагрузки (
systemctl restart docker) , Докер должен использовать новый каталог
Не используйте символическую ссылку для перемещения папки docker в /mnt (например). Это может вызвать проблемы с docker rm.
лучше использовать опцию-g для docker. На Ubuntu вы можете установить его постоянно в /etc/default / docker.io. Enhance или заменить строку DOCKER_OPTS.
вот пример: 'DOCKER_OPTS=" -g/mnt/somewhere/else/docker/"
В CentOS 6.5
service docker stop mkdir /data/docker (new directory) vi /etc/sysconfig/dockerдобавить следующую строку
other_args=" -g /data/docker -p /var/run/docker.pid"затем сохраните файл и снова запустите docker
service docker startи сделает файл репозитория в
/data/docker
Это решение работает на Red Hat 7.2 & Docker 1.12.0
редактировать файл / lib/systemd/system / docker.сервис в текстовом редакторе.
добавить - g / path / to / docker/ в конце ExecStart
копировать и вставлять версию ответа победителя:)
создайте этот файл только с этим содержимым:
$ sudo vi/etc/docker / daemon.json
{ "graph": "/my-docker-images" }проверено на
Ubuntu 16.04.2 LTSв docker1.12.6
настройки для новых версий нужно использовать
data-rootкак от чиновника устаревшие документы(устарело в версии: В17.05.0){ "data-root": "/new/path/to/docker-data" }
- изменение хранилища докеров с помощью data-root: мое самое полезное Post С шагами, чтобы следовать
- в случае Windows аналогичный пост Windows specific
для Debian / Ubuntu или Fedora вы, вероятно, можете использовать другие ответы. Но если у вас нет файлов под
/etc/default/dockerили/etc/sysconfig/docker, и ваша система работает systemd, вы можете следовать этот ответ от h3nrik. Я использую Arch, и это работает для меня.в принципе, вам нужно настроить systemd для чтения нового местоположения образа docker в качестве переменной среды и передать эту переменную среды в сценарий выполнения демона Docker.
для полнота, вот ответ h3nrick:
у вас есть ?
если это так, отредактируйте его так, чтобы служба Docker использовала обычный
/etc/default/dockerкак файл среды:EnvironmentFile=-/etc/default/docker.на затем добавить
DOCKER_OPTS="-g /home/rseixas/Programs/Docker/images".в конце просто сделать
systemctl daemon-reload && systemctl restart docker.для получения дополнительной информации, пожалуйста, обратите внимание на документация.
гораздо более простое решение-создать мягкую ссылку на все, что вы хотите, например
link -s /var/lib/docker /mnt/whateverон работает для меня на моем сервере CentOS 6.5.
как рекомендовано @mbarthelemy это можно сделать через
-gопция при непосредственном запуске демона docker.однако, если docker запускается как системная служба, не рекомендуется изменять . Существует руководство к этому расположен здесь.
правильный подход заключается в создании
/etc/docker/daemon.jsonфайл в системах Linux (или Mac) или%programdata%\docker\config\daemon.jsonна Windows. Если этот файл не используется ни для чего другого, следующее полей должно хватить:{ "graph": "/docker/daemon_files" }это предполагает, что новое место, где вы хотите, чтобы docker сохранял свои данные,
/docker/daemon_files
на сервере AWS Ubuntu 16.04 я помещаю изображения Docker на отдельный EBS, установленный на /home / ubuntu / kaggle/, под Docker dir
этот фрагмент моего скрипта инициализации корректно работал
# where are the images initially stored? sudo docker info | grep "Root Dir" # ... not where I want them # modify the configuration files to change to image location # NOTE this generates an error # WARNING: Usage of loopback devices is strongly discouraged for production use. # Use `--storage-opt dm.thinpooldev` to specify a custom block storage device. # see https://stackoverflow.com/questions/31620825/ # warning-of-usage-of-loopback-devices-is-strongly-discouraged-for-production-use sudo sed -i ' s@#DOCKER_OPTS=.*@DOCKER_OPTS="-g /home/ubuntu/kaggle/docker"@ ' /etc/default/docker sudo chmod -R ugo+rw /lib/systemd/system/docker.service sudo cp /lib/systemd/system/docker.service /etc/systemd/system/ sudo chmod -R ugo+rw /etc/systemd/system/ sudo sed -i ' s@ExecStart.*@ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd://@ ' /etc/systemd/system/docker.service sudo sed -i '/ExecStart/a EnvironmentFile=-/etc/default/docker' /etc/systemd/system/docker.service sudo systemctl daemon-reload sudo systemctl restart docker sudo docker info | grep "Root Dir" # now they're where I want them
на openSUSE Leap 42.1
$cat /etc/sysconfig/docker ## Path : System/Management ## Description : Extra cli switches for docker daemon ## Type : string ## Default : "" ## ServiceRestart : docker # DOCKER_OPTS="-g /media/data/installed/docker"обратите внимание, что DOCKER_OPTS изначально был пуст, и все, что я сделал, это добавить в аргумент, чтобы docker использовал мой новый каталог
в Fedora 26 и, вероятно, во многих других версиях вы можете столкнуться с ошибкой после перемещения местоположения базовой папки, как описано выше. Это особенно верно, если вы перемещаете его куда-то под /домой. Это связано с тем, что SeLinux запускает и не позволяет контейнеру docker запускать многие из своих программ из-под этого местоположения.
короткое решение состоит в том, чтобы удалить параметр --enable-selinux при добавлении параметра-G.
гораздо более простой способ сделать это:
остановить службу докеров
sudo systemctl stop dockerпереместить существующий каталог docker в новое место
sudo mv /var/lib/docker/ /path/to/new/docker/создать символическую ссылку
sudo ln -s /path/to/new/docker/ /var/lib/docker/Start docker service
sudo systemctl start docker
для пользователей Mac в версии 17.06.0-ce-mac19 вы можете просто переместить местоположение образа диска из пользовательского интерфейса в опции настроек просто измените местоположение образа диска, и он будет работать (нажав переместить образ диска) и перезагрузки настройки. Используя этот подход, я смог использовать свой внешний жесткий диск для хранения изображений docker.

Comments