在Docker容器中访问raspistill / pi摄像机

时间:2019-02-23 14:53:40

标签: node.js docker raspberry-pi dockerfile

我一直在使用Docker在Raspberry Pi 3 Model B上试用我的Node.js应用程序,它运行起来没有任何麻烦。

当应用依赖项(raspicam)要求raspistill才能使用相机拍照时,就会出现问题。 Raspberry正在运行Debian Stretch,并且对pi相机进行了配置和测试。但是当通过Docker运行应用程序时,我无法访问它。

基本上,我使用此Dockerfile在Win10 64位计算机上使用Docker Desktop构建映像:

FROM arm32v7/node:10.15.1-stretch

ENV PATH /opt/vc/bin:/opt/vc/lib:$PATH

RUN echo "/opt/vc/lib" > /etc/ld.so.conf.d/00-vcms.conf \
    && ldconfig

# Create the app directory
ENV APP_DIR /home/app
RUN mkdir $APP_DIR
WORKDIR $APP_DIR

# Copy both package.json and package-lock.json
COPY package*.json ./

# Install app dependencies
RUN npm install

# Bundle app source
COPY . .

EXPOSE 3000

CMD ["npm", "start"]

然后在Raspberry中,如果我拉出图像并使用以下命令运行它:

docker run --privileged --device=/dev/vchiq -p 3000:3000 [my/image:latest]

我得到:

  

错误:生成/ opt / vc / bin / raspistill ENOENT

经过一些研究,我还尝试了以下方法:

docker run --privileged -v=/opt/vc/bin:/opt/vc/bin --device=/dev/vchiq -p 3000:3000 [my/image:latest]

使用该命令,我得到:

  

stderr:/ opt / vc / bin / raspistill:加载共享库时出错:libmmal_core.so:无法打开共享库文件:没有这样的文件或目录

有人可以分享一些关于我必须对Dockerfile进行哪些更改以使我能够从Docker容器内部访问pi摄像机的想法吗?预先感谢。

2 个答案:

答案 0 :(得分:1)

尝试从Docker容器使用相机界面时遇到了同样的问题。在此线程的建议下,我设法使其与以下dockerfile一起使用。

FROM node:12.12.0-buster-slim

EXPOSE 3000

ENV PATH="$PATH:/opt/vc/bin"

RUN echo "/opt/vc/lib" > /etc/ld.so.conf.d/00-vcms.conf

COPY "node_modules" "/usr/src/app/node_modules"
COPY "dist" "/usr/src/app"

CMD ldconfig && node /usr/src/app/app.js

这里有3个要点:

  1. 在您的PATH中添加/opt/vc/bin,以便您可以调用raspistill而无需引用完整路径。
  2. /opt/vc/lib添加到您的配置文件中,以便raspistill可以找到所需的所有依赖项。
  3. 在容器运行时而非构建时重新加载配置文件(ldconfig)。

最后一点是Anton解决方案不起作用的主要原因。 ldconfig需要在正在运行的容器中执行,因此请使用类似的方法进行挖掘或使用 entrypoint.sh 文件代替。

答案 1 :(得分:0)

尝试从Dockerfile中替换它:

RUN echo "/opt/vc/lib" > /etc/ld.so.conf.d/00-vcms.conf \
&& ldconfig

具有以下内容:

ADD 00-vmcs.conf /etc/ld.so.conf.d/
RUN ldconfig

并创建文件 00-vmcs.conf

/opt/vc/lib

修改

如果仍然无法正常运行,请尝试加载Raspbian Docker映像,例如balenalib/rpi-raspbian

FROM balenalib/rpi-raspbian