gpt4 book ai didi

docker - Docker运行与构建-构建gstreamer的不同行为

转载 作者:行者123 更新时间:2023-12-02 18:27:32 26 4
gpt4 key购买 nike

我正在尝试构建在gstreamer中使用nvidia硬件解码的docker镜像,并且在制作镜像时遇到了一个奇怪的问题。

在运行docker build(或nvidia-docker build)时,构建过程没有找到与nvidia cuda相关的东西,但是当我将失败的图像作为容器旋转并从容器中执行这些非常相同的步骤时,一切正常。我什至将容器另存为图像,这给了我一个持久的图像,可以正常工作。

有没有人遇到过类似的问题,可以对此有所启发?

Dockerfile:
FROM nvcr.io/nvidia/deepstream:3.0-18.11 AS base

ENV DEBIAN_FRONTEND noninteractive

#install some dependencies. NOTE - not removing apt cache for the MWE
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
libdc1394-22 \
tmux \
vim \
libjpeg-dev \
libpng-dev \
libpng12-dev \
cuda-toolkit-10-0 \
python3-setuptools \
python3-pip ninja-build pkg-config gobject-introspection gnome-devel bison flex libgirepository1.0-dev liborc-0.4-dev

RUN pip3 install meson && ldconfig

FROM base
#pull and make gstreamer:
RUN cd /tmp && mkdir gstreamer
RUN git clone https://github.com/GStreamer/gst-build.git /tmp/gstreamer \
&& cd /tmp/gstreamer \
&& git checkout tags/1.16.0 \
&& ./setup.py -Dgtk_doc=disabled -Dgst-plugins-bad:nvdec=enabled -Dgst-plugins-bad:nvenc=enabled -Dgst-plugins-bad:iqa=disabled -Dgst-plugins-bad:bluez=disabled --reconfigure \
&& ninja -C build \
&& ninja install -C build

测试:
构建并运行容器。在容器内:
$ gst-inspect-1.0 nvdec
No such element or plugin 'nvdec'
$ cd /tmp/gstreamer
$ ./setup.py -Dgtk_doc=disabled -Dgst-plugins-bad:nvdec=enabled -Dgst-plugins-bad:nvenc=enabled -Dgst-plugins-bad:iqa=disabled -Dgst-plugins-bad:bluez=disabled --reconfigure
$ ninja -C build
$ ninja install -C build
$ gst-inspect-1.0 nvdec
Factory Details:
Rank primary (256)
[... all plugin parameters show up]
GObject
+----GInitiallyUnowned
+----GstObject
+----GstElement
+----GstVideoDecoder
+----GstNvDec

EDIT1
该图像的构建没有错误,只有当我尝试调用gstreamer时,它的构建才没有加速。我注意到在构建过程中的主要区别是
meson.build:109:2: Exception: Problem encountered: The nvdec plugin was enabled explicitly, but required CUDA dependencies were not found.

从容器内部构建时不会发生这种情况。

缺少错误的原因很可能与ninja + meson构建系统有关,该系统查找兼容的程序包,报告异常,但不会抛出该异常,并且继续运行,好像没有发生任何错误

EDIT2
回答评论:
要构建它并获取错误,只需构建附加的docker镜像:
sudo docker build -t gst16:latest . > build.log
这会将所有输出转储到 build.log文件中。
我没有可用于此目的的docker注册表,并且按docker标准(〜8 Gigs),docker镜像变得相当大,但是要成功制作,它非常简单:
sudo docker run --runtime="nvidia" -ti gst16:latest /bin/bash
要么
sudo nvidia-docker run -ti gst16:latest /bin/bash
这似乎对我来说是一样的。注意 否--rm 标志!从容器内:
#check if nvidia decoder plugin is there:
gst-inspect-1.0 nvdec
#fail!
#now build it from within:
cd /opt/gstreamer
./setup.py -Dgtk_doc=disabled -Dgst-plugins-bad:nvdec=enabled -Dgst-plugins-bad:nvenc=enabled -Dgst-plugins-bad:iqa=disabled -Dgst-plugins-bad:bluez=disabled --reconfigure
ninja -C build
ninja install -C build
gst-inspect-1.0 nvdec
#success reported

现在获取图像,退出容器(ctrl + d)并在主机 shell 中:
  • sudo docker container ls -a查看所有容器,包括已停止的容器
  • 来自gst16:latest的
  • 获取CONTAINER_ID并将其复制为
  • sudo docker commit <CONTAINER_ID> gst16:manual,几秒钟后,您应该将容器另存为图像。使用sudo docker images验证
  • 使用sudo docker run --runtime=`nvidia` --rm -ti gst16:manual /bin/bash运行新图像
  • 容器中的
  • 再次尝试gst-inspect-1.0 nvdec以验证其是否正常工作

  • EDIT3
    $ nvidia-docker --version 
    Docker version 18.09.0, build 4d60db4

    最佳答案

    我想我找到了解决方案/原因

    如果有人发现自己处于类似的情况,请在这里写出来,再加上我讨厌找到有类似问题且没有答案或“没关系,我解决了它”的旧线程作为唯一的后续措施

    Docker构建与nvidia运行时没有任何关系,并且gstreamer要求访问完整的nvidia工具链才能构建需要它的插件。 这将由gstreamer 1.18 解决,但是直到那时,仍无法在docker build中使用nvidia编解码器构建gstreamer。

    解决方法:

  • 建立具有所有依赖关系的镜像。
  • 使用runtime =“nvidia”运行所述图像的容器,但不要使用--rm标志
  • 在容器中,构建gstreamer并照常安装。
  • 使用gst-inspect-1.0进行验证
  • 将容器提交为新图像:docker commit <container_name> <temporary_image_name>
  • 正确标记临时图像。
  • 关于docker - Docker运行与构建-构建gstreamer的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58058256/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com