Gibt es eine Möglichkeit, die UUID und VMID des Docker-Computers anzupassen?

2

Ich versuche derzeit, einen vertrauenswürdigen Dateispeicher für eine Lizenzierungsengine namens FlexNET in einem Docker-Container zu erstellen. Das Problem besteht darin, dass für die Lizenzierungsengine eine permanente UUID, VMID und MAC-Adresse erforderlich ist.

Ich habe herausgefunden, wie man die MAC-Adresse des Containers einstellt. Ich habe jedoch Probleme beim Einstellen der UUID und VMID des Docker-Containers.

Soweit ich sehe, liest die Lizenzierungs-Engine die UUID von:

/sys/class/dmi/id/product_uuid 

Welches ist mit dem Kernel verbunden und kann daher nicht direkt geändert werden.

Meine Frage lautet also: Gibt es eine Möglichkeit, den Inhalt dieser Datei in Docker zu ändern, ohne den Kernel des Host-Betriebssystems neu erstellen zu müssen?

M.Benkov
quelle

Antworten:

0

product_uuidWenn ich Ihre Frage richtig verstehe, kann ich mir zwei Möglichkeiten vorstellen , sie zu ändern .

Montage über product_uuid

Sie können eine Datei vom Host an diesen Pfad im Container binden. Anstelle eines Aufrufs von sysfs, wenn dieser Pfad gelesen wird, wird die angehängte Datei gelesen.

Zum Beispiel:

$ echo "new-uuid" > /var/tmp/product_uuid
$ docker run --rm -ti -v /var/tmp/product_uuid:/sys/class/dmi/id/product_uuid centos bash
[root@217e12a74e74 /]# cat /sys/class/dmi/id/product_uuid
new-uuid

Chroot innerhalb des Bildes

Wenn Sie nicht in die Datei einhängen müssen und diese vollständig im Container enthalten sein soll, können Sie dies auch mit einer Chroot-Methode beim Erstellen des Abbilds tun.

Es folgt ein Beispiel für eine Docker-Datei, in der eine Shell in a eingerichtet wird chroot:

FROM centos:7

RUN mkdir -p /chroot /chroot/sys/class/dmi/id \
  && cp -al /lib /lib64/ /usr/ chroot/ || echo "Ignoring linking issues ..." \
  && echo "new-uuid" > /chroot/sys/class/dmi/id/product_uuid

CMD chroot /chroot sh

Wenn wir dies starten, wird standardmäßig eine Shell in unserer Chroot gestartet:

$ docker run -ti --rm uuid-test 
sh-4.2# cat /sys/class/dmi/id/product_uuid
new-uuid

Für Ihren Anwendungsfall müssen Sie auch Ihre Anwendung und ihre Abhängigkeiten zur hinzufügen chrootund durch shden Startbefehl der Anwendung ersetzen . Beachten Sie auch , dass dies bedeutet , /sys/wird nur die Datei enthalten /sys/class/dmi/id/product_uuid.

Andere Möglichkeiten?

Verblüfft bin ich mir nicht sicher, auf welche andere einfache Weise dies möglich ist, da Docker sysfs immer anhängt /sys- es sei denn, Sie geben /sysin der Docker-Datei als VOLUME an, aber ich denke, das wird hier nicht weiterhelfen.

wayofthepie
quelle