You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dockerfile位于根目录子文件夹时如何正确指向package.json

Docker Compose构建报错找不到package.json的解决方法

目录结构

root/
  package.json
  app.js
docker/
  backend.Dockerfile
  docker-compose.yaml

报错信息

> [4/4] RUN npm install:
#8 0.564 npm ERR! code ENOENT
#8 0.565 npm ERR! syscall open
#8 0.565 npm ERR! path /usr/src/app/package.json
#8 0.565 npm ERR! errno -2
#8 0.566 npm ERR! enoent ENOENT: no such file or directory, open '/usr/src/app/package.json'
#8 0.566 npm ERR! enoent This is related to npm not being able to find a file.
#8 0.566 npm ERR! enoent 
#8 0.567 
#8 0.567 npm ERR! A complete log of this run can be found in:
#8 0.567 npm ERR!     /root/.npm/_logs/2022-12-27T09_15_42_645Z-debug-0.log

当前配置文件

backend.Dockerfile

FROM node:18

WORKDIR /app

COPY ../ .

RUN npm install

EXPOSE 8000

CMD ["npm", "run", "dev"]

docker-compose.yaml

version: '3'

services:
  app:
    build: 
      context: .
      dockerfile: backend.Dockerfile
    volumes:
      - ../:/app:cached
    ports:
      - "8000:8000"

问题原因

Docker构建时有上下文路径限制:构建过程只能访问上下文路径范围内的文件,无法访问上下文之外的目录。你当前在docker目录下运行docker-compose,build.context设为.(即docker目录),此时Dockerfile里的COPY ../ .试图访问上下文之外的root目录,这是Docker不允许的操作,导致复制失败后找不到package.json。

解决步骤

  1. 修改docker-compose.yaml的构建上下文
    将build.context改为../(根目录),同时指定Dockerfile的完整相对路径:
version: '3'

services:
  app:
    build: 
      context: ../
      dockerfile: docker/backend.Dockerfile
    volumes:
      - ../:/app:cached
    ports:
      - "8000:8000"
  1. 修改Dockerfile的COPY命令
    此时构建上下文是根目录,直接复制上下文内的所有文件到容器的/app目录即可:
FROM node:18

WORKDIR /app

COPY . .

RUN npm install

EXPOSE 8000

CMD ["npm", "run", "dev"]

修改完成后,构建时Docker就能正确获取根目录下的package.json,npm install可正常执行。

内容的提问来源于stack exchange,提问作者Unamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:20:41