Używam chromeedriver + chrome wewnątrz Docker w moim środowisku testowym.
Wszystko działało dobrze do ostatniej aktualizacji CoreOS.
Są to wersje, które wydają się działać:
VERSION=1185.5.0
VERSION_ID=1185.5.0
BUILD_ID=2016-12-07-0937
A to nowsza wersja, która powoduje, że Chrome coredump:
VERSION=1235.4.0
VERSION_ID=1235.4.0
BUILD_ID=2017-01-04-0450
Patrząc na zmiany, wygląda na to, że doker został zaktualizowany z 1.11.x do 1.12.x, co spowodowało przerwanie setns()
połączenia wewnątrz kontenera. setns()
jest używany przez Chrome do tworzenia przestrzeni nazw.
Oto przykładowe wyniki:
jsosic-coreos-test-20161207 ~ # docker --version
Docker version 1.11.2, build bac3bae
Z wnętrza jednego pojemnika na tym pudełku:
[root@2939f21ecfaa /]# /opt/google/chrome/google-chrome
[57:57:0107/015130:ERROR:browser_main_loop.cc(261)] Gtk: cannot open display:
Oto jak załamała się nowa wersja:
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)
Dowiedziałem się, że jeśli uruchomię kontener z jednym --cap-add=SYS_ADMIN
lub --privileged
- Chrome działa zgodnie z oczekiwaniami.
Jaka jest różnica między tymi dwoma przełącznikami? Jakie możliwości są włączone --privileged
?
Czy mogę wpuszczać setns()
do pojemnika bez narażania bezpieczeństwa?