我在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"]
答案 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
...
再次运行容器。