環境
- Windows10
- Docker Toolbox
$ docker -v
Docker version 18.09.0, build 4d60db472b
やりたいこと
$ docker-compose run --rm /bin/bash
$ npm i --no-bin-links
$ npm run eslint
みたいなコマンドを使いたい。
エラー
sh: 1: eslint: not found
こんな感じで怒られる。
原因
node_modules/.bin
にコマンドのリンクが置かれていないため。
Mac では自動で作成されていたため、Windows ではシンボリックリンクがはれない問題 が原因なのかもしれない。
解決法
node_modules を一度全て削除し、docker を介さずに npm i
を実行すると node_modules/.bin
が作成される。
> npm i
> docker-compose run app --rm /bin/bash
$ npm run eslint
とおった。
解決法2
DockerでVolumeをマウントするとき一部を除外する方法 を使って、シンボリックリンクが張られる箇所、node_modules
とのマウントから除外する。
- docker-compose.yml の一部
version: "3.7"
services:
app:
...
volumes:
- {作業ディレクトリ}/node_modules
docker-compose を修正した後、
$ docker-compose run app /bin/bash
# npm i
# npm run eslint
おまけ
あとは、Win は管理者権限なら symlink を作れるようになるらしいので、vagrant を動かすコマンドプロンプトを管理者権限で起動すると--no-bin-links をつけなくても大丈夫になるらしい。
とあったのでやってみたができなかった…。