在容器中使用无头Chrome、WebGL和Nvidia GPU

7

我正在尝试在Docker容器中运行支持WebGL和硬件加速的无头Chrome。我拥有NVIDIA显卡,如果按照NVIDIA建议的命令进行驱动程序测试,则测试成功。

docker run --gpus all nvidia/opengl:base nvidia-smi

这是我的Dockerfile:
FROM nvidia/opengl:1.0-glvnd-runtime-ubuntu18.04

# Env vars for the nvidia-container-runtime.
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES all

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends \
        git \
        ca-certificates \
        build-essential \
        g++ \
        libxinerama-dev \
        libxext-dev \
        libxrandr-dev \
        libxi-dev \
        libxcursor-dev \
        libxxf86vm-dev \
        libvulkan-dev && \
    rm -rf /var/lib/apt/lists/*
    


    
RUN apt-get update && apt-get install -y apt-utils && apt-get install -y curl

RUN  apt-get update \
     && apt-get install -y wget gnupg ca-certificates \
     && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
     && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
     && apt-get update \
     # We install Chrome to get all the OS level dependencies, but Chrome itself
     # is not actually used as it's packaged in the node puppeteer library.
     # Alternatively, we could could include the entire dep list ourselves
     # (https://github.com/puppeteer/puppeteer/blob/master/docs/troubleshooting.md#chrome-headless-doesnt-launch-on-unix)
     # but that seems too easy to get out of date.
     && apt-get install -y google-chrome-stable \
     && rm -rf /var/lib/apt/lists/* \
     && wget --quiet https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh -O /usr/sbin/wait-for-it.sh \
     && chmod +x /usr/sbin/wait-for-it.sh
     
# Install GTK, pulseaudio and fonts
RUN apt-get update && \
    apt-get -y --no-install-recommends install ca-certificates tzdata \
                       libcanberra-gtk-module libexif12 pulseaudio attr \
                       fonts-dejavu-core fonts-freefont-ttf fonts-guru-extra \
                       fonts-kacst fonts-kacst-one fonts-khmeros-core fonts-lao \
                       fonts-liberation fonts-lklug-sinhala fonts-lohit-guru \
                       fonts-nanum fonts-opensymbol fonts-sil-abyssinica \
                       fonts-sil-padauk fonts-symbola fonts-takao-pgothic \
                       fonts-tibetan-machine fonts-tlwg-garuda-ttf \
                       fonts-tlwg-kinnari-ttf fonts-tlwg-laksaman-ttf \
                       fonts-tlwg-loma-ttf fonts-tlwg-mono-ttf \
                       fonts-tlwg-norasi-ttf fonts-tlwg-purisa-ttf \
                       fonts-tlwg-sawasdee-ttf fonts-tlwg-typewriter-ttf \
                       fonts-tlwg-typist-ttf fonts-tlwg-typo-ttf \
                       fonts-tlwg-umpush-ttf fonts-tlwg-waree-ttf \
                       ttf-bitstream-vera ttf-dejavu-core ttf-ubuntu-font-family \
                       fonts-arphic-ukai fonts-arphic-uming \
                       fonts-ipafont-mincho fonts-ipafont-gothic \
                       fonts-unfonts-core && \
    rm -rf -- /var/lib/apt/lists /tmp/*.deb

然而,当我使用以下命令运行容器时:

docker run -it --gpus all mytest

我尝试在容器内使用以下命令截取屏幕截图:

google-chrome --no-sandbox --headless --screenshot=ss.png  chrome://gpu/

我收到一个错误信息: 分段错误 (核心已转储) 你有什么想法?
2个回答

1

GPU chome headless选项仍然存在问题,特别是在容器中尝试时。只需将图像更新为当前的nvidia/opengl:1.2-glvnd-runtime-ubuntu20.04,您将获得无需任何内存转储的输出。大约一年前我遇到了与某些支持vulkan的chrome选项相同的问题(现在同样的事情可以正常工作)。


1
我之前也遇到了同样的问题,直到我仔细阅读了文档
我正在使用browserless/chrome。
这是我运行的命令。
sudo docker run \
  --runtime=nvidia --gpus all \
  -e "NVIDIA_DRIVER_CAPABILITIES=all" \
  -dt \
  -p 3000:3000 \
  browserless/chrome

enter image description here

我正在使用一个AWS EC2机器

  • 实例类型:g4dn.xlarge
  • 操作系统:Ubuntu 20.04

这里是我运行的配置主机命令

# Install driver
sudo apt-get install linux-headers-$(uname -r)
export distribution=$(. /etc/os-release;echo $ID$VERSION_ID | sed -e 's/\.//g')
wget https://developer.download.nvidia.com/compute/cuda/repos/$distribution/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-drivers

# Install nvidia container toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

# Install docker
curl https://get.docker.com | sh \
  && sudo systemctl --now enable docker

# Configure nvidia runtime for docker
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

# Run your container
sudo docker run \
  --runtime=nvidia --gpus all \
  -e "NVIDIA_DRIVER_CAPABILITIES=all" \
  -dt \
  -p 3000:3000 \
  browserless/chrome

官方文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接