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/
のコメントを外してください。
私の愚かな間違いは、npmコマンドを実行する前にWORKDIR
を指定するのを忘れていたことでした...これが誰かにも役立つことを願っています! WORKDIR
がCMD
行に対して正確であることを確認してください...
明らかに、ここでの問題は、npm
がpackage.json
ファイルを見つけられないことです。
それで、なぜですか?
node:10
イメージまたはnode:Alpine
イメージは、bin
、dev
、etc
、home
で構成されるファイルシステムのスナップショットを取得しますそして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"]