Рейтинг:0

Docker запускается до монтирования общих ресурсов Virtualbox

флаг cx

Моя установка: Virtualbox с хостом Windows и гостем Ubuntu Server. Ubuntu теперь 21.04, но проблема существовала до обновления с 20.04. А на сервере Ubuntu я запускаю Docker.

Проблема: общие ресурсы из виртуального бокса, которые, как мне кажется, монтируются гостевыми надстройками Vbox, не монтируются до тех пор, пока не запустится Docker. Контейнеры запускаются нормально, так как их конфигурация находится на /home, который является локальным диском, однако у них есть данные на общем ресурсе. Поскольку Docker запускается до монтирования общих ресурсов, контейнеры привязываются к точке монтирования как к каталогу, а не к монтированию, и они могут записывать на диск, заполняя корневую файловую систему невидимыми файлами.

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

Я безуспешно пробовал ряд или директивы systemd. RequiresMountsFor и ConditionPathIsMountPoint были двумя, которые, как я думал, могут работать. Я также пытался сообщить службе докеров, чтобы она запускалась после гостевой службы vbox, но это тоже не сработало.

Какие-либо предложения?

Jeff Schaller avatar
флаг ru
Указание докеру запускаться после vbox кажется правильным решением; не могли бы вы [отредактировать] свой вопрос, чтобы описать, что вы сделали для этого и каковы были результаты? Временные метки «запуска» для каждой службы должны указывать, были ли они запущены в желаемой последовательности или нет.
флаг cx
Спасибо, я повторю шаги, которые я предпринял, и задокументирую их достаточно подробно, чтобы обновить свой пост выше. Спасибо за ваш ответ. Я убежден, что это можно решить в systemd, но шаги, которые я предпринял ранее, не сработали.
Рейтинг:1
флаг cx

Решение состояло в том, чтобы переопределить служебный файл systemd для containerd.

бег

    systemctl редактировать containerd

добавьте следующее в место, указанное в комментариях.

    [Ед. изм]
    После=
    After=network.target local-fs.target vboxadd-service.service
    Требует = vboxadd-service.service

Первый After= очищает эту директиву, готовую для новой. И After, и Requires необходимы.Сохраните этот файл и перезапустите host.

Работает без проблем и подтверждается 'systemd-analyse plot', которая является очень полезной командой для опроса вашего порядка запуска systemd. Этот метод выдержит обновления программного обеспечения

Jeff Schaller avatar
флаг ru
Вы захотите внести это изменение в версию файла /etc/systemd/system/, так как версия /lib/systemd будет перезаписана во время будущих обновлений.
флаг cx
Это просто симлинк
флаг cx
/etc/systemd/system/multi-user.target.wants/containerd.service -> /lib/systemd/system/containerd.service Должен ли я сломать ссылку и скопировать файл и отредактировать?
флаг cx
На самом деле тоже нашел это, используя 'systemctl edit containerd'
Jeff Schaller avatar
флаг ru
Вы не хотите редактировать символическую ссылку в multi-user.target.wants, нет -- вы хотите редактировать (или создавать) файл с именем `/etc/systemd/system/containerd.service`; возможно, скопируйте оригинал из /lib и внесите изменения?
флаг cx
Я сделал это с переопределением сейчас. Я обновлю основной пост с окончательным решением

Ответить или комментировать

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