javascript - Express.js 在 docker 容器内找不到模块 'opencv'

标签 javascript node.js opencv express npm

我正在尝试安装 NODE 的 OpenCV 绑定(bind),以便我可以在我的 Express 服务器上使用 AI。我正在使用 Peter Braden 图书馆 - https://github.com/peterbraden/node-opencv .

但是,在启动 docker 容器时,我不断遇到重复的问题,其中指出:

express_1  | Error: Cannot find module 'opencv'
express_1  |     at Function.Module._resolveFilename (module.js:485:15)
express_1  |     at Function.Module._load (module.js:437:25)
express_1  |     at Module.require (module.js:513:17)
express_1  |     at require (internal/module.js:11:18)
express_1  |     at Object.<anonymous> (/myapp/routes/OpenCV.js:3:10)
express_1  |     at Module._compile (module.js:569:30)
express_1  |     at Object.Module._extensions..js (module.js:580:10)
express_1  |     at Module.load (module.js:503:32)
express_1  |     at tryModuleLoad (module.js:466:12)
express_1  |     at Function.Module._load (module.js:458:3)
express_1  |     at Module.require (module.js:513:17)
express_1  |     at require (internal/module.js:11:18)
express_1  |     at Object.<anonymous> (/myapp/app.js:69:16)
express_1  |     at Module._compile (module.js:569:30)
express_1  |     at Object.Module._extensions..js (module.js:580:10)
express_1  |     at Module.load (module.js:503:32)
express_1  | npm info lifecycle backend@0.0.0~start: Failed to exec     start script
express_1  | npm ERR! code ELIFECYCLE
express_1  | npm ERR! errno 1
express_1  | npm ERR! backend@0.0.0 start: `node ./bin/www`
express_1  | npm ERR! Exit status 1
express_1  | npm ERR! 
express_1  | npm ERR! Failed at the backend@0.0.0 start script.
express_1  | npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
express_1  | 
express_1  | npm ERR! A complete log of this run can be found in:
express_1  | npm ERR!     /root/.npm/_logs/2017-10-25T15_32_12_258Z-debug.log
maya_express_1 exited with code 1

我尝试访问容器并在其中使用 bash 来安装 open cv,但这也不起作用。

我在 Sierra 10.12.6 上运行

如果我删除node_modules然后运行-

docker run -v $(pwd):/myapp express-dev:1.0.0 npm install

它给我带来了一个完全不同的错误

 gyp info spawn args   '-Goutput_dir=.' ]
 /myapp/node_modules/opencv/utils/find-opencv.js:21
                 throw new Error("ERROR: failed to run: pkg-config", opencv, flag);
            ^

 Error: ERROR: failed to run: pkg-config
     at /myapp/node_modules/opencv/utils/find-opencv.js:21:23
     at ChildProcess.exithandler (child_process.js:277:5)
     at emitTwo (events.js:125:13)
     at ChildProcess.emit (events.js:213:7)
     at maybeClose (internal/child_process.js:921:16)
     at Socket.stream.socket.on (internal/child_process.js:348:11)
     at emitOne (events.js:115:13)
     at Socket.emit (events.js:210:7)
     at Pipe._handle.close [as _onclose] (net.js:549:12)
 gyp: Call to 'node utils/find-opencv.js --cflags' returned exit status 1 while in binding.gyp. while trying to load binding.gyp

我尝试重新链接 opencv 并使用 opencv@2 但没有成功。

我的 Dockerfile:

# Based off: https://hub.docker.com/r/danlynn/ember-cli/
# See ./provisioning/containers for more.

FROM node:8.2.1
MAINTAINER thestartupfactory.tech <hello@thestartupfactory.tech>
ENV WORKDIR=/opt NODE_ENV=production

# express server on 3000
# ember will be compiled and served via express
EXPOSE 3000
# Use /opt for building container
WORKDIR $WORKDIR

# See WORKDIR command at end of file
CMD ["npm", "start"]

# Update the image
# Install ember dev dependencies
# Install ember-cli and express-generator
RUN \
    apt-get update -y && \
    npm install -g bower@1.8.0 &&\
    npm install -g ember-cli@2.14.2 &&\
    npm install -g express-generator@4.15.0

# Import the code
RUN \
    mkdir -p /opt/ember && \
    mkdir -p /opt/express

COPY ./frontend/ /opt/ember/
COPY ./backend/ /opt/express/

# Run npm install
# Compile ember, insert to express && delete ember source
# Cleanup caches
RUN \
    cd /opt/ember && npm install &&\
    ember build --environment production && mv dist/ ../express/ &&\
    cd .. && rm -rf ember &&\
    cd /opt/express && npm install && cd .. &&\
    apt-get clean &&\
    apt-get autoremove --purge

# Move the WORKDIR ready for entrypoint
WORKDIR $WORKDIR/express

任何帮助将不胜感激! 提前致谢

最佳答案

看起来您甚至没有在 docker 镜像中设置 node-opencv。在本地计算机上设置 node-opencv 和在 docker 镜像中设置是有区别的。在 Dockerfile 中,您必须包含设置 opencv 和 node-opencv 的命令。如果您不确定如何在 Linux 环境中设置 OpenCV,可以引用 OpenCV travis.yml。

或者您可以查看 opencv-express 。这是一个如何将 opencv 与 Nodejs 和 Express 结合使用的示例。然而它使用 opencv4nodejs。您还可以仅提取提供的基础镜像之一,具体取决于您要使用的 OpenCV 版本,并安装带有 node-opencv 的 Node 环境。

关于javascript - Express.js 在 docker 容器内找不到模块 'opencv',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46936656/

相关文章:

javascript - JavaScript 中 (function(){ 的含义

node.js - React App 在主要的 js 和 css 上给出 404

video - openCV cvCreateVideoWriter 总是返回 null

javascript - 在 Java 中尝试从 AngularJS 尝试时,PUT/POST Rest api 调用不起作用

javascript - 我怎样才能重新创建这种效果/过渡/动画? (HTML/CSS/JQuery)

javascript - jQuery 文档宽度与数学

mysql - 我对 Sequelize 中的关联感到困惑

javascript - 如何在 Node.js 中添加和删除嵌套的 mongodb 集合?

使用 OpenCV 从网络摄像头捕获视频时 QT GUI 卡住

visual-studio-2010 - OpenCV 2.1 : facedetect. cpp 发现丑脸时崩溃