З того, що я можу сказати, зображення докера встановлюються так, /var/lib/docker
як вони витягуються. Чи є спосіб змінити це місце, наприклад, на встановлену гучність, наприклад /mnt
?
З того, що я можу сказати, зображення докера встановлюються так, /var/lib/docker
як вони витягуються. Чи є спосіб змінити це місце, наприклад, на встановлену гучність, наприклад /mnt
?
Відповіді:
З останніми версіями Docker ви встановите значення data-root
параметра для вашого власного шляху в /etc/docker/daemon.json
(відповідно до https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file ).
Зі старими версіями ви можете змінити базовий каталог пам’яті Docker (куди йдуть контейнери та зображення), використовуючи -g
опцію під час запуску демона Docker. (чек docker --help
). Ви можете застосувати це налаштування автоматично, коли Докер починається, додавши його в / etc / default / docker
-g
опції до / etc / defaults / docker замість зміни файлу Upstart, дивіться мою відповідь.
DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
graph
Атрибутом в daemon.json є застарілим v17.05.0, використовувати data-root
замість цього, ср stackoverflow.com/a/50217666/743507
Дотримуючись поради від коментарів, я використовую системну документацію Docker для вдосконалення цієї відповіді. Наведена нижче процедура не вимагає перезавантаження та значно чистіша.
Спочатку створіть каталог та файл для власної конфігурації:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.conf
Для версії докера до вставки 17.06 :
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --graph="/mnt"
Для докера після 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 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
Тоді ви можете безпечно видалити старе зберігання Docker:
rm -rf /var/lib/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
(якщо його не існує, створіть його) та додайте:
{
"data-root": "/new/path/to/docker-data"
}
Потім перезапустіть Docker за допомогою:
sudo systemctl daemon-reload
sudo systemctl restart 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 для докера. У Ubuntu ви можете його постійно встановити в /etc/default/docker.io. Покращіть або замініть рядок DOCKER_OPTS.
Ось приклад: `DOCKER_OPTS =" - g / mnt / десь / ще / docker / "
docker rm
при використанні символьної посилання?
Ubuntu 16.04
stackoverflow.com/a/30219552/977622, щоб змусити його працювати
Зупиніть послугу докера
sudo systemctl stop docker
Перемістіть існуючий каталог докерів на нове місце
sudo mv /var/lib/docker/ /path/to/new/docker/
Створіть символічне посилання
sudo ln -s /path/to/new/docker/ /var/lib/docker
Запустіть послугу докера
sudo systemctl start docker
sudo ln -s /path/to/new/docker/ /var/lib/docker
Це рішення працює на Red Hat 7.2 та Docker 1.12.0
Відредагуйте файл /lib/systemd/system/docker.service у своєму текстовому редакторі.
в кінці директиви ExecStart додайте -g / path / до / docker / . Повна лінія повинна виглядати приблизно так.
ExecStart=/usr/bin/dockerd -g /path/to/docker/
Виконай нижче команду
systemctl daemon-reload
systemctl restart docker
Виконайте команду для перевірки докерного каталогу
docker info | grep "loop file\|Dir"
Якщо у вас є / etc / sysconfig / docker файл у Red Hat або docker 1.7.1, перевірте цю відповідь.
Скопіюйте та вставте версію відповіді переможця :)
Створіть цей файл лише з цим вмістом:
$ sudo vi /etc/docker/daemon.json
{
"graph": "/my-docker-images"
}
Тестували на Ubuntu 16.04.2 LTS
докер1.12.6
graph
Атрибутом в daemon.json є застарілим v17.05.0, використовувати data-root
замість цього, ср stackoverflow.com/a/50217666/743507
Для Debian / Ubuntu або Fedora, ймовірно, ви можете використовувати інші відповіді. Але якщо у вас немає файлів під /etc/default/docker
або /etc/sysconfig/docker
, і ваша система працює з системою, ви, можливо, захочете відповісти за цією відповіддю 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
.
Для отримання додаткової інформації також ознайомтеся з документацією .
Набагато простіше рішення - створити м'яку точку посилання на все, що завгодно, наприклад
link -s /var/lib/docker /mnt/whatever
Він працює для мене на моєму сервері CentOS 6.5.
Як рекомендує @mbarthelemy, це можна зробити за допомогою -g
опції при безпосередньому запуску демон- докера .
Однак якщо докер запускається як системна служба, не рекомендується змінювати /etc/default/docker
файл. Існує директива для цього знаходиться тут .
Правильний підхід полягає у створенні /etc/docker/daemon.json
файлу в системах Linux (або Mac) або %programdata%\docker\config\daemon.json
в Windows. Якщо цей файл не використовується ні для чого іншого, має бути достатньо таких полів:
{
"graph": "/docker/daemon_files"
}
Це припущення, що нове місце, де ви хочете, щоб докер зберігав його дані /docker/daemon_files
На 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 спочатку був порожнім, і все, що я робив, було додано в аргумент, щоб змусити докер використовувати мій новий каталог
У Fedora 26 та, ймовірно, у багатьох інших версіях ви можете зіткнутися з помилкою після переміщення місця розташування базової папки, як описано вище. Це особливо актуально, якщо ви переміщуєте його кудись під / додому. Це відбувається тому, що SeLinux запускає та заважає контейнеру docker запускати багато його програм з-під цього місця.
Коротке рішення полягає у видаленні параметра --enable-selinux, коли ви додаєте параметр -g.
На сервері 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 /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 ви можете просто перемістити розташування дискового зображення з інтерфейсу користувача у варіанті налаштувань. Просто змініть розташування зображення диска, і воно буде працювати (натиснувши кнопку Перемістити зображення диска ) та перезапустити докер. Використовуючи цей підхід, я зміг використовувати свій зовнішній жорсткий диск для зберігання зображень докера.