通过chrome-headless-render-pdf启动Chrome失败问题排查(2023)
使用chrome-headless-render-pdf启动Chrome时的Docker环境崩溃问题
版本信息
- Google Chrome 112.0.5615.49(及112.0.5615.121)
- chrome-headless-render-pdf 1.11.0
错误日志
使用 /usr/bin/google-chrome 等待Chrome就绪 检测到ipv4连接 Chrome端口已开放! Chrome停止运行 (null) (chrome) (输出) (chrome) (错误) qemu: 捕获到目标信号5 (跟踪/断点陷阱) - 核心已转储 (chrome) (错误) qemu: 捕获到目标信号5 (跟踪/断点陷阱) - 核心已转储 (chrome) (错误) [0417/090555.189718:ERROR:bus.cc(399)] 无法连接到总线:无法连接到套接字 /run/dbus/system_bus_socket: 没有该文件或目录 (chrome) (错误) [0417/090555.285522:ERROR:bus.cc(399)] 无法连接到总线:无法连接到套接字 /run/dbus/system_bus_socket: 没有该文件或目录 (chrome) (错误) [0417/090555.286453:ERROR:bus.cc(399)] 无法连接到总线:无法连接到套接字 /run/dbus/system_bus_socket: 没有该文件或目录 (chrome) (错误) [0417/090555.300120:ERROR:file_path_watcher_inotify.cc(315)] inotify_init() 失败:功能未实现 (38) (chrome) (错误) (chrome) (错误) DevTools 监听 ws://127.0.0.1:49238/devtools/browser/ec0a1593-97aa-4a19-8360-7ceb4b950e68 (chrome) (错误) qemu: 未知选项 'type=utility' (chrome) (错误) [0417/090555.613256:WARNING:bluez_dbus_manager.cc(247)] Floss管理器不存在,无法设置Floss启用/禁用。 (chrome) (错误) [0417/090555.617069:ERROR:gpu_process_host.cc(936)] GPU进程启动失败:error_code=1002 (chrome) (错误) [0417/090555.617211:WARNING:gpu_process_host.cc(1292)] GPU进程已崩溃1次 (chrome) (错误) [0417/090555.635196:ERROR:network_service_instance_impl.cc(541)] 网络服务崩溃,正在重启服务。 (chrome) (错误) qemu: 未知选项 'type=utility' (chrome) (错误) [0417/090555.688126:ERROR:gpu_process_host.cc(936)] GPU进程启动失败:error_code=1002 (chrome) (错误) [0417/090555.688202:WARNING:gpu_process_host.cc(1292)] GPU进程已崩溃2次 (chrome) (错误) [0417/090555.697249:ERROR:network_service_instance_impl.cc(541)] 网络服务崩溃,正在重启服务。 (chrome) (错误) qemu: 未知选项 'type=utility' (chrome) (错误) [0417/090555.722214:ERROR:gpu_process_host.cc(936)] GPU进程启动失败:error_code=1002 (chrome) (错误) [0417/090555.722285:WARNING:gpu_process_host.cc(1292)] GPU进程已崩溃3次 (chrome) (错误) [0417/090555.722377:FATAL:gpu_data_manager_impl_private.cc(440)] GPU进程不可用。退出。 (chrome) (错误) [0417/090555.724842:ERROR:scoped_ptrace_attach.cc(27)] ptrace: 功能未实现 (38) (chrome) (错误) qemu: 捕获到目标信号5 (跟踪/断点陷阱) - 核心已转储 (chrome) (错误) Chrome端口已开放! Chrome端口已开放!
Chrome的Docker安装脚本
FROM ubuntu:22.04 AS linux_with_chrome # 从Google仓库安装最新Chrome # 可在相关页面查看实际版本 # TODO 安装特定版本Chrome,参考相关教程链接 RUN apt-get update # 安装wget RUN apt-get install -y wget # Chrome依赖 RUN apt-get install -y gnupg # 设置Chrome密钥和仓库 RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list # 安装Chrome RUN apt-get update && apt-get -y install google-chrome-stable
解决方案
1. 强制禁用Chrome GPU加速
Docker环境无GPU支持,Chrome反复启动GPU进程导致崩溃。给chrome-headless-render-pdf添加以下Chrome启动参数:
--chrome-option="--disable-gpu" --chrome-option="--disable-software-rasterizer" --chrome-option="--no-sandbox" --chrome-option="--disable-dev-shm-usage"
--disable-gpu:直接禁用GPU进程--disable-software-rasterizer:关闭软件光栅化,规避相关崩溃--no-sandbox:关闭沙箱(Docker环境下无需沙箱隔离)--disable-dev-shm-usage:避免/dev/shm空间不足引发的问题
2. 完善Dockerfile的系统依赖
日志显示缺少dbus和inotify支持,修改Dockerfile补充安装:
FROM ubuntu:22.04 AS linux_with_chrome # 从Google仓库安装最新Chrome RUN apt-get update RUN apt-get install -y wget gnupg dbus inotify-tools libgbm-dev # 设置Chrome密钥和仓库 RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list # 安装Chrome RUN apt-get update && apt-get -y install google-chrome-stable # 初始化dbus RUN mkdir -p /run/dbus && dbus-daemon --system --fork
3. 调整容器运行参数
启动容器时添加必要权限,解决qemu和ptrace报错:
docker run --cap-add=SYS_PTRACE -v /dev/shm:/dev/shm [你的镜像名]
若需快速验证,可使用特权模式(不推荐生产环境):
docker run --privileged -v /dev/shm:/dev/shm [你的镜像名]
4. 改用预配置的Headless Chrome镜像
若自行配置麻烦,可直接使用预配置的headless Chrome镜像,这类镜像已适配Docker环境,无需额外调整参数。
内容的提问来源于stack exchange,提问作者Paul Verest on LinkedIn
相关产品推荐
相关产品推荐

