【问题标题】:Running nodejs serialport in a docker container在 docker 容器中运行 nodejs 串行端口
【发布时间】:2016-03-15 04:22:17
【问题描述】:

我需要在 docker 容器中运行 nodejs 应用程序。我不是 Linux 方面的专家,所以我很难理解如何做到这一点。整个应用程序存储在 github (https://github.com/kashesandr/NRTC)。该应用程序使用使用 node-gyp 编译的串行端口模块 (https://github.com/voodootikigod/node-serialport),在我的情况下,串行端口是使用 USB2Serial 驱动程序的虚拟端口 (http://www.prolific.com.tw/US/ShowProduct.aspx?pcid=41) 我想为应用程序创建一个单独的 docker 容器。你能帮帮我吗?

【问题讨论】:

    标签: node.js docker serial-port node-gyp


    【解决方案1】:

    这个问题很模糊。 在 docker hub 有一个 official image 用于构建基于节点的图像。图片的自述文件中有很多“操作方法”信息。在我看来,唯一棘手的部分是如何从容器内访问串行端口。我相信只有在特权模式下运行容器才能实现,同时确保设备节点也存在于容器中。当然需要在主机操作系统上安装USB2Serial驱动。

    我建议以交互模式启动官方节点映像,并尝试在其中手动安装/运行您的应用程序,然后您可以稍后根据该脚本找出一个脚本:

    docker run -it --privileged -v /dev:/dev -v path-to-your-app:/usr/src/your-app node:4.4.0 /bin/bash
    
    root@3dd71f11f02f:/# node --version
    v4.4.0
    root@3dd71f11f02f:/# npm --version
    2.14.20
    root@3dd71f11f02f:/# gcc --version
    gcc (Debian 4.9.2-10) 4.9.2
    

    如您所见,这将为您提供容器内的交互式 (-it) 根访问权限,其中包含您可能需要的一切,具有与主机操作系统相同的 /dev 结构(-v /dev:/dev 绑定它),所以访问端口应该没有问题。 (出于安全原因,稍后将 -v /dev:/dev 卷绑定改进为更具体的内容)。如果您需要默认未安装的其他所有内容,请通过 apt-get 添加它(例如apt-get update && apt-get install [package]),因为官方节点映像基于 Debian Jessie。

    在你弄清楚如何运行应用程序(npm install、gyp 等等)之后,编写一个 Dockerfile 应该是微不足道的。

    FROM node:4.4.0
    
    RUN npm install ...\
      && steps\
      && to && be && executed && inside && the && image
    
    CMD /your/app/start/script.sh
    

    ...然后做一个docker build,然后在生产中以非交互方式(没有-it)使用--privileged 运行您的图像。

    【讨论】:

    • 这确实很有意义!谢谢大佬,需要试试。
    • 我很高兴听到这个消息!干杯!
    • 不...不幸的是,解决方案存在一些问题...容器看不到主机设备...这是stackoverflow上的另一个问题stackoverflow.com/questions/37213812有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    相关资源
    最近更新 更多