Meteor运行服务器收到错误:"找不到绑定文件。 [...] bcrypt [...]"

时间:2016-08-06 21:23:59

标签: node.js meteor docker dockerfile bcrypt

问题

我尝试在Docker镜像中运行Meteor服务器应用程序。运行主文件以启动服务器会导致错误,请参阅以下详细信息: Could not locate the bindings file.(我的系统:Macbook Pro,OSX 10.11.4)

问题

有人知道如何解决这个错误吗?

解决问题的尝试失败

  1. 按照建议的here运行npm rebuild
  2. Nick Bull提案:正在运行npm install --unsafe-perm node-gypnpm install --unsafe-perm libxmljs无效。两者都在/home/build/bundle/programs/server的docker容器中执行。 (由于docker image中的root权限,--unsafe-perm标志为needed
  3. 详细

    1. Dockerfile(灵感来自meteorhacks/meteord
    2. FROM debian:wheezy
      
      ENV sourcedir /home/source
      ENV builddir /home/build
      RUN mkdir ${sourcedir} && mkdir ${builddir}
      
      RUN apt-get update -y
      RUN apt-get install -y curl bzip2 build-essential python git
      
      RUN \
          NODE_VERSION=4.4.7 \
          && NODE_ARCH=x64 \
          && NODE_DIST=node-v${NODE_VERSION}-linux-${NODE_ARCH} \
          && cd /tmp \
          && curl -O -L http://nodejs.org/dist/v${NODE_VERSION}/${NODE_DIST}.tar.gz \
          && tar xvzf ${NODE_DIST}.tar.gz \
          && rm -rf /opt/nodejs \
          && mv ${NODE_DIST} /opt/nodejs \
          && ln -sf /opt/nodejs/bin/node /usr/bin/node \
          && ln -sf /opt/nodejs/bin/npm /usr/bin/npm
      
      RUN curl -sL https://install.meteor.com | sed s/--progress-bar/-sL/g | /bin/sh
      
      ADD . ${sourcedir}
      RUN cd ${sourcedir} \
          && meteor build  --directory ${builddir} --server=http://localhost:3000
      
      RUN cd ${builddir}/bundle/programs/server/ && npm install
      
      1. node main.js文件夹中运行bundle时出现错误消息:
      2. /home/build/bundle/programs/server/node_modules/fibers/future.js:280
                                throw(ex);
                                ^
        
        Error: Could not locate the bindings file. Tried:
         → /home/build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt/node_modules/bcrypt/build/bcrypt_lib.node
         → /home/build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt/node_modules/bcrypt/build/Debug/bcrypt_lib.node
         → /home/build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt/node_modules/bcrypt/build/Release/bcrypt_lib.node
         → /home/build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt/node_modules/bcrypt/out/Debug/bcrypt_lib.node
         → /home/build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt/node_modules/bcrypt/Debug/bcrypt_lib.node
         → /home/build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt/node_modules/bcrypt/out/Release/bcrypt_lib.node
         → /home/build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt/node_modules/bcrypt/Release/bcrypt_lib.node
         → /home/build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt/node_modules/bcrypt/build/default/bcrypt_lib.node
         → /home/build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt/node_modules/bcrypt/compiled/4.4.7/linux/x64/bcrypt_lib.node
            at bindings (/home/build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt/node_modules/bindings/bindings.js:88:9)
            at Object.<anonymous> (/home/build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt/node_modules/bcrypt/bcrypt.js:3:35)
            at Module._compile (module.js:409:26)
            at Object.Module._extensions..js (module.js:416:10)
            at Module.load (module.js:343:32)
            at Module.Mp.load (/home/build/bundle/programs/server/npm/node_modules/meteor/babel-compiler/node_modules/reify/node/runtime.js:16:23)
            at Function.Module._load (module.js:300:12)
            at Module.require (module.js:353:17)
            at require (internal/module.js:12:17)
            at Object.Npm.require (/home/build/bundle/programs/server/boot.js:190:18)
        

3 个答案:

答案 0 :(得分:0)

根据许多online sources,它是node-gyp中的一个错误。试试这个:

npm install node-gyp
npm install libxmljs

看看会发生什么。

答案 1 :(得分:0)

好的,我发现了这个错误: 问题是buildir中envrionment varibale Dockerfile的定义: ENV builddir /home/build bcrypt的构建过程似乎使用相同的变量,并在该目录中构建文件bcrypt_lib.nodeobj.target。所以他们在正确的地方失踪了。

答案 2 :(得分:0)

如果您在哈萨克斯坦这样的受审查国家/地区,则第一次通过vpn运行流星会有所帮助,因为它无法下载gyp插件。下载失败的地方应该有一行,而不是专门运行流星启动时。