国产麒麟环境,egress启动成功,chrome启动失败,怎么解决
# ask-ai
a
国产麒麟环境,egress启动成功,chrome启动失败,怎么解决
t
Thanks for reaching out, 徐旭. I'm an AI assistant and I'm here to help. Give me a moment while I research this topic.
你好!收到你在国产麒麟环境下:egress 启动成功但 Chrome 启动失败。为了快速定位并给出可行的解决方案,我需要几项信息——请尽量把下面内容发来: • 你使用的 Egress 版本(例如 v1.7.6 / v1.8.0 等) • 部署方式:Docker 还是 Kubernetes?还是直接在主机上运行? • 系统架构:x86_64 还是 ARM(麒麟定制版或通用)? •
config.yaml
中
enable_chrome_sandbox
的值(true/false) • 启动时或容器日志中与 Chrome 相关的错误片段(`docker logs <id>` 的输出),特别包含 “chrome failed to start”、“No usable sandbox”、“Failed to move to new namespace” 等关键词 在等你日志和信息的同时,你可以先尝试这几个快速排查步骤: 1. 若用 Docker,启动时加上 `--cap-add SYS_ADMIN`,验证是否能启动 Chrome。 2. 临时将
enable_chrome_sandbox: false
以排除沙盒权限问题(仅作验证)。 3. 若要保留沙盒,使用官方的 seccomp 配置并以
--security-opt seccomp=/path/to/chrome-sandboxing-seccomp-profile.json
挂载运行。 4. 检查并安装 Chrome headless 的依赖库(如 `libnss3`、`libxss1`、字体包等),并确认系统上已安装 chromium/google-chrome。 把以上信息和日志发过来后,我会基于你提供的内容给出具体命令和下一步修复建议。 Sources: Self-hosting the Egress Service | LiveKit docs
a
版本1.9.0,docker启动,直接在主机上面运行。麒麟arm通用版本,报错日志是chrome failed to start”,没有使用沙盒
t
收到 — 针对你提供的信息(Egress v1.9.0、Docker 在主机上运行、麒麟 ARM 通用、报错 “chrome failed to start”、未启用沙盒),给出有针对性的排查与解决步骤。请按序尝试并把执行结果或日志片段回传,我会继续跟进。 1) 确认镜像与架构兼容 • 确认你拉取/使用的是支持 ARM 的 Egress 镜像(镜像标签或 manifest 要包含 arm64 支持)。若镜像为 x86-only,会出现 Chrome 无法启动的情况。 • 运行: ◦
docker inspect --format '{{.Os}}/{{.Architecture}}' <container_id或镜像名>
◦ 或
docker image inspect <镜像名>
查看支持的架构。 2) 检查 Chrome/Chromium 可执行文件与依赖库 • 在宿主机或容器中尝试直接运行 headless chromium,查看更详细错误: ◦ 进入容器:`docker exec -it <container_id> /bin/bash`(或 sh) ◦ 运行 `/usr/bin/chromium --headless --no-sandbox --disable-gpu about:blank`(路径根据镜像调整) • 若报缺少库,按提示在宿主/容器中安装常见依赖(麒麟可能包名不同): ◦ 常见依赖示例:`libnss3`,
libxss1
,
libasound2
,
libx11-xcb1
, 字体包等。 • 如果 chromium 可执行文件不存在,需在镜像内安装 chromium 或使用包含 chromium 的镜像。 3) 即使未启用沙盒,仍确认容器权限与内核命名空间支持 • 部分 ARM 或麒麟内核对命名空间/CLONE 标志有限制,导致 Chromium 启动失败。建议临时给容器添加额外能力验证: ◦ 启动时加
--cap-add=SYS_ADMIN
再测试一次。 • 若担心权限,可临时在测试环境开此权限以确认问题来源。 4) 查看并粘贴更完整的 Chrome 相关日志 • 请把
docker logs <container_id>
中包含 Chrome 启动失败前后 30-50 行贴过来,重点关键词:`chrome failed to start`、`No usable sandbox`、`Failed to move to new namespace`、`cannot find library` 等。 • 如果在容器内直接跑 chromium,截取 stderr 的完整输出也很有帮助。 5) 若依赖与权限均正常,尝试切换 chromium 启动参数做进一步诊断 • 在容器内手动启动带更多日志的参数,例如: ◦
chromium --headless --disable-gpu --no-sandbox --disable-dev-shm-usage --enable-logging=stderr --v=1 about:blank
• 把输出贴来,我会帮你解析关键错误。 6) 可临时验证的最小排查流程(按顺序) • 确认镜像支持 arm64。 • 进入容器手动运行 chromium,记录错误。 • 若报依赖缺失,安装相应包并重试。 • 若报命名空间/权限问题,临时用
--cap-add=SYS_ADMIN
启动容器排查。 如果你把以下信息贴过来,我会直接给出更精确的修复命令: •
docker image inspect <镜像名>
的架构输出或你用的镜像标签; •
docker logs <container_id>
中与 Chrome 启动相关的完整错误段落(或容器内直接运行 chromium 的 stderr 输出)。
a
egress@1b5a010ed964:/$ chrome --version Trace/breakpoint trap (core dumped) egress@1b5a010ed964:/$ chrome --headless=new --disable-gpu --no-sandbox --dump-dom https://www.baidu.com Trace/breakpoint trap (core dumped) egress@1b5a010ed964:/$有报错
t
收到,你在容器里直接运行
chrome
/
chrome --headless
都报 `Trace/breakpoint trap (core dumped)`。针对这个崩溃情况,请按下面有序检查并把结果回传,我会继续跟进。 1) 确认镜像与二进制的架构匹配 • 请贴你用的镜像名和标签(例如
livekit/egress:1.9.0
或自定义镜像)。 • 在宿主机执行并贴返回结果: ◦
docker image inspect <镜像名:tag> --format '{{.Os}}/{{.Architecture}}'
• 如果镜像不是 `linux/arm64`,需要使用或构建支持 ARM 的镜像。 2) 检查 Chrome 可执行文件的架构与依赖(在容器内执行) • 在容器内运行: ◦
file $(which chrome || which chromium || which chromium-browser)
◦
ldd $(which chrome || which chromium || which chromium-browser) 2>&1 | sed -n '1,200p'
• 把两条命令输出贴来,确定二进制是否为 arm64 并查看缺失库。 3) 测试运行时开启额外日志与禁用沙盒参数(已尝试过 `--no-sandbox`,但再试更详细日志) • 在容器内运行(若二进制路径不同请替换): ◦
chromium --headless --disable-gpu --no-sandbox --enable-logging=stderr --v=1 about:blank 2>&1 | sed -n '1,200p'
• 把输出贴出,关注崩溃前的 stderr 信息。 4) 检查 libc / glibc 与内核兼容性 • ARM 平台上若二进制与系统的 libc 不兼容,会直接崩溃。请在容器内运行: ◦
ldd --version
以及 `uname -a`,并把输出贴来。 5) 尝试使用系统包管理器安装 chromium(验证不是镜像内二进制问题) • 如果容器有包管理器(apt/yum/zypper),可临时安装系统版 chromium 并运行,确认是否仍崩溃: ◦ 例如(Debian/Ubuntu 风格):`apt-get update && apt-get install -y chromium`,然后运行 `chromium --version`、`chromium --headless --no-sandbox about:blank`。 6) 若二进制为 ARM 且依赖齐全但仍崩溃,尝试换用不同的 Chromium/Chrome 版本 • 在 ARM 麒麟上,某些 Chrome 发布版可能与内核或 C 库不兼容。可尝试降级或升级 chromium 包,或使用由发行版打包的 chromium。 7) 最小信息回传(请提供下列内容以便我给出精确命令) • 你当前使用的镜像全名与标签(例如
livekit/egress:1.9.0
或自建镜像名) • 上述第2、4步命令的输出:`file ...`、`ldd ...`、`ldd --version`、`uname -a` • 如果容器内能安装并运行系统 chromium,请把其
--version
输出和运行 headless 的 stderr 按照顺序做完并把输出发过来,我会根据结果给出对应的修复命令或替代方案。
a
你们在麒麟的机器上面测试过吗
你们在麒麟的机器上面测试过吗?