o-g-r
@o-g-r (yamada hanako)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

docker runコマンドが流れない

Q&A

Closed

解決したいこと

npmのビルドのコマンドが正常に流れません。

発生している問題・エラー

こちらは流れました
$ docker run --rm -v $(pwd):/build -w /build nodejs npm install
流れた際にpackage-lock.jsonファイルが作成された

こちらがうまくいきません
$ docker run --rm -v $(pwd):/build -w /build nodejs npm run dev

エラーになります。
npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /build/package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/build/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent 

自分で試したこと

試したことは、package-lock.json→package.jsonに変更してbuildフォルダを作成したのですが
うまくいきませんでした。ちなみに作業をおこなったのはローカルです。

$ docker run --rm -v $(pwd):/build -w /build nodejs npm run dev
この一文がそれぞれどこのことを指しているのかがわかりません。
もしわかる方がいらっしゃいましたらよろしくお願いします。

0

2Answer

「$(pwd):」として、カレントをマウントしたことがないのです。

ですので、次のようにディレクトリ「a」を作って、永続ボリュームとして利用すれば、
「nodejs npm run dev」実行時に package.json を渡せると思うのですが。

$ mkdir a
$ docker run --rm -v ./a:/build -w /build nodejs npm install
$ mv a/package-lock.json a/package.json
$ docker run --rm -v ./a:/build -w /build nodejs npm run dev

Dockerfile や、事前に必要な永続ファイルなどの情報があれば、もう少し切り分けできるかもです

1Like
$ docker run --rm -v $(pwd):/build -w /build nodejs npm install

これはただ単にpwdの位置にpackage.jsonファイルがないのにやってますよね?

$ docker run --rm -v $(pwd):/build -w /build nodejs npm run dev

...
...
npm ERR! enoent ENOENT: no such file or directory, open '/build/package.json'
...

そしてpackage.jsonにあるはずのdevscriptを動かそうとしてますよね?

package-lock.json→package.jsonに変更して

これは全く意味がないです。

$ docker run --rm -v $(pwd):/build -w /build nodejs npm run dev
  1. docker run --rm dockerを走らせるが、終了時にコンテナを残さないで
  2. -v $(pwd):/build dockerコンテナの/buildpwdをマウントしておいて
  3. -w /build dockerコンテナの起動時は/buildから始めて
  4. nodejs npm run dev nodejsというイメージを起動して、そしてnpm run devをコマンドとして走らせて

多分色々勘違いしていると思うので、素直にMacなりlinuxなりでコマンドを1つ1つ(pwdとかそういう基礎から)理解することから始めたほうが近道だと思います。

どうしてもdocker内で動かしたいなら下のようなコマンドでコンテナの中に入ってから色々いじってみるほうが分かりやすいと思います。

$ docker run --rm -v $(pwd):/build -it nodejs bash
/build # <- dockerコンテナ内

1Like

Your answer might help someone💌