初めに
同僚が作成してくれたnodeのdockerコンテナをbuildする際に何点かコケたポイントがありましたのでメモしてみます。
同様のケースで嵌っている方がいたら参考になれたらと思います!
前提
コンテナを作成してくれた人のPC
Mac Pro
こちらの環境では一発docker-compose up --build
を流せばbuildとupが通る
私のPC
Windows10 Pro
npm --version
6.14.5
数回コケる
コンテナの構成
Node→image: node:latest
MySQL→image: mysql:5.7
Nginx→image: nginx:latest
Cannot create container for service mysql: Conflict
既に__mysql__という名のコンテナが存在するからコンフリクトするぞというエラーですね。
他のnodeやnginxも同様に発生しました。
良くデフォルトの名前でコンテナ名をつける事が多いので、__プロジェクト毎にコンテナ名をAservice_mysqlとかユニークな名前を指定する__とスムーズかも知れませんね。
既に存在した__mysql__コンテナはもう殆ど動かないプロジェクトのものでしたので、
docker rm コンテナID
で__削除__しました。
npm ERR! enoent ENOENT: no such file or directory, rename '/src/node_modules/constantinople' -> '/src/node_modules/.constantinople.DELETE'
constantinopleが見つからないと怒られました。
constantinopleは定数の評価で使用するモジュールのようですね。
https://www.npmjs.com/package/constantinople
__使用しているnpmのバージョンを最新にアップデートし解決__しました。
6.14.5→6.14.8
npm install -g npm
仮にこの方法で直らなかった場合、単にnpm install時にmoduleの中身が破損しているパターンや、package-lock.json
が各モジュールを良くない組み合わせのバージョンで固定しているパターンが考えられるので、
node_modulesの中身をすべて削除する
package-lock.jsonを削除して再度npm installする
を試してみてください。
npm ERR! Maximum call stack size exceeded
Nodeの最大コールスタックサイズを超えると発生するようです。
何でMacで起きないのにWindowsでは起きるんだ・・・。
__npmのキャッシュを削除__して__再度buildしたら問題なく起動__することができました。
npm cache clean --force
参考:https://www.it-swarm.dev/ja/javascript/npm%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A7%E6%9C%80%E5%A4%A7%E3%82%B3%E3%83%BC%E3%83%AB%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF%E3%82%B5%E3%82%A4%E3%82%BA%E3%82%92%E8%B6%85%E3%81%88%E3%81%BE%E3%81%97%E3%81%9F/829336672/
ちなみにnodeのstackサイズを変更すれば暫定的にこのコールスタックサイズ問題は解決しますが、
Nodeのパフォーマンスが悪くなる、最悪動かなくなる恐れがあるので止めた方が無難みたいです。。
最後に
同じ開発環境を瞬時に構築できるdockerは開発シーンに必須といえるツールになっていますね!
異なるOSでも動くのは素敵です。