Docker中使用入口点的节点webservice失败,但在其他情况下工作

我正在Docker容器中运行节点Web服务。

当我运行入口点的Docker容器

CMD ["node", "app.js"] 

它给了我下面提到的错误。

当我使用

 CMD /bin/bash 

并inputcontianer并运行节点app.js然后我的应用程序正常工作

这是错误的:

 Error: Module did not self-register. at Error (native) at Object.Module._extensions..node (module.js:435:18) at Module.load (module.js:344:32) at Function.Module._load (module.js:301:12) at Module.require (module.js:354:17) at require (internal/module.js:12:17) at bindings (/usr/src/app/controlcenter/node_modules/bindings/bindings.js:76:44) at Object.<anonymous> (/usr/src/app/controlcenter/node_modules/couchbase/lib/binding.js:143:36) at Module._compile (module.js:410:26) at Object.Module._extensions..js (module.js:417:10) at Module.load (module.js:344:32) at Function.Module._load (module.js:301:12) at Module.require (module.js:354:17) at require (internal/module.js:12:17) at Object.<anonymous> (/usr/src/app/controlcenter/node_modules/couchbase/lib/couchbase.js:3:15) at Module._compile (module.js:410:26) 

节点版本v0.10.37

npm -version 1.4.28

nvm –version 0.33.0

我的整个Dockerfile:

 FROM ubuntu:16.04 RUN mkdir -p /usr/src/app/controlcenter WORKDIR /usr/src/app/controlcenter RUN apt-get update && apt-get install -y --no-install-recommends apt-utils \ build-essential \ apt-transport-https \ build-essential \ wget \ curl \ vim \ python RUN \ apt-get -y install software-properties-common && \ add-apt-repository ppa:openjdk-r/ppa && \ apt-get update && \ apt-get install -y openjdk-7-jdk && \ rm -rf /var/lib/apt/lists/ RUN wget http://nodejs.org/dist/v4.2.6/node-v4.2.6.tar.gz -P /tmp/ && \ tar xvzf /tmp/node-v4.2.6.tar.gz && cd node-v* && \ ./configure && \ make && \ make test && \ make install COPY . /usr/src/app/controlcenter/ ENV NVM_DIR "$HOME/.nvm" ENV JAVA_HOME /usr/lib/jvm/openjdk-7-jdk RUN npm install sails -g \ && npm install grunt-cli -g \ && npm install jsonlint-lines -g \ && npm install node-ninja -g RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash \ && /bin/sh "$NVM_DIR/nvm.sh" \ && . "$NVM_DIR/nvm.sh" \ && nvm install 0.10.37 \ && nvm use 0.10.37 \ && npm install jdbc \ && rm -rf node_modules/couchbase/ \ && npm install couchbase\ && nvm alias default 0.10.37 EXPOSE 1337 CMD ["node", "app.js"] 

看起来您正在将整个应用程序目录复制到docker映像中,并带有node_modules目录。 这个npm install是使用你的本地节点版本(v0.10.37)执行的,而你正在安装另一个在你的容器(v4.2.6)中,所以可能是这个问题。

我build议你删除你的node_modules目录并在Dockerfile中执行npm install命令。

所以:

  • 转到您的主机中的应用程序目录并执行:

    rm -rf node_modules

  • 在复制之后,在Dockerfile中添加一个图层来执行npm install命令。

    COPY。 的/ usr / SRC /应用程序/ ControlCenter的/

    运行npm安装

  • 再次运行容器。