我正在尝试使用 Xvfb 在 Docker 容器内运行 Chrome headless。然而,虽然 ps 显示 Chrome 进程存在,但它没有到达我的测试网站。在 Docker 外部运行相同的命令成功。
Xvfb :0 -screen 0 1024x768x24 &
DISPLAY=:0 google-chrome http://mytestpage.com
在 Docker 中,我收到以下消息/错误:
Xlib: extension "RANDR" missing on display ":0".
Xlib: extension "RANDR" missing on display ":0".
[1180:1180:1120/051319:ERROR:desktop_window_tree_host_x11.cc(882)] Not implemented reached in virtual void views::DesktopWindowTreeHostX11::InitModalType(ui::ModalType)
[1223:1223:1120/051319:ERROR:sandbox_linux.cc(338)] InitializeSandbox() called with multiple threads in process gpu-process
[1180:1201:1120/051319:ERROR:browser_gpu_channel_host_factory.cc(144)] Failed to create channel.
同时
ps au | grep chrome
* root 128 0.1 0.4 533772 69868 ? Sl+ 06:02 0:00 /opt/google/chrome/chrome http://mytestpage.com
* root 139 0.0 0.2 342648 44016 ? S+ 06:02 0:00 /opt/google/chrome/chrome --type=zygote
* root 140 0.0 0.0 28132 3812 ? S+ 06:02 0:00 /opt/google/chrome/nacl_helper
* root 143 0.0 0.0 342648 8016 ? S+ 06:02 0:00 /opt/google/chrome/chrome --type=zygote
* root 181 0.0 0.3 523452 52392 ? Sl+ 06:02 0:00 /opt/google/chrome/chrome --type=gpu-process --channel=128.0.846512492 --supports-dual-gpus=false --gpu-driver-bug-workarounds=2,45,57 -$
* root 298 0.0 0.0 11120 1084 ? S+ 06:05 0:00 grep chrome
在 Docker 之外(工作的地方)运行相同的命令,我收到消息/错误:
Xlib: extension "RANDR" missing on display ":1".
Xlib: extension "RANDR" missing on display ":1".
[17750:17750:1119/215139:ERROR:sandbox_linux.cc(338)] InitializeSandbox() called with multiple threads in process gpu-process
简单的问题:运行 Chrome 时,为调用设置 DISPLAY 环境变量是不够的。还必须传递一个标志来禁用 GPU,因为 docker 无权访问它并禁用沙箱。 我必须导出显示:
export DISPLAY=:0
Xvfb :0 -screen 0 1024x768x24 &
google-chrome --disable-gpu --no-sandbox http://mytestpage.com
如何让它在Python代码中工作?