web-dev-qa-db-ja.com

Dockerエラー:そのようなファイルまたはディレクトリはありません。「/ package.json」を開いてください

Docker内でノードイメージを実行しようとしていますが、次のエラーが発生します。

npm WARN saveError ENOENT: no such file or directory, open '/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/package.json'
npm WARN !invalid#2 No description
npm WARN !invalid#2 No repository field.
npm WARN !invalid#2 No README data
npm WARN !invalid#2 No license field.

これが私のドッカーファイルです。すべてのプロジェクトファイルをコンテナーの/ home/app /フォルダーに配置します。

# Use an official node runtime as a parent image
FROM node:10

# Set the working directory to /home/app
#WORKDIR /home/app/

# Bundle app source
COPY . /home/app/

# If you are building your code for production
# RUN npm install --only=production
RUN npm install

# Make port 8000 available to the world outside this container
EXPOSE 8000

CMD npm run dev

Windowsを使用していて、hyper-Vを使用しています。私のpackage.jsonは私のDockerfileと同じレベルです。

何か案は?

ありがとう

npm installコマンドを実行すると、作業ディレクトリはおそらく/であり、ここにpackage.jsonはありません。

Dockerfileの行WORKDIR /home/app/のコメントを外してください。

2
norbjd

私の愚かな間違いは、npmコマンドを実行する前にWORKDIRを指定するのを忘れていたことでした...これが誰かにも役立つことを願っています! WORKDIRCMD行に対して正確であることを確認してください...

0
Scott Williams

明らかに、ここでの問題は、npmpackage.jsonファイルを見つけられないことです。

それで、なぜですか?

node:10イメージまたはnode:Alpineイメージは、bindevetchomeで構成されるファイルシステムのスナップショットを取得しますそしてprocを一時的なコンテナの中に置きます。前述のファイルはどれもpackage.jsonではないことに気づきましたか?コンテナ内には存在しません。

したがって、前述のようにハードドライブのセグメントを持つコンテナがあり、残りのハードドライブとpackage.jsonファイルが置かれている場所にあり、コンテナと通信されていません。

イメージをビルドしているとき、プロジェクトディレクトリ内のファイルはコンテナ内で使用できません。 Dockerfile内で特に許可しない限り、これらのファイルのいずれかが使用可能であると想定することはできません。

次のようにpackage.jsonコマンドを実行しようとしたときに、npm installファイルがコンテナ内で確実に使用できるように、構成の1行を追加します。

# Specify base image
FROM node:Alpine

# Install some dependencies
COPY ./ ./
RUN npm install

# Setup default command
CMD ["npm", "start"]
0
Daniel