latest
,81
(Dockerfile)with-webgl
(Dockerfile)with-node
,81-with-node
,81-with-node-12
(Dockerfile)with-puppeteer
,81-with-puppeteer
(Dockerfile)80
,77
,76
,73
,72
,71
,68
,64
80-with-node
,77-with-node
,76-with-node
80-with-puppeteer
,77-with-puppeteer
,76-with-puppeteer
Chrome running in headless mode in a tiny Alpine image
We often need a headless chrome. We created this image to get a fully headless chrome image. Be careful to the "--no-sandbox" flag from Chrome
Launching the container using only docker container run -it zenika/alpine-chrome ...
will fail with some logs similar to #33.
Please use the 3 others ways to use Chrome Headless.
Launch the container using:
docker container run -it --rm zenika/alpine-chrome
and use the --no-sandbox
flag for all your commands.
Be careful to know the website you're calling.
Explanation for the no-sandbox
flag in a quick introduction here and for More in depth design document here
Launch the container using:
docker container run -it --rm --cap-add=SYS_ADMIN zenika/alpine-chrome
This allows to run Chrome with sandboxing but needs unnecessary privileges from a Docker point of view.
Thanks to ever-awesome Jessie Frazelle seccomp profile for Chrome.
Also available here wget https://raw.githubusercontent.com/jfrazelle/dotfiles/master/etc/docker/seccomp/chrome.json
Launch the container using:
docker container run -it --rm --security-opt seccomp=$(pwd)/chrome.json zenika/alpine-chrome
The default entrypoint does the following command: chromium-browser --headless --disable-gpu --disable-software-rasterizer --disable-dev-shm-usage
You can get full control by overriding the entrypoint using: docker container run -it --rm --entrypoint "" zenika/alpine-chrome chromium-browser ...
Command (with no-sandbox): docker container run -d -p 9222:9222 zenika/alpine-chrome --no-sandbox --remote-debugging-address=0.0.0.0 --remote-debugging-port=9222 https://www.chromestatus.com/
Open your browser to: http://localhost:9222
and then click on the tab you want to inspect. Replace the beginning
https://chrome-devtools-frontend.appspot.com/serve_file/@.../inspector.html?ws=localhost:9222/[END]
by
chrome-devtools://devtools/bundled/inspector.html?ws=localhost:9222/[END]
Command (with no-sandbox): docker container run -it --rm zenika/alpine-chrome --no-sandbox --dump-dom https://www.chromestatus.com/
Command (with no-sandbox): docker container run -it --rm -v $(pwd):/usr/src/app zenika/alpine-chrome --no-sandbox --print-to-pdf --hide-scrollbars https://www.chromestatus.com/
Command (with no-sandbox): docker container run -it --rm -v $(pwd):/usr/src/app zenika/alpine-chrome --no-sandbox --screenshot --hide-scrollbars https://www.chromestatus.com/
Command (with no-sandbox): docker container run -it --rm -v $(pwd):/usr/src/app zenika/alpine-chrome --no-sandbox --screenshot --hide-scrollbars --window-size=1280,1696 https://www.chromestatus.com/
Command (with no-sandbox): docker container run -it --rm -v $(pwd):/usr/src/app zenika/alpine-chrome --no-sandbox --screenshot --hide-scrollbars --window-size=412,732 https://www.chromestatus.com/
Command (with no-sandbox): docker container run -u `id -u $USER` -it --rm -v $(pwd):/usr/src/app zenika/alpine-chrome --no-sandbox --screenshot --hide-scrollbars --window-size=412,732 https://www.chromestatus.com/
With tool like "Puppeteer", we can add a lot things with our Chrome Headless.
With some code in NodeJS, we can improve and make some tests.
See the "with-puppeteer" folder for more details.
If you have a NodeJS/Puppeteer script in your src
folder named pdf.js
, you can launch it using the following command:
docker container run -it --rm -v $(pwd)/src:/usr/src/app/src --cap-add=SYS_ADMIN zenika/alpine-chrome:with-puppeteer node src/pdf.js
With the "wqy-zenhei" library, you could also manipulate asian pages like in "screenshot-asia.js"
docker container run -it --rm -v $(pwd)/src:/usr/src/app/src --cap-add=SYS_ADMIN zenika/alpine-chrome:with-puppeteer node src/screenshot-asia.js
These websites are tested with the following supported languages:
- Chinese (with
https://m.baidu.com
) - Japanese (with
https://www.yahoo.co.jp/
) - Korean (with
https://www.naver.com/
)
Links:
- adieuadieu/serverless-chrome#108
- DevExpress/testcafe#2116
- 'use-gl' values here
docker container run -it --rm --cap-add=SYS_ADMIN -v $(pwd):/usr/src/app zenika/alpine-chrome:with-webgl --screenshot --hide-scrollbars https://webglfundamentals.org/webgl/webgl-fundamentals.html
docker container run -it --rm --cap-add=SYS_ADMIN -v $(pwd):/usr/src/app zenika/alpine-chrome:with-webgl --screenshot --hide-scrollbars https://browserleaks.com/webgl
We can run the container as root with this command:
docker container run --rm -it --entrypoint "" --user root zenika/alpine-chrome sh
Some examples are available on the examples
directory:
- docker-compose to launch a chrome calling a nginx server in the same docker-compose
- x11 to experiment this image with a X11 server.
-
Headless Chrome website: https://developers.google.com/web/updates/2017/04/headless-chrome
-
List of all options of the "Chromium" command line: https://peter.sh/experiments/chromium-command-line-switches/
-
Where to file issues: https://github.com/Zenika/alpine-chrome/issues
-
Maintained by: https://www.zenika.com
docker run -it --rm --entrypoint "" zenika/alpine-chrome cat /etc/alpine-release
3.11.6
docker run -it --rm --entrypoint "" zenika/alpine-chrome chromium-browser --version
Chromium 81.0.4044.113
docker image inspect zenika/alpine-chrome --format='{{.Size}}'
368279892
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!
⭐️ this repo or leave a comment here