【发布时间】:2019-10-20 01:47:35
【问题描述】:
我一直在使用 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 摄像头的想法吗?提前致谢。
【问题讨论】:
-
如果您需要运行
--privileged容器来访问主机设备和主机二进制文件,那么完全不使用 Docker 会更容易且安全。/opt/vc树在你的 Docker 镜像中是空的,当你运行ldconfig它没有任何效果。 -
@DavidMaze 我只使用
--privileged运行,因为我找不到另一种访问GPIO 的方法,即使使用--device=/dev/gpiomem。 -
这个文件
/opt/vc/bin/raspistill应该在哪里?它是否已经在您的 Raspberry 中,或者您想使用卷将该文件从图像内部带到 Raspberry 文件夹中? -
@ManishDash 在我的树莓上我可以访问那个目录并且 raspistill 在那里。
-
@user3632710 你解决了吗?
标签: node.js docker raspberry-pi dockerfile