远程Git上下文构建Node.js Docker镜像时出现package.json路径错误
问题描述
计划为Node.js应用创建Docker构建,指定包含Dockerfile的远程Git仓库URL作为构建上下文。执行docker-compose up --build时,镜像构建成功,但容器启动时出现错误:npm ERR! path /code/package.json。
我的Dockerfile
FROM node:16.15.0 as develop-stage WORKDIR /code COPY package.json . # 使用package-lock文件固定安装模块的版本 COPY package-lock.json . RUN npm install COPY . .
我的docker-compose配置
version: '3.8' services: my-service: container_name: my-service build: context: 'https://username:token@bitbucket.org/abc/test-repo' dockerfile: Dockerfile volumes: - .:/code - /code/node_modules command: nodemon index.js networks: - my-network expose: - 9608 ports: - 9608:9608 restart: on-failure volumes: my-data: external: false networks: my-network: external: false
解决方案
问题根源
构建阶段已经将远程仓库的package.json和代码复制进镜像,但启动容器时,volumes中的- .:/code将本地当前目录挂载到容器的/code目录,直接覆盖了镜像内原本的文件。如果本地当前目录没有package.json,容器内自然找不到该文件,触发npm报错。
解决办法
- 无需本地代码热重载场景:直接删除
volumes里的- .:/code挂载项。镜像已包含远程仓库的完整代码,不需要用本地目录覆盖。修改后volumes仅保留- /code/node_modules即可(若不需要保留容器内的node_modules,这条也可移除)。 - 需要本地挂载调试场景:先将远程Git仓库克隆到本地目录,再修改
docker-compose.yml的build.context为本地项目路径(比如./test-repo),确保本地目录存在package.json和完整项目文件后,再执行构建启动命令。
内容的提问来源于stack exchange,提问作者power-cut
相关产品推荐
相关产品推荐

