Puncte:0

Docker începe înainte de montarea partajărilor Virtualbox

drapel cx

Configurarea mea: Virtualbox cu o gazdă Windows și un invitat Ubuntu Server. Ubuntu este acum 21.04, dar problema a existat înainte de upgrade de la 20.04. Și pe serverul Ubuntu rulez Docker.

Problema: Acțiunile din virtualbox, care cred că sunt montate de suplimentele invitate Vbox, nu sunt montate decât după ce Docker pornește. Containerele pornesc OK, deoarece configurația lor este pe /home, care este o unitate locală, totuși au date pe o partajare. Deoarece Docker pornește înainte ca acțiunile să fie montate, containerele se leagă la punctul de montare mai degrabă ca un director decât ca o montură și pot scrie pe disc acolo umplând sistemul de fișiere rădăcină cu fișiere invizibile.

Nu am făcut nicio modificare recent, în afară de a ține pasul cu actualizările Ubuntu, dar simt că aș fi putut dormi undeva în trecut pentru a ocoli acest lucru. Aș putea căuta să fac asta din nou, dar pare destul de neelegant și m-am întrebat dacă ar putea exista o cale mai bună prin systemd sau altfel.

Am încercat un număr sau directive de sistem fără succes. RequiresMountsFor și ConditionPathIsMountPoint au fost cele două despre care am crezut că ar putea funcționa. De asemenea, am încercat să spun serviciului docker să înceapă după serviciul pentru oaspeți vbox, dar nici acest lucru nu a funcționat.

Orice sugestii?

Jeff Schaller avatar
drapel ru
A-i spune lui docker să pornească după vbox pare soluția potrivită; ați putea să vă [editați] întrebarea pentru a descrie ce ați făcut pentru asta și care au fost rezultatele? Marcajele de timp „pornire” pentru fiecare serviciu ar trebui să indice dacă au pornit în secvența dorită sau nu.
drapel cx
Mulțumesc, voi parcurge din nou pașii pe care i-am făcut și îi voi documenta suficient de detaliat pentru a-mi actualiza postarea de mai sus. Vă mulțumim pentru răspunsul dumneavoastră. Sunt convins că acest lucru poate fi rezolvat în systemd, dar pașii pe care i-am făcut anterior nu au funcționat.
Puncte:1
drapel cx

Soluția a fost să suprascrieți fișierul de serviciu systemd pentru containerd.

alerga

    systemctl edit containerd

adăugați următoarele în locul specificat în comentarii.

    [Unitate]
    După=
    După=network.target local-fs.target vboxadd-service.service
    Necesită=vboxadd-service.service

Primul After= șterge acea directivă gata pentru cea nouă. Sunt necesare atât After cât și Requires.Salvați acest fișier și apoi reporniți gazda.

Funcționează fără probleme și este confirmat de „systemd-analyse plot”, care este o comandă foarte utilă pentru interogarea ordinii de rulare systemd. Această metodă va supraviețui actualizărilor software

Jeff Schaller avatar
drapel ru
Veți dori să faceți această modificare în versiunea /etc/systemd/system/ a fișierului, deoarece cea /lib/systemd va fi suprascrisă în timpul actualizărilor viitoare.
drapel cx
Acesta este doar un link simbolic
drapel cx
/etc/systemd/system/multi-user.target.wants/containerd.service -> /lib/systemd/system/containerd.service Ar trebui să rup linkul și să copiez fișierul și să editez?
drapel cx
De fapt, am găsit asta folosind „systemctl edit containerd”
Jeff Schaller avatar
drapel ru
Nu doriți să editați linkul simbolic în multi-user.target.wants, nu -- doriți să editați (sau să creați) un fișier numit `/etc/systemd/system/containerd.service`; poate copiați-o pe cea originală din /lib și faceți modificările?
drapel cx
Am făcut-o cu o anulare acum. Voi actualiza postarea principală cu soluția finală

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.