Estou executando chromedriver + chrome dentro do Docker em meu ambiente de teste.
Tudo estava funcionando bem até a última atualização do CoreOS.
Estas são as versões que parecem funcionar:
VERSION=1185.5.0VERSION_ID=1185.5.0BUILD_ID=2016-12-07-0937
E esta é uma versão mais recente que faz com que o chrome coredump:
VERSION=1235.4.0VERSION_ID=1235.4.0BUILD_ID=2017-01-04-0450
Olhando para as mudanças, parece que o docker foi atualizado de 1.11.x para 1.12.x, que quebrou setns()
ligue para dentro do contêiner. setns()
é usado pelo Chrome para criar um namespaces.
Este é o exemplo de saídas:
jsosic-coreos-test-20161207 ~ # docker --versionDocker version 1.11.2, build bac3bae
De dentro de um recipiente nesta caixa:
[root@2939f21ecfaa /]# /opt/google/chrome/google-chrome[57:57:0107/015130:ERROR:browser_main_loop.cc(261)] Gtk: cannot open display:
Foi assim que a nova versão quebrou:
jsosic-coreos-test-2017-01-04 ~ # docker --versionDocker version 1.12.3, build 34a2ead[root@13ab34c36c82 /]# /opt/google/chrome/chromeFailed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permittedAborted (core dumped)
O que descobri é que, se eu iniciar o contêiner com qualquer um --cap-add=SYS_ADMIN
ou --privileged
- Chrome funciona como esperado.
Qual é a diferença entre esses dois switches? Quais recursos são ativados por --privileged
?
E, posso permitir setns()
dentro do contêiner sem comprometer a segurança?