制作了一個用于跑chrome的docker鏡像xvfb-chrome,主要是為了支持能夠通過xvfb或者wayland,給chrome提供一個虛擬的桌面環境。
這個鏡像主要支持:
- 將chrome
--remote-debugging-port
映射到docker的host,可以在host直接訪問。 - 支持使用非root用戶運行chrome(無需
--no-sandbox
運行chrome)。 - 支持使用虛擬桌面運行chrome,支持xvfb和wayland。
- 減少
open /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq: No such file or directory (2)
錯誤的發生。 - 支持將字體目錄映射到容器中。
這個容器可以通過如下方式獲取(tag即為chrome的版本號)
# 獲取最新版本
docker pull socrateslee/xvfb-chrome:latest
# 獲取某個具體版本,支持版本件https://hub.docker.com/r/socrateslee/xvfb-chrome/tags
docker pull socrateslee/xvfb-chrome:125.0.6422.141-1
主要的使用方法如下
通過一些例子來介紹一下容器的使用方法:
- 以headless 方式啟動chrome
sudo docker run --rm -it \-v $(pwd):/workdir --workdir /workdir \--cap-add=SYS_ADMIN \socrateslee/xvfb-chrome:latest\--headless <URL>
- 以xvfb方式啟動,指定
--remote-debugging-port
(方便selenium/chromedp/playwright等連接):
sudo docker run --rm -it \-v $(pwd):/workdir --workdir /workdir \--cap-add=SYS_ADMIN \-p 9222:9222 \socrateslee/xvfb-chrome:latest\--xvfb-run --remote-debugging-port=9222
- 通過wayland方式啟動:
sudo docker run --rm -it \-v $(pwd):/workdir --workdir /workdir \--cap-add=SYS_ADMIN \-p 9222:9222 \socrateslee/xvfb-chrome:latest\--wayland --remote-debugging-port=9222 --disable-gpu
- 指定字體目錄(可以先把*.ttf字體下載到<YOUR_FONTS_DIR>這個目錄中)
sudo docker run --rm -it \-v <YOUR_FONTS_DIR>:/home/chrome/.fonts \-v $(pwd):/workdir --workdir /workdir \--cap-add=SYS_ADMIN \-p 9222:9222 \socrateslee/xvfb-chrome:latest\--headless=new --print-to-pdf <URL>
其他注意事項
一些版本的chrome,或者是跑在一些特殊環境中,通過虛擬桌面啟動的chrome可能遇到如下的錯誤,此時chrome會hang住,無法建立有效的websocket連接,只能重啟重啟解決
[0707/070947.640825:ERROR:file_io_posix.cc(145)] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq: No such file or directory (2)
[0707/070947.640877:ERROR:file_io_posix.cc(145)] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq: No such file or directory (2)
啟動容器時,指定 --wayland
參數,增加 --disable-gpu
參數,有時可以顯著的減少這個問題的發生(但是無法避免)。