Docker部署问题:npm无法找到package.json文件求助
解决Docker构建时npm找不到package.json的问题
问题场景
项目目录结构如下:
app --docker-compose ----docker-compose.yml ----Dockerfile --package.json --...
使用docker-compose构建容器时,出现npm无法找到package.json的错误,但将docker-compose.yml和Dockerfile移到项目根目录后,构建运行一切正常。
配置文件内容
docker-compose.yml
services: dev: container_name: animals_api_dev image: animals-api-dev:1.0.0 build: context: ../ target: development dockerfile: ./docker-compose/Dockerfile command: npm run start:debug ports: - ${SERVER_PORT}:${SERVER_PORT} environment: - MONGO_HOST=${MONGO_HOST} - MONGO_PORT=${MONGO_PORT} - MONGO_USERNAME=${MONGO_USERNAME} - MONGO_PASSWORD=${MONGO_PASSWORD} networks: - animals-api-network depends_on: - mongo-database - mongo-express - redis volumes: - .:/usr/src/app restart: unless-stopped networks: animals-api-network: driver: bridge
Dockerfile
FROM node:18-alpine As development WORKDIR /usr/src/app COPY --chown=node:node package*.json ./ RUN npm ci COPY --chown=node:node . . USER node
问题原因
错误出在docker-compose.yml的volumes配置上:
- 由于
docker-compose.yml位于docker-compose文件夹内,配置中的.代表当前目录(即docker-compose文件夹)。 - 这个目录被挂载到容器的
/usr/src/app后,完全覆盖了Docker构建阶段复制到该目录的项目文件(包括根目录的package.json)。 - 容器启动后执行
npm run start:debug时,/usr/src/app里只有docker-compose文件夹的内容,自然找不到package.json。
解决方案
修改docker-compose.yml中的volumes配置,将挂载路径改为项目根目录:
volumes: - ../:/usr/src/app
这样挂载的是项目根目录(app文件夹),与构建时指定的context: ../保持一致,容器内的/usr/src/app就能正确包含package.json及其他项目文件,npm命令可以正常执行。
内容的提问来源于stack exchange,提问作者megabolo
相关产品推荐
相关产品推荐

