Ich verwende chromedriver + chrome in Docker in meiner Testumgebung.
Bis zum letzten CoreOS-Upgrade funktionierte alles einwandfrei.
Dies sind die Versionen, die zu funktionieren scheinen:
VERSION=1185.5.0
VERSION_ID=1185.5.0
BUILD_ID=2016-12-07-0937
Und dies ist eine neuere Version, die dazu führt, dass Chrom entleert wird:
VERSION=1235.4.0
VERSION_ID=1235.4.0
BUILD_ID=2017-01-04-0450
Angesichts der Änderungen scheint Docker von 1.11.x auf 1.12.x aktualisiert worden zu sein, wodurch der setns()
Aufruf im Container unterbrochen wurde . setns()
wird von Chrome zum Erstellen von Namespaces verwendet.
Dies sind die Beispielausgaben:
jsosic-coreos-test-20161207 ~ # docker --version
Docker version 1.11.2, build bac3bae
Aus einem Behälter auf dieser Box:
[root@2939f21ecfaa /]# /opt/google/chrome/google-chrome
[57:57:0107/015130:ERROR:browser_main_loop.cc(261)] Gtk: cannot open display:
So hat es die neue Version gebrochen:
jsosic-coreos-test-2017-01-04 ~ # docker --version
Docker version 1.12.3, build 34a2ead
[root@13ab34c36c82 /]# /opt/google/chrome/chrome
Failed to move to new namespace: PID namespaces supported,
Network namespace supported,
but failed: errno = Operation not permitted
Aborted (core dumped)
Was ich herausgefunden habe ist, dass wenn ich den Container mit entweder --cap-add=SYS_ADMIN
oder --privileged
- starte, Chrome wie erwartet funktioniert.
Was ist der Unterschied zwischen diesen beiden Schaltern? Welche Funktionen werden von aktiviert --privileged
?
Und kann ich Innencontainer zulassen setns()
, ohne die Sicherheit zu beeinträchtigen?
quelle
Antworten:
AFAICS, die Dokumentation schlägt vor , die Möglichkeiten Gewährung für einen Behälter benötigt, anstatt der Verwendung von
--privileged
Schalter. Das Ausführen im privilegierten Modus scheint dem Container alle Funktionen zu gewähren (genau die, die in der ersten URL aufgeführt sind, sofern die Dokumente auf dem neuesten Stand sind).Kurz gesagt, ich würde sagen, dass
--cap-add=SYS_ADMIN
dem Container im Vergleich zum--privileged
Switch eine kleinere Teilmenge von Funktionen gewährt wird . Eventuell scheinen die Beispiele in der Docker-Dokumentation (erste URL) es vorzuziehen , bei Bedarf nur die FunktionSYS_ADMIN
oder hinzuzufügenNET_ADMIN
.quelle
exec_linux.go
geholfen. Ich habe versucht, Docker Repo zu klonen, um es zuEin Unterschied besteht darin, dass --privilegierte / dev und / sys als RW bereitgestellt werden, während SYS_ADMIN sie als RO bereitstellt. Dies bedeutet, dass ein privilegierter Container vollen Zugriff auf Geräte im System hat. SYS_ADMIN gibt Ihnen das nicht.
quelle