docker - Firefox Headless 无法以非 root 用户身份在 Docker 中工作

标签 docker firefox playwright firefox-headless

正如标题所说,我无法以非 root 用户身份在 Docker 容器内以 headless 模式运行 Firefox。考虑以下使用 docker build -t firefox . 构建的 Dockerfile

FROM python:3.8-buster
RUN apt-get update -qq \
    && apt-get install -qy \
        libappindicator1 \
        libasound2 \
        libatk1.0-0 \
        libc6 \
        libcairo2 \
        libcups2 \
        libdbus-1-3 \
        libexpat1 \
        libfontconfig1 \
        libgbm-dev \
        libgcc1 \
        libgconf-2-4 \
        libgdk-pixbuf2.0-0 \
        libglib2.0-0 \
        libgtk-3-0 \
        libnspr4 \
        libnss3 \
        libpango-1.0-0 \
        libpangocairo-1.0-0 \
        libpci-dev \
        libstdc++6 \
        libx11-6 \
        libx11-xcb1 \
        libxcb1 \
        libxcomposite1 \
        libxcursor1 \
        libxdamage1 \
        libxext6 \
        libxfixes3 \
        libxi6 \
        libxrandr2 \
        libxrender1 \
        libxss1 \
        libxtst6 \
        xdg-utils \
        nano

RUN wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/85.0.2/linux-x86_64/en-US/firefox-85.0.2.tar.bz2 -O /firefox.tar.bz2
RUN tar -xf /firefox.tar.bz2 --directory /
WORKDIR /firefox
RUN ./firefox -CreateProfile "headless /profile-headless" -headless
RUN chmod -Rf 777 /firefox && chmod -Rf 777 /profile-headless
cmd ["./firefox", "-profile", "/profile-headless", "-headless", "--screenshot", "https://example.org"]
如果我以 root 身份运行一个容器,一切都很好并且过程完成(出现一些警告,但总体上有效):
$ docker run --rm firefox
*** You are running in headless mode.
[GFX1-]: glxtest: Unable to open a connection to the X server
[GFX1-]: glxtest: libEGL missing
$
但是,如果我以不同的用户身份运行它,则会出现相同的输出,但进程会挂起。
$ docker run --rm --user=1001 firefox
*** You are running in headless mode.
[GFX1-]: glxtest: Unable to open a connection to the X server
[GFX1-]: glxtest: libEGL missing
我尝试为保存二进制文件的目录 ( /firefox ) 和配置文件一 ( profile-headless ) 分配 777 权限,这似乎不起作用。
可能不需要一些依赖项,我只是不想在遇到更大问题时花时间在上面。
请注意,我最初在尝试运行 playwright-python 时遇到了这个问题。以非 root 身份在 Docker 内部。 Chromium 浏览器工作正常,但 Firefox 无法初始化和 playwright最终抛出超时错误。我深入挖掘并意识到独立的 Firefox 对我来说也失败了。
我想我一定缺少一些配置、环境变量等。任何帮助将不胜感激,提前致谢!

最佳答案

Playwright 确实使用了自己的 Firefox 和 WebKit 版本。为此,需要特定的 Playwright 版本,因此无法在您尝试通过 apt 安装的普通 Firefox 或 Safari 中使用。 .
在您的场景中,您可能正在寻找自动安装依赖项的命令,这可以通过执行 npx playwright install-deps 来完成。 ,见 here以供引用。
除此之外,建议使用 official Docker image ,它针对每个版本进行了测试,并确保它包含运行 Playwright 及其所有功能所需的所有依赖项。

关于docker - Firefox Headless 无法以非 root 用户身份在 Docker 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66155849/

相关文章:

docker - 限制 docker 守护进程 CPU 资源

html - 列表项不与 Firefox 合作

javascript - Firefox 扩展程序如何以编程方式获取自己的版本号?

javascript - range.toString() 的奇怪行为

docker - 在Docker容器的其他端口上运行Jenkins

docker - Docker,防火墙在哪里?

java - 在 mysql 上使用 docker-compose 时遇到问题

java - 如何在 Alpine Docker 容器上运行 Playwright 浏览器测试?

javascript - 如何避免剧作家测试中的 "Duplicate test titles are not allowed"错误?

playwright - 剧作家测试中的根级 Hooks