Sto eseguendo chromedriver + chrome all'interno di Docker nel mio ambiente di test.
Tutto funzionava bene fino all'ultimo aggiornamento CoreOS.
Queste sono le versioni che sembrano funzionare:
VERSION=1185.5.0
VERSION_ID=1185.5.0
BUILD_ID=2016-12-07-0937
E questa è una versione più recente che causa il coredump di Chrome:
VERSION=1235.4.0
VERSION_ID=1235.4.0
BUILD_ID=2017-01-04-0450
Osservando le modifiche, sembra che la finestra mobile sia stata aggiornata dalla 1.11.x alla 1.12.x, che ha interrotto la setns()
chiamata all'interno del contenitore. setns()
viene utilizzato da Chrome per la creazione di uno spazio dei nomi.
Questi sono gli output di esempio:
jsosic-coreos-test-20161207 ~ # docker --version
Docker version 1.11.2, build bac3bae
Dall'interno di un contenitore su questa scatola:
[root@2939f21ecfaa /]# /opt/google/chrome/google-chrome
[57:57:0107/015130:ERROR:browser_main_loop.cc(261)] Gtk: cannot open display:
Ecco come la nuova versione l'ha rotto:
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)
Quello che ho scoperto è che se avvio il contenitore con uno --cap-add=SYS_ADMIN
o --privileged
- Chrome funziona come previsto.
Qual è la differenza tra questi due interruttori? Quali funzionalità sono abilitate da --privileged
?
E, posso consentire il setns()
contenitore interno senza compromettere la sicurezza?