具有入口点的Docker中的节点web服务失败但以其他方式工作

时间:2017-01-27 18:06:48

标签: node.js docker

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

当我使用入口点

运行Docker容器时
CMD ["node", "app.js"]

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

当我使用

CMD /bin/bash 

然后输入contianer并运行节点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"]

1 个答案:

答案 0 :(得分:1)

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

我建议您删除node_modules目录并在Dockerfile中执行npm install命令。

所以:

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

      

    rm -rf node_modules

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

      

    ...

         

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

         

    运行npm install

         

    ...

  • 再次运行容器。