我一直在使用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摄像机的想法吗?预先感谢。
答案 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个要点:
/opt/vc/bin
,以便您可以调用raspistill
而无需引用完整路径。/opt/vc/lib
添加到您的配置文件中,以便raspistill
可以找到所需的所有依赖项。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