Как изменить местоположение контейнера-док-станции по умолчанию?

Когда я запускаю докер, загружаются изображения докеров (как представляется,) в /var/lib/docker где-то.

Поскольку дисковое пространство ограничено в этом каталоге, и я предоставляю докер нескольким машинам сразу; есть ли способ изменить это местоположение по умолчанию на ie /mnt/hugedrive/docker/?

Ответы

Ответ 1

Вы можете запустить демон Docker, используя -g и каталог по вашему выбору. Это устанавливает подходящее время выполнения для Docker.

С версией 1.8 это должно быть что-то вроде:

docker daemon -g /path/to/directory

С более ранними версиями это было бы:

docker -d -g /path/to/directory

На странице руководства:

-g, --graph=""
     Path to use as the root of the Docker runtime. Default is /var/lib/docker.

Ответ 2

Рабочий раствор от Docker v18.03

Я нашел комментарий @Alfabravo, чтобы работать в моей ситуации, так что кредит им и проголосовал.

Тем не менее, я думаю, что здесь есть смысл дать ответ, чтобы уточнить его:

Убедитесь, что докер остановлен (или не запущен изначально, например, если вы только что установили его)

(например, как пользователь root):

systemctl stop docker

(или вы можете использовать sudo systemctl stop docker если не root, но ваш пользователь - sudo -er, т.е. принадлежит к группе sudo)

По умолчанию файл daemon.json не существует, поскольку он является необязательным - он добавляется для переопределения значений по умолчанию. (Ссылка - см. Ответ: Где докер deamon.json? (Отсутствует))

Таким образом, у новых установок docker и тех установок, которые никогда не изменяли его, его не будет, поэтому создайте его:

vi /etc/docker/daemon.json

И добавьте следующее, чтобы указать docker поместить все свои файлы в эту папку, например:

{
  "graph":"/mnt/cryptfs/docker"
}

и сохранить.

Теперь запустите Docker:

systemctl start docker

(если root или префикс с sudo если другой пользователь.)

И вы обнаружите, что docker теперь поместил все свои файлы в новое место, в моем случае, в: /mnt/cryptfs/docker.

Этот ответ от @Alfabravo также поддерживается: Этот ответ на эту проблему: флаги демона Docker игнорируются

Заметки и мысли о версии Docker

Моей хост-платформой, на которой работает докер, является Ubuntu Linux 16.04.4 LTS 64bit.

Поэтому я бы предположил, что это решение будет применяться к более поздним, будущим версиям Docker, а также к текущему времени написания, v18.03. Другими словами: "это решение должно работать начиная с 18.03 и далее". Как и в случае с другими ответами, существует также вероятность того, что этот ответ может не сработать для какой-либо будущей версии Docker, если разработчики Docker решат что-то изменить в этой области. Но сейчас он работает с v18.03, по крайней мере, в моем случае, я надеюсь, вы также найдете его для вас.

Дополнительный хозяйственный совет:

Если у вас были файлы в исходном расположении /var/lib/docker и вы сами знаете, что они вам определенно больше не нужны (т.е. у вас есть все данные (базы данных внутри контейнеров, файлы и т.д.) В них, резервная копия или в другой форме), вы можете удалить их, чтобы сохранить вашу машину в порядке.

Что не сработало - другие ответы здесь (к сожалению):

Другие решения здесь не работали для моей ситуации с текущей версией докера, которую я использую (на момент написания текущей версией докера была: Docker v18.03 (текущая версия)).

Также обратите внимание (как @AlfaBravo правильно указывает в своем комментарии к моему ответу), что другие ответы вполне могли сработать для других или более ранних версий докера.

Должен отметить, что моей хост-платформой является Ubuntu Linux 16.04.4 LTS 64bit.

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

  • fooobar.com/questions/10594179/... - решение @Gerald Sabu M для изменения /lib/systemd/system/docker.service - /lib/systemd/system/docker.service строку на: ExecStart=/usr/bin/docker daemon -g/mnt/hugedrive/docker/ - Результат для меня: docker по-прежнему помещает свои файлы в исходное местоположение по умолчанию: /var/lib/docker

  • Я попробовал @Fai комментарий, но этот файл не существует в моей системе, поэтому это было бы что-то особенное для их настройки: /etc/systemd/system/docker.service.d/exec_start.conf. docker.service /etc/systemd/system/docker.service.d/exec_start.conf. docker.service

  • Я также попытался ответить @Hatem Jaber fooobar.com/questions/10594179/... - но опять же, как и ответ @Gerald Sabu M, docker по-прежнему помещает файлы в исходное расположение по умолчанию /var/lib/docker.

(Я, конечно, хотел бы поблагодарить их за их усилия, хотя).

Почему я меняю расположение докера по умолчанию: зашифрованная файловая система для целей GDPR:

Кроме того, и, возможно, полезно для вас, я запускаю докер внутри зашифрованной файловой системы (как часть инициативы GDPR), чтобы обеспечить состояние данных Encryption of Data-at-Rest (также известное как Encryption-at-Rest).), а также для данных в использовании) (определения). Процесс определения карты данных GDPR включает в себя, помимо прочего, рассмотрение систем, в которых хранятся конфиденциальные данные (Ссылка 1: Шаблон карты данных GDPR: простой в использовании инструмент самооценки для понимания того, как данные перемещаются по вашей организации) (Ссылка 2: Отображение данных: с чего начать для соблюдения GDPR). А зашифровав файловую систему, в которой хранится код базы данных и приложения, а также файл подкачки, можно исключить риск оставшихся данных при удалении или перемещении виртуальной машины. Я воспользовался некоторыми шагами, определенными в следующих ссылках, спасибо им:

Ответ 3

Вы можете выполнить следующие шаги, чтобы изменить местоположение изображения докере по умолчанию, то есть /var/lib/docker: -

  1. Остановить докер

    # systemctl stop docker
    # systemctl daemon-reload
    
  2. Добавьте в /lib/systemd/system/docker.service следующие параметры.

    FROM:
    ExecStart=/usr/bin/dockerd
    TO:
    ExecStart=/usr/bin/docker daemon -g /mnt/hugedrive/docker/
    
  3. Создайте новый каталог и rsync текущие данные докеров в новый каталог.

    # mkdir /mnt/hugedrive/docker/
    # rsync -aqxP /var/lib/docker/ /mnt/hugedrive/docker/
    
  4. Теперь Docker Daemon можно безопасно запускать

    # systemctl start docker
    

Ответ 4

В /etc/default/docker или в любом другом месте, которое оно существует в вашей системе, измените следующее на следующее:

DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.8.4 -g /drive/location

Если у вас есть проблемы, и он игнорируется, примените это решение: Docker Opts in Etc Default Docker Ignored