product_uuid
Wenn 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 chroot
und durch sh
den 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 /sys
in der Docker-Datei als VOLUME an, aber ich denke, das wird hier nicht weiterhelfen.