J'utilise chromedriver + chrome dans Docker dans mon environnement de test.
Tout fonctionnait bien jusqu'à la dernière mise à niveau de CoreOS.
Ce sont les versions qui semblent fonctionner:
VERSION=1185.5.0
VERSION_ID=1185.5.0
BUILD_ID=2016-12-07-0937
Et c'est une version plus récente qui provoque le vidage du chrome:
VERSION=1235.4.0
VERSION_ID=1235.4.0
BUILD_ID=2017-01-04-0450
En regardant les changements, il semble que docker ait été mis à niveau de 1.11.x à 1.12.x, ce qui a interrompu l' setns()
appel à l'intérieur du conteneur. setns()
est utilisé par Chrome pour créer des espaces de noms.
Voici les exemples de sorties:
jsosic-coreos-test-20161207 ~ # docker --version
Docker version 1.11.2, build bac3bae
De l'intérieur d'un conteneur sur cette boîte:
[root@2939f21ecfaa /]# /opt/google/chrome/google-chrome
[57:57:0107/015130:ERROR:browser_main_loop.cc(261)] Gtk: cannot open display:
C'est ainsi que la nouvelle version l'a cassé:
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)
Ce que j'ai découvert, c'est que si je démarre le conteneur avec --cap-add=SYS_ADMIN
ou --privileged
- Chrome fonctionne comme prévu.
Quelle est la différence entre ces deux commutateurs? Quelles fonctionnalités sont activées par --privileged
?
Et puis-je autoriser l' setns()
intérieur du conteneur sans compromettre la sécurité?