web-dev-qa-db-ja.com

Google chrome headlessをdockerで実行するにはどうすればよいですか?

私の問題は、e2eテスト用にdockerコンテナーでgoogle chromeを実行する方法です。公式のJenkinsイメージからDockerfileを作成しますが、Google Chromeを実行しようとするとクラッシュし、エラーが表示されます。

Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted
Trace/breakpoint trap (core dumped)

JenkinsドッカーイメージはDebian jessieを使用します。

Google chromeを--headlessフラグ付きで実行できますが、Xサーバーは必要ありません。

これは私のdockerファイルです:

ジェンキンスの公式画像:

ユーザーがDockerからGUIを使用してGoogle chromeを実行するリポジトリ:

最初のアプローチはxvbfを使用することですが、--headlessフラグを使用するとプロセスがより簡単になります。

Ubuntuサーバーでchromeをインストール用の同じコマンドで実行できますが、Dockerでは失敗します。

他の目的の後、--no-sandboxフラグを使用しましたが、Dockerイメージには次のエラーが表示されます。

[0427/180929.595479:WARNING:audio_manager.cc(295)] Multiple instances of AudioManager detected
[0427/180929.595537:WARNING:audio_manager.cc(254)] Multiple instances of AudioManager detected
libudev: udev_has_devtmpfs: name_to_handle_at on /dev: Operation not permitted

実際に私はこのコマンドを実行しました:

google-chrome-stable --headless --disable-gpu --no-sandbox http://www.google.com

40
Israel Perales

問題を解決する--no-sandboxでchromeを起動するだけです

11
Boikot

この画像を使用して_alpeware/chrome-headless-trunkはubuntuで私のために働いた!ヘッドレスchromeを起動するためにそのコンテナで使用されるコマンドは次のとおりです。

/usr/bin/google-chrome-unstable \
--disable-gpu --headless --no-sandbox \
--remote-debugging-address=0.0.0.0 \
--remote-debugging-port=9222 --user-data-dir=/data

これがコンテナの動作の短いビデオです chrome headless in action

次のコマンドを使用して、Ubuntuでコンテナーを起動しました。

 docker run -it --rm -p=0.0.0.0:9222:9222 \ 
 --name=chrome-headless \
 -v /tmp/chromedata/:/data alpeware/chrome-headless-trunk

次にChromeを使用してlocalhost:9222のデバッグポートに接続しました

いくつかの変更を加えれば、おそらくこれをJenkinsで実行できます!

ソース

5
kongkoro

追加

--cap-add SYS_ADMIN

docker runコマンド

例:

docker run --rm -p=81:81 -d -v $(pwd)/src:/opt/code --name chrome_test --cap-add=SYS_ADMIN test/chrome_iso
3
joehwang

デフォルトのDockerfileを拡張します Selenium Chrome Node

FROM Selenium/standalone-chrome-debug:latest
MAINTAINER Serge Arbuzov <[email protected]>

USER root

### jenkins set up ###
RUN apt-get update && apt-get install -y openssh-server Sudo
RUN mkdir /var/run/sshd
RUN adduser jenkins
RUN echo jenkins:jenkins | chpasswd
RUN echo "jenkins ALL=(ALL) NOPASSWD:ALL">>/etc/sudoers

USER root
RUN echo export DISPLAY=":1.5" >> /etc/environment
ADD run.sh /run.sh
RUN chmod +x /run.sh

EXPOSE 22

CMD ["/run.sh"]

そして、私のrun.shは

#!/bin/bash

Xvfb :1 -screen 5 1024x768x8 &
/usr/sbin/sshd -D

だから私はJenkinsノードとしてデフォルトの画像を使用できます

1
whitediver

この記事は、ドッカー内でヘッドレスChromeを使用してKarmaテストを実行するために必要なものです。

https://hackernoon.com/running-karma-tests-with-headless-chrome-inside-docker-ae4aceb06ed

基本的に、解決策は、--no-sandboxフラグを指定してHeadless Chromeを実行することです。

1
drussell

答えはありませんが、DockerでヘッドレスChromeを正常に起動するコンテナーを知っています。セレンの1つ:

Selenium Chrome Node

ChromeでWebアプリの自動テストに使用します

それが役に立てば幸い

自動テスト用にChromeとChromeをヘッドレスモードで実行するChromedriverを使用してDockerイメージを構築しました。 docker-compose.ymlセットアップでPhantomJSのドロップイン代替としてこれを使用しています。このイメージはAlpine Linuxに基づいており、Seleniumを必要としないか、含まないため、非常に小さいです。

ソース: https://github.com/retreatguru/headless-chromedriver

Docker Hub: https://hub.docker.com/r/retreatguru/headless-chromedriver

0
elifiner