Как изменить каталог установки образа docker?



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

1371   16  

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 в docker 1.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

    Ничего не найдено.