L'exécution de chrome sur les machines à docker n'est possible que lorsque chrome est sans tête. Malheureusement, sans tête chrome ne peut pas ignorer les erreurs de certificat) ce qui empêche mes tests de s'exécuter.
J'essaie d'exécuter un environnement de test NodeJS e2e déjà fonctionnel sur un conteneur Docker. La plupart des tests réussissent, mais lorsqu'un site nécessite un certificat, il n'est pas accessible. Sur aucun sans tête chrome je peux simplement ignorer l'erreur de certification. L'image de docker de base installée sur le conteneur est Node: 8
{browserName: 'chrome', chromeOptions: {binary: puppeteer.executablePath (), args: ['--lang = en-US', '- headless', '- no-sandbox', '- ignore- erreurs de certificat ']}}
Le résultat attendu est d'exécuter chrome avec gui sur un conteneur Docker ou d'ignorer en quelque sorte les erreurs de certificat de serveur dans le chrome sans tête.
Une autre façon (décrite ici par Nils De Moor) est de laisser le conteneur Docker se connecter au serveur X de votre machine locale.
Dites que votre adresse IP est 192.168.0.2
.
Vous pouvez configurer un tunnel pour votre affichage X sur le port 6010, par exemple (ce qui correspond à l'affichage 192.168.0.2:10
) avec socat
. Pour des raisons de sécurité, l'argument range
demande à socat
d'accepter uniquement les connexions à partir de l'adresse IP de votre machine.
socat TCP-LISTEN:6010,reuseaddr,fork,range=192.168.0.2/32 UNIX-CLIENT:\"$DISPLAY\" &
Vous pouvez maintenant définir la variable DISPLAY
à l'intérieur du conteneur Docker avec -e
lorsque vous le démarrez.
docker run -e DISPLAY=192.168.0.2:10 gns3/xeyes
Dans le cas de chrome
, il y a quelques complications supplémentaires, décrites dans le message lié, car chrome nécessite quelques privilèges supplémentaires (c'est-à-dire ajouter --privileged
)