执行docker compose up容器化项目时出现/app/build未找到的缓存密钥错误
容器化项目时
docker compose up报错:找不到/app/build目录 执行docker compose up容器化项目时触发错误,提示/app/build目录不存在,尝试修改COPY路径为/app/install-all后问题依旧。
相关配置文件
Dockerfile
FROM node:gallium-alpine3.18 as build WORKDIR /app COPY package.json . COPY package-lock.json . RUN npm install COPY . . RUN npm run install-all # Stage 2 FROM nginx WORKDIR /usr/share/nginx/html RUN rm -rf ./* RUN echo ${PWD} && ls -la COPY --from=build /app/build . ENTRYPOINT ["nginx", "-g", "daemon off;"]
docker-compose.yml
version: '3.8' services: app: container_name: product_container image: product_image build: context: . ports: - 8000:8000
npm可用脚本
{ "scripts": { "install-all": "cd server && npm i && cd .. && cd client && npm i", "server": "cd server && npm start", "server-dev": "cd server && npm run dev", "client-dev": "cd client && vite", "client-build": "cd client && vite build", "client-preview": "cd client && vite preview" } }
错误信息
[+] Running 1/1 ! app Warning 4.6s [+] Building 15.2s (19/19) FINISHED => [app internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 376B 0.0s => [app internal] load .dockerignore 0.0s => => transferring context: 58B 0.0s => [app internal] load metadata for docker.io/library/nginx:latest 3.3s => [app internal] load metadata for docker.io/library/node:gallium-alpine3.18 2.5s => [app auth] library/node:pull token for registry-1.docker.io 0.0s => [app auth] library/nginx:pull token for registry-1.docker.io 0.0s => [app build 1/7] FROM docker.io/library/node:gallium-alpine3.18@sha256:bca38851a77922e849907c57588bdf3dfcf95725186d7c26cdfd64da730989d3 0.0s => [app internal] load build context 10.8s => => transferring context: 6.56MB 10.3s => [app stage-1 1/5] FROM docker.io/library/nginx@sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305 0.0s => CACHED [app stage-1 2/5] WORKDIR /usr/share/nginx/html 0.0s => CACHED [app stage-1 3/5] RUN rm -rf ./* 0.0s => CACHED [app stage-1 4/5] RUN echo ${PWD} && ls -la 0.0s => CACHED [app build 2/7] WORKDIR /app 0.0s => CACHED [app build 3/7] COPY package.json . 0.0s => CACHED [app build 4/7] COPY package-lock.json . 0.0s => CACHED [app build 5/7] RUN npm install 0.0s => CACHED [app build 6/7] COPY . . 0.0s => CACHED [app build 7/7] RUN npm run install-all 0.0s => ERROR [app stage-1 5/5] COPY --from=build /app/build . 0.0s ------ > [app stage-1 5/5] COPY --from=build /app/build .: ------ failed to solve: failed to compute cache key: failed to calculate checksum of ref a02f4bce-0632-4ac7-b1fc-91d8f44501e2::vctjyp0apfdei1qda0qpul22h: "/app/build": not found
解决方案
问题根源
- Dockerfile的build阶段仅执行了
install-all脚本,该脚本仅完成server和client的依赖安装,并未触发前端项目的构建命令,因此/app/build目录根本不存在。 - 即使执行构建,
client-build脚本是在client目录下执行vite build,生成的产物目录是/app/client/build,而非根目录的/app/build。 - docker-compose中端口映射错误,nginx默认监听80端口,当前配置的
8000:8000无法正确映射。
修正步骤
- 修改Dockerfile,在build阶段添加前端构建命令,并修正COPY路径:
FROM node:gallium-alpine3.18 as build WORKDIR /app COPY package.json . COPY package-lock.json . RUN npm install COPY . . RUN npm run install-all # 新增前端构建命令 RUN npm run client-build # Stage 2 FROM nginx WORKDIR /usr/share/nginx/html RUN rm -rf ./* COPY --from=build /app/client/build . # 修正为client下的build目录 ENTRYPOINT ["nginx", "-g", "daemon off;"]
- 修正docker-compose.yml的端口映射:
version: '3.8' services: app: container_name: product_container image: product_image build: context: . ports: - 8000:80 # 映射到nginx默认的80端口
- 重新执行
docker compose up --build,即可完成容器化构建。
内容的提问来源于stack exchange,提问作者S.Go
相关产品推荐
相关产品推荐

