#概要
前日にbuild成功したDockerfileが翌日build失敗する現象についての記録。
結論としてはメモリ不足が原因。再起動で解決。
#開発環境
環境は以下のとおり。
- Windows7
- vagrant1.7.4
- virtualbox5.0.10
- 仮想マシンubuntu14.04
- 仮想マシン上Docker 1.6.2
#記録
buildしようとしたDokcerfileは以下
Dockerfile.
FROM node:5.2.0
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
COPY gulpfile.js /usr/src/app/
#タスクランナーインストール
RUN npm install -g gulp
RUN npm install --save-dev gulp
RUN npm install --save-dev require-dir
RUN npm install --save-dev gulp-if
RUN npm install --save-dev gulp-livereload
#サーバーインストール
RUN npm install --save-dev express
RUN npm install --save-dev body-parser
RUN npm install --save-dev cookie-parser
RUN npm install --save-dev debug
RUN npm install --save-dev jade
RUN npm install --save-dev morgan
RUN npm install --save-dev serve-favicon
# ウェブソケットインストール
RUN npm install --save-dev socket.io
# DBドライバインストール
RUN npm install --save-dev mongodb
CMD [ "gulp", "watch" ]
1つ1つ RUN npm install
しているのは、前日package.jsonに記述して
RUN npm install
とやったら以下のエラーが出てbulid失敗したため。
make: Entering directory '/usr/src/app/node_modules/bufferutil/build'
CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
Killed
INFO[0082] The command [/bin/sh -c npm install --save-dev socket.io] returned a
non-zero code: 137
前日の時は、上記のDockerfileのように1つずつインストールすることによってエラーを回避することはできた。
ただし、何故エラーがおきて、何故1つずつでエラーが起きなくなるのかはわからなかった。
翌日、少し変更をしてdocker build
としたら先のエラーが出現。変更を元に戻してもbuild失敗する。
あれこれいじっていたら次のエラーがでた。
`fork': Cannot allocate memory
メモリが足りない、ということでvagrantの再起動を行ったところ、buildが成功するようになった。
ということは、前日にpackage.jsonに全てのパッケージを記述してインストールする方法も、メモリが足りなかった可能性が高い。1つずつRUNすることによってエラー回避できたのは、使用メモリが減ったためか。