Ich folge einer exemplarischen Vorgehensweise, die Sie durch das Einrichten des Knotens auf einem Ubuntu-Computer führt. Ich bin an dem Schritt angelangt, an dem Sie das System so konfigurieren, dass der Knoten auf Port 80 ausgeführt werden kann. Es wird (sowie einige andere Anleitungen, die ich mir angesehen habe) empfohlen, den folgenden Befehl auszuführen:
sudo setcap cap_net_bind_service=+ep /usr/local/bin/node
Dies gibt den folgenden Fehler zurück:
Failed to set capabilities on file `/usr/local/bin/node' (Invalid argument)
The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file
Irgendeine Idee, was diesen Fehler verursachen kann?
Ein Grund, warum der
setcap
Befehl manchmal fehlschlägt, ist, dass bestimmte Dateisysteme ihn nicht unterstützen, wenn sie keine erweiterten Attribute unterstützen.The filesystem must support attaching capabilities to an executable file, so that a process gains those capabilities when the file is executed.
http://man7.org/linux/man-pages/man7/capabilities.7.html
Dies gilt insbesondere für Docker. Docker verwendet die BTRFS- oder AUFS-Speicher-Backends, kann jedoch auch Benutzer-Overlays verwenden. Overlayfs unterstützt das Festlegen von Caps, BTRFS und AUFS (siehe unten) jedoch nicht.
https://github.com/moby/moby/issues/30557
Wenn Sie Images mit AUFS ausführen müssen, müssen Sie einen Kernel mit ausführen
CONFIG_AUFS_XATTR=y
.Aus diesem Grund
authbind
ist oft eine bessere Lösung.quelle