Firefox headless无法以非root用户身份在Docker中工作

正如标题所说,我在Docker容器中以非root用户身份在无头模式下运行Firefox时遇到了问题。考虑以下Dockerfile文件,它是用docker build -t firefox .构建的

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

我尝试将777权限分配给包含二进制文件的目录(/firefox)和配置文件1 (profile-headless),但似乎不起作用。也许有些依赖是不必要的,我只是不想在我有更大的问题时花时间在这上面。

需要注意的是,我第一次在Docker中以非根用户身份运行playwright-python时遇到了这个问题。Chromium浏览器运行良好,但是火狐无法初始化,playwright最终抛出了一个超时错误。我深入挖掘,意识到独立的Firefox对我来说也是失败的。

我想我一定是遗漏了一些配置、环境变量之类的东西。如有任何帮助,我们将不胜感激,谢谢!

转载请注明出处:http://www.starkdigitech.com/article/20230526/1083372.html