Запуск docker с USB-накопителя

Запуск docker с USB-накопителя

Я пытаюсь хранить свою конфигурацию Docker, образы, контейнеры и т. д. на внешнем хранилище. Следуя этому руководству https://www.howtogeek.com/devops/how-to-store-docker-images-and-containers-on-an-external-drive/

Я создал /etc/docker/daemon.json:

{
    "data-root": "/media/user/MYUSB/docker-data"
}

Но когда я подключаю свой USB-накопитель (MYUSB) и запускаю службу Docker, эта функция дает сбой.

$ sudo service docker start
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.

$ sudo dockerd --debug
INFO[2023-07-06T12:36:29.650356567+02:00] Starting up                                  
could not create or set daemon root permissions: /media/user/MYUSB/docker-data: chown /media/user/MYUSB/docker-data: operation not permitted

А если я перезагружу компьютер, служба вместо этого создаст новую чистую папку MYSUB для хранения данных, а система смонтирует мой реальный USB-накопитель как MYUSB1 (и не будет использовать его для хранения данных Docker).

Моя система монтирует мой usb-ключ, и разрешения установлены на user:user, а не root:root, так что, возможно, это отсюда. Но мне кажется любопытным, что служба docker (которая, как я предполагаю, запускается root) не может использовать хранилище user:user.

Если я попытаюсь вручную смонтировать usb с правами пользователя root. Папка /media/user/MYUSB, которую я создаю, установлена ​​на root:root, пока я не смонтирую в нее usb: ее владелец изменится на user:user.

Я немного сбит с толку, так как, похоже, я единственный, кто столкнулся с этой проблемой в Интернете, хотя на первый взгляд это не выглядит чем-то необычным.

решение1

Попробовав некоторые вещи, я пришел к выводу, что ваш USB-флеш-накопитель имеет FAT32 или другую файловую систему, которая не поддерживает разрешения POSIX. Вы не можете использовать такую ​​файловую систему с Docker. Но это еще не все!

Автоматически монтируемые файловые системы также не подходят для Docker, поскольку они монтируются с помощьюносуидинодев. Корневая файловая система Linux (которая обычно находится внутри образов Docker) не может быть правильно размещена на нем. Вы можете проверить это с помощью mount | grep media. (Автоматическое монтирование обычно работает с помощьюudisks2в эти дни.)

Во-первых, вам следует поместить соответствующую файловую систему на ваш флэш-накопитель (например,ext4).

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

SUBSYSTEM=="block", ENV{ID_FS_UUID}=="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX", ENV{UDISKS_IGNORE}="1"

Вы поместите это в файл с именем типа /etc/udev/rules.d/99-ignore-my-usb.rules. Вы можете найти UUID файловой системы для вашей недавно созданной файловой системы, используя blkid.

Затем вы создадите соответствующую запись в /etc/fstab(снова используя UUID), чтобы убедиться, что USB-флешка смонтирована достаточно рано. Не нужно возиться с какой-либо конфигурацией Docker, просто смонтируйте ее в /var/lib/docker, каталог данных Docker по умолчанию. Что-то вроде этого:

UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX  /var/lib/docker  ext4  relatime  0 0

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

Ваш флэш-накопитель Docker становится портативным – в некотором роде. Вы не должны просто вынимать его, когда ПК работает. Сначала остановите Docker, отмонтируйте его и только потом вынимайте. В противном случае вы рискуете повредить файловую систему, и Docker в конечном итоге, конечно, рухнет.

Связанный контент