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安装
…
-
再次运行容器。