Из того, что я могу сказать, образы докеров устанавливаются по /var/lib/dockerмере их извлечения. Есть ли способ изменить это местоположение, например, на смонтированный том, как /mnt?
В более старых версиях вы можете изменить базовый каталог хранилища Docker (куда идут контейнер и образы), используя -gопцию при запуске демона Docker. (проверьте docker --help). Вы можете применить этот параметр автоматически при запуске Docker, добавив его в / etc / default / docker
Я думаю, что лучшее решение - добавить эту -gопцию в / etc / defaults / docker вместо изменения файла Upstart, см. Мой ответ.
Мбартелеми
9
Да, измените эту строку наDOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
mbarthelemy
6
Не работает в Fedora. Смотрите мой ответ, если ваш дистрибутив - Fedora
Vitor
3
Возможно, вам понадобится реализовать это решение для устранения ошибки в некоторых версиях Debian или Ubuntu, если docker игнорирует ваш /etc/default/dockerфайл.
Следуя советам из комментариев, я использую документацию Docker для улучшения этого ответа. Приведенная ниже процедура не требует перезагрузки и намного чище.
Сначала создайте каталог и файл для пользовательской конфигурации:
Я недавно попробовал описанную выше процедуру с 17.09-ce на Fedora 25, и она, похоже, не работает. Вместо этой простой модификации /etc/docker/daemon.jsonсделайте свое дело:
{
"graph": "/mnt",
"storage-driver": "overlay"
}
Несмотря на метод, вы должны перезагрузить конфигурацию и перезапустить Docker:
Это единственный метод, который помог мне в Ubuntu 16.04!
Вадим
1
Эта ссылка docs.docker.com/engine/admin/systemd объясняет, как настроить Docker для systemd, который работает для более новых дистрибутивов Linux, таких как Ubuntu 16.04.
Джозеф Хуэй,
6
docker infoЗаявление, вероятно , устарели. В Ubuntu 16.04, проверка на Реконфигурированный есть sudo docker info | grep "Docker Root Dir". В противном случае, хороший ответ, должен быть принят;)
Гийом Перро
5
В новых версиях Linux (4.10) и Docker (docker-ce 17.06) строка должна быть изменена следующим образом: / usr / bin / dockerd -H fd: // --data-root = "/ mnt"
lorenzo-bettini
2
Если вы видите , Docker Root Dir: /"/mnt"когда вы работаете docker info|grep "Docker Root Dir", вы должны заменить --data-root="/mnt"в --data-root=/mntвнутри файлаdocker-storage.conf
Я думаю, что пришло время дать этому ответу флаг «принято», потому что он работает в текущей версии.
Bndr
Я комментирую здесь, чтобы люди знали, какая версия могла бы использовать это, после того, как github.com/docker/docker.github.io/pull/5978 выпустит, Это изменит официальный сайт.
Чжунцзяцзе
Это сработало и для меня, спасибо :)
Aashay Amballi
39
Поскольку я не нашел правильных инструкций для этого в Fedora (РЕДАКТИРОВАТЬ: люди указывали в комментариях, что это также должно работать на CentOS и Suse) (/ etc / default / docker там не используется), я добавляю свой ответ здесь:
Вы должны отредактировать / etc / sysconfig / docker и добавить опцию -g в переменную OPTIONS. Если есть несколько вариантов, убедитесь, что вы заключили их в "". В моем случае этот файл содержал:
OPTIONS=--selinux-enabled
так стало бы
OPTIONS="--selinux-enabled -g /mnt"
После перезапуска ( systemctl restart docker) Docker должен использовать новый каталог
В CentOS 6.5 / 6.6 и, вероятно, 7 вы используете тот же файл / etc / sysconfig / docker, но добавляете аргументы к имени переменной other_args.
Dlaidlaw
Опция теперь называется DOCKER_OPTS (версия Docker 1.7.0).
Недим
6
Начиная с версии 1.8 Docker, использование файлов конфигурации Docker в / etc / sysconfig не рекомендуется. Вместо этого вы должны использовать системные конфигурационные файлы в файле etc / systemd / system / docker.service.d. После добавления или изменения раскрывающегося файла во время работы службы Docker выполните команду systemctl daemon-reload, чтобы сообщить systemd о необходимости перезагрузить конфигурацию для службы. docs.oracle.com/cd/E52668_01/E54669/html/…
Не используйте символическую ссылку для перемещения папки Docker в / mnt (например). Это может вызвать проблемы с командой docker rm .
Лучше использовать опцию -g для докера. В Ubuntu вы можете установить его постоянно в /etc/default/docker.io. Расширьте или замените строку DOCKER_OPTS.
Вот пример: `DOCKER_OPTS =" - g / mnt / где-то / else / docker / "
мой случай: centos7, последний докер; мне пришлось вызвать «systemctl status docker», чтобы найти файл «docker.service» и добавить опцию «-g», как в ответе. Спасибо
Для Debian / Ubuntu или Fedora вы, вероятно, можете использовать другие ответы. Но если у вас нет файлов в разделе /etc/default/dockerили /etc/sysconfig/docker, и ваша система работает под управлением systemd, вы можете захотеть следовать этому ответу h3nrik . Я использую Arch, и это работает для меня.
По сути, вам нужно сконфигурировать systemd для чтения нового расположения образа докера в качестве переменной среды и передачи этой переменной среды в скрипт выполнения демона Docker.
Для полноты вот ответ h3nrick:
У вас есть /lib/systemd/system/docker.serviceфайл?
Если это так, отредактируйте его так, чтобы служба Docker использовала обычный /etc/default/dockerфайл среды:EnvironmentFile=-/etc/default/docker .
В /etc/default/dockerфайл потом добавь DOCKER_OPTS="-g /home/rseixas/Programs/Docker/images".
В конце просто сделай systemctl daemon-reload && systemctl restart docker.
Для получения дополнительной информации, пожалуйста, ознакомьтесь с документацией .
Не создавайте мягкую ссылку. Причины видят мой комментарий, который я публикую раньше ... У вас могут возникнуть проблемы с командами 'docker rm'!
Süther
2
@suther: май? Есть ли ситуация, когда у вас проблемы или нет? Может быть, немного неточно для технической документации, если я столкнусь с проблемой, то я хочу узнать, когда именно это происходит, как эта проблема вызывается и каков будет результат.
Хакре
4
Как рекомендует @mbarthelemy, это можно сделать с помощью -gопции при непосредственном запуске демона docker.
Однако, если docker запускается как системная служба, изменять /etc/default/dockerфайл не рекомендуется . Существует руководство по этому расположению здесь .
Правильный подход заключается в создании /etc/docker/daemon.jsonфайла в системах Linux (или Mac) или %programdata%\docker\config\daemon.jsonв Windows. Если этот файл не используется для чего-либо еще, должно быть достаточно следующих полей:
{
"graph": "/docker/daemon_files"
}
Предполагается, что новое местоположение, в котором вы хотите, чтобы докер сохранил свои данные: /docker/daemon_files
В Fedora 26 и, возможно, во многих других версиях вы можете столкнуться с ошибкой после перемещения расположения базовой папки, как описано выше. Это особенно верно, если вы перемещаете его куда-то в / home. Это связано с тем, что SeLinux запускает и предотвращает запуск многих своих программ из этого местоположения в контейнере Docker.
Короткое решение - удалить опцию --enable-selinux при добавлении параметра -g.
На сервере AWS Ubuntu 16.04 я помещаю образы Docker в отдельный EBS, смонтированный в / home / ubuntu / kaggle /, в директории docker
Этот фрагмент моего скрипта инициализации работал правильно
# 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 /programming/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
Для пользователей Mac в версии 17.06.0-ce-mac19 вы можете просто переместить расположение образа диска из пользовательского интерфейса в параметре настроек. Просто измените расположение образа диска, и он будет работать (нажав « Переместить образ диска» ) и перезапустив его. докер Используя этот подход, я смог использовать свой внешний жесткий диск для хранения образов докера.
Ответы:
В последних версиях Docker вы можете установить значение
data-root
параметра в свой собственный путь в/etc/docker/daemon.json
(в соответствии с https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file ).В более старых версиях вы можете изменить базовый каталог хранилища Docker (куда идут контейнер и образы), используя
-g
опцию при запуске демона Docker. (проверьтеdocker --help
). Вы можете применить этот параметр автоматически при запуске Docker, добавив его в / etc / default / dockerисточник
-g
опцию в / etc / defaults / docker вместо изменения файла Upstart, см. Мой ответ.DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
/etc/default/docker
файл.graph
Атрибутом в daemon.json является устаревшим v17.05.0, использоватьdata-root
вместо этого, ср stackoverflow.com/a/50217666/743507Следуя советам из комментариев, я использую документацию Docker для улучшения этого ответа. Приведенная ниже процедура не требует перезагрузки и намного чище.
Сначала создайте каталог и файл для пользовательской конфигурации:
Для версии докера до 17.06-й пасты:
Для докера после 17.06-й пасты:
Альтернативный метод через
daemon.json
Я недавно попробовал описанную выше процедуру с 17.09-ce на Fedora 25, и она, похоже, не работает. Вместо этой простой модификации
/etc/docker/daemon.json
сделайте свое дело:Несмотря на метод, вы должны перезагрузить конфигурацию и перезапустить Docker:
Чтобы подтвердить, что Docker был перенастроен:
В последней версии (17.03) требуется другая команда:
Вывод должен выглядеть так:
Или:
Тогда вы можете безопасно удалить старое хранилище Docker:
источник
docker info
Заявление, вероятно , устарели. В Ubuntu 16.04, проверка на Реконфигурированный естьsudo docker info | grep "Docker Root Dir"
. В противном случае, хороший ответ, должен быть принят;)Docker Root Dir: /"/mnt"
когда вы работаетеdocker info|grep "Docker Root Dir"
, вы должны заменить--data-root="/mnt"
в--data-root=/mnt
внутри файлаdocker-storage.conf
Для новых версий докеров мы должны использовать
data-root
какgraph
устарело в v17.05.0: официальные устаревшие документыОтредактируйте
/etc/docker/daemon.json
(если он не существует, создайте его) и включите:Затем перезапустите Docker с помощью:
источник
Поскольку я не нашел правильных инструкций для этого в Fedora (РЕДАКТИРОВАТЬ: люди указывали в комментариях, что это также должно работать на CentOS и Suse) (/ etc / default / docker там не используется), я добавляю свой ответ здесь:
Вы должны отредактировать / etc / sysconfig / docker и добавить опцию -g в переменную OPTIONS. Если есть несколько вариантов, убедитесь, что вы заключили их в "". В моем случае этот файл содержал:
так стало бы
После перезапуска (
systemctl restart docker
) Docker должен использовать новый каталогисточник
Не используйте символическую ссылку для перемещения папки Docker в / mnt (например). Это может вызвать проблемы с командой docker rm .
Лучше использовать опцию -g для докера. В Ubuntu вы можете установить его постоянно в /etc/default/docker.io. Расширьте или замените строку DOCKER_OPTS.
Вот пример: `DOCKER_OPTS =" - g / mnt / где-то / else / docker / "
источник
docker rm
при использовании символической ссылки?Ubuntu 16.04
stackoverflow.com/a/30219552/977622, чтобы заставить его работатьНамного проще сделать это:
Остановить службу докера
Переместить существующий каталог докеров в новое место
Создать символическую ссылку
Запустить сервис Docker
источник
sudo ln -s /path/to/new/docker/ /var/lib/docker
Это решение работает на Red Hat 7.2 и Docker 1.12.0
Отредактируйте файл /lib/systemd/system/docker.service в своем текстовом редакторе.
добавьте -g / path / to / docker / в конце директивы ExecStart . Полная строка должна выглядеть следующим образом.
Выполните следующую команду
Выполните команду, чтобы проверить каталог докера
Если у вас есть файл / etc / sysconfig / docker в Red Hat или docker 1.7.1, проверьте этот ответ.
источник
Скопируйте и вставьте версию ответа победителя :)
Создайте этот файл только с этим содержимым:
$ sudo vi /etc/docker/daemon.json
Проверено
Ubuntu 16.04.2 LTS
в докере1.12.6
источник
graph
Атрибутом в daemon.json является устаревшим v17.05.0, использоватьdata-root
вместо этого, ср stackoverflow.com/a/50217666/743507В CentOS 6.5
добавить следующую строку
затем сохраните файл и снова запустите Docker
и сделает файл репозитория в
/data/docker
источник
Для Debian / Ubuntu или Fedora вы, вероятно, можете использовать другие ответы. Но если у вас нет файлов в разделе
/etc/default/docker
или/etc/sysconfig/docker
, и ваша система работает под управлением systemd, вы можете захотеть следовать этому ответу h3nrik . Я использую Arch, и это работает для меня.По сути, вам нужно сконфигурировать systemd для чтения нового расположения образа докера в качестве переменной среды и передачи этой переменной среды в скрипт выполнения демона Docker.
Для полноты вот ответ h3nrick:
У вас есть
/lib/systemd/system/docker.service
файл?Если это так, отредактируйте его так, чтобы служба Docker использовала обычный
/etc/default/docker
файл среды:EnvironmentFile=-/etc/default/docker
.В
/etc/default/docker
файл потом добавьDOCKER_OPTS="-g /home/rseixas/Programs/Docker/images"
.В конце просто сделай
systemctl daemon-reload && systemctl restart docker
.Для получения дополнительной информации, пожалуйста, ознакомьтесь с документацией .
источник
Гораздо более простое решение - создать мягкую ссылку на то, что вы хотите, например,
Это работает для меня на моем сервере CentOS 6.5.
источник
Как рекомендует @mbarthelemy, это можно сделать с помощью
-g
опции при непосредственном запуске демона docker.Однако, если docker запускается как системная служба, изменять
/etc/default/docker
файл не рекомендуется . Существует руководство по этому расположению здесь .Правильный подход заключается в создании
/etc/docker/daemon.json
файла в системах Linux (или Mac) или%programdata%\docker\config\daemon.json
в Windows. Если этот файл не используется для чего-либо еще, должно быть достаточно следующих полей:Предполагается, что новое местоположение, в котором вы хотите, чтобы докер сохранил свои данные:
/docker/daemon_files
источник
На openSUSE Leap 42.1
Обратите внимание, что DOCKER_OPTS изначально был пуст, и все, что я сделал, это добавил в аргумент, чтобы докер использовал мой новый каталог
источник
В Fedora 26 и, возможно, во многих других версиях вы можете столкнуться с ошибкой после перемещения расположения базовой папки, как описано выше. Это особенно верно, если вы перемещаете его куда-то в / home. Это связано с тем, что SeLinux запускает и предотвращает запуск многих своих программ из этого местоположения в контейнере Docker.
Короткое решение - удалить опцию --enable-selinux при добавлении параметра -g.
источник
На сервере AWS Ubuntu 16.04 я помещаю образы Docker в отдельный EBS, смонтированный в / home / ubuntu / kaggle /, в директории docker
Этот фрагмент моего скрипта инициализации работал правильно
источник
Для пользователей Mac в версии 17.06.0-ce-mac19 вы можете просто переместить расположение образа диска из пользовательского интерфейса в параметре настроек. Просто измените расположение образа диска, и он будет работать (нажав « Переместить образ диска» ) и перезапустив его. докер Используя этот подход, я смог использовать свой внешний жесткий диск для хранения образов докера.
источник