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?