私の問題は、e2eテストのためにドッカーコンテナでグーグルクロームを実行する方法です。
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 の docker イメージは Debian jessie
を使用しています。
google chromeを--headless
フラグで動かすと、Xサーバーが不要になりますね。
これが私のドッカーファイルです。
Jenkinsの公式イメージです。
dockerからGUIでgoogle chromeを動かしている人のレポ。
最初のアプローチは xvbf
を使用することですが、--headless
フラグを使用すると処理がより簡単になります。
Ubuntuサーバーではインストールと同じコマンドでクロームを実行できるのですが、Dockerでは失敗します。
他の意図の後、--no-sandbox
フラグを使用しましたが、docker imagesは次のようなエラーを表示します。
[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
このイメージ alpeware/chrome-headless-trunk
を使用すると、ubuntu で動作しました!
そのコンテナでヘッドレスクロームを起動するために使用するコマンドはこれです。
/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
コンテナの動作の短いビデオはこちらです。 クロームヘッドレスの動作]111。
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 で動作させることができるかもしれません。
答えは分かりませんが、DockerでヘッドレスChromeを起動することに成功したコンテナを知っています。seleniumのやつです。
ChromeでWebアプリケーションの自動テストに使っています。
お役に立てれば幸いです。
デフォルトの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 ノードとしてデフォルトのイメージを使用することができます。