エラー
npm ERR! EPROTO: protocol error, symlink ...
error An unexpected error occurred: "EPROTO: protocol error, symlink ...
詳しくはわからないけれど、どうやら共有フォルダの権限の関係でシンボリックリンクの生成でエラーが出ているようでした。
対処
- Docker quick start terminal を管理者権限で起動する
- install 時に --no-bin-links オプションをつける
Docker quick start terminal を管理者権限で起動する
正確には仮想マシンを管理者権限で立ち上げることにより、共有フォルダ内で正常にシンボリックリンクがはれてインストールが成功するようです。
ここでよくあるミスとしては、一度 Docker quick start terminal を立ち上げたあとでウィンドウを閉じ、管理者権限で再び開こうとしても起動時にエラーが起きてしまいます。
ウィンドウを閉じるだけでなく、きちんと仮想マシンを終了させないと、Docker quick start terminal が自動で立ち上げる default という仮想マシンが存在し続けているために競合して新しくマシンを立てられません。
そのため $ docker-machine stop
コマンドを打ってマシンを止めてから管理者権限で Docker quick start terminal を立ち上げなおしましょう。仮想マシン側の操作で行ってもよいです。
Docker-Toolboxは仕組み上この手のエラーで詰まりやすい気がするので、これ以降私は常に管理者モードで起動するようにしています。
余談:
いつも docker を使った後はシャットダウン時に「強制的に終了」させないと電源を切れずに「あまりよくないなぁ」と思っていましたが、終了時にきちんと$ docker-machine stop
することによってプロセスが起動中だと怒られなくなりました。知らなかったの私だけ…?
install 時に --no-bin-links オプションをつける
$ npm install --no-bin-links
ググるとまず第一にこれを勧められます。
シンボリックリンクの作成をしないよう指定するオプションらしいです。
さしあたりこれで解決する場合も多いですが、後々ファイルのパスが通らなかったりといった不具合につながることがあるので、個人的には先に前者を試してみることをお勧めします。
私の場合、 npm install
ではこれでうまくいきましたが、これが原因でconfigファイルのパスを指定しなおさないと他のエラーで引っ掛かりました。 yarn install
では --no-bin-link
オプションをつけてもinstallが成功せず、前者は問題なく通りました。
おわりに
場当たり的な対処法の紹介ですので、誤りがありましたら是非指摘をお願いします。