Docker Compose构建时COPY报错及http2错误排查求助
解决Docker Compose构建时的HTTP2错误与COPY文件找不到问题
环境与目录结构
Windows 10系统,Docker Desktop,桌面cab目录结构如下:
├── cab/ │ ├── backend/ │ │ ├── Dockerfile │ │ └── (后端Java应用文件) │ ├── frontend/ │ │ ├── Dockerfile │ │ └── (前端React应用文件) │ ├── mysql/ │ │ ├── Dockerfile │ │ ├── schema.sql │ │ └── data.sql │ └── docker-compose.yml
配置文件内容
docker-compose.yml
services: mysql: build: context: . dockerfile: ./mysql/Dockerfile ports: - "3306:3306" networks: - cab-booking cab-frontend: build: context: . dockerfile: ./frontend/Dockerfile ports: - "3000:3000" networks: - cab-booking cab-backend: build: context: . dockerfile: ./backend/Dockerfile ports: - "8080:8080" networks: - cab-booking networks: cab-booking:
frontend/Dockerfile
FROM node:18-alpine WORKDIR /home/cab-frontend COPY package.json /home/cab-frontend/ RUN npm install COPY public/ /home/cab-frontend/public COPY src/ /home/cab-frontend/src CMD ["npm", "start"]
构建错误信息
执行docker-compose build时出现以下错误:
2024/05/06 15:12:58 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed 2024/05/06 15:12:58 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed 2024/05/06 15:12:58 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed [+] Building 0.0s (0/0) docker:default 2024/05/06 15:12:58 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed 2024/05/06 15:12:58 http2: server: error reading preface from client //./pipe/docker_engine: file has already been close[+] Building 0.9s (26/33) docker:default => [cab-backend internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 540B 0.0s => [mysql internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 311B 0.0s => [cab-backend internal] load metadata for docker.io/library/openjdk:21-jdk-slim 0.8s => [cab-backend internal] load metadata for docker.io/library/maven:3.9.6-amazoncorretto-21-al2023 0.8s => [cab-frontend internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 246B 0.0s => [mysql internal] load metadata for docker.io/library/mysql:8-oracle 0.0s => [mysql internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [cab-frontend internal] load metadata for docker.io/library/node:18-alpine 0.7s => CACHED [mysql 1/4] FROM docker.io/library/mysql:8-oracle 0.0s => [mysql internal] load build context 0.0s => => transferring context: 369B 0.0s => [mysql 2/4] COPY . . 0.1s => [mysql 3/4] ADD schema.sql /docker-entrypoint-initdb.d 0.1s => [mysql 4/4] ADD data.sql /docker-entrypoint-initdb.d 0.1s => [mysql] exporting to image 0.1s => => exporting layers 0.1s => => writing image sha256:6da7f28843817809bf2083f8e5b70c979458f25465f8f22c148f507a0ae63667 0.0s => => naming to docker.io/library/cab-mysql 0.0s => [cab-frontend internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [cab-backend internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [cab-frontend internal] load build context 0.0s => => transferring context: 2B 0.0s => [cab-frontend 1/6] FROM docker.io/library/node:18-alpine@sha256:4837c2ac8998cf172f5892fb45f229c328e4824c43c85 0.0s => [cab-backend build 1/7] FROM docker.io/library/maven:3.9.6-amazoncorretto-21-al2023@sha256:8d653ed25358201bdb 0.0s => CANCELED [cab-backend internal] load build context 0.1s => => transferring context: 136.38kB 0.0s => [cab-backend stage-1 1/2] FROM docker.io/library/openjdk:21-jdk-slim@sha256:7072053847a8a05d7f3a14ebc778a90b3 0.0s => CACHED [cab-frontend 2/6] WORKDIR /home/cab-frontend 0.0s => ERROR [cab-frontend 3/6] COPY package.json /home/cab-frontend/ 0.0s => CACHED [cab-frontend 4/6] RUN npm install 0.0s => ERROR [cab-frontend 5/6] COPY public/ /home/cab-frontend/public 0.0s => ERROR [cab-frontend 6/6] COPY src/ /home/cab-frontend/src 0.0s ------ > [cab-frontend 3/6] COPY package.json /home/cab-frontend/: ------ ------ > [cab-frontend 5/6] COPY public/ /home/cab-frontend/public: ------ ------ > [cab-frontend 6/6] COPY src/ /home/cab-frontend/src: ------ failed to solve: failed to compute cache key: failed to calculate checksum of ref 2f1ad847-6c62-4f2a-91c3-e58ef7209d25::ibusmsuotmr2zt8ktmd9hc1dt: "/src": not found
问题分析与解决步骤
1. 核心问题:"/src"未找到
错误根源是构建上下文路径错误:
- docker-compose中
cab-frontend的context设为.(即cab根目录),Docker执行COPY时会在cab根目录下找src/、public/、package.json,但这些文件实际在cab/frontend/目录下。
解决方法:
修改docker-compose.yml中cab-frontend的build配置,将上下文改为frontend目录:
cab-frontend: build: context: ./frontend dockerfile: Dockerfile ports: - "3000:3000" networks: - cab-booking
同时可以简化frontend/Dockerfile的COPY路径(因为WORKDIR已设为目标目录):
FROM node:18-alpine WORKDIR /home/cab-frontend COPY package.json . RUN npm install COPY public/ public/ COPY src/ src/ CMD ["npm", "start"]
2. HTTP2服务器错误
这类错误是Windows上Docker Desktop的通信小异常,通常不影响核心构建流程。解决完文件路径问题后,尝试:
- 重启Docker Desktop
- 重新执行
docker-compose build - 检查Docker Desktop资源分配是否充足
3. COPY步骤空白输出
这是因为构建因文件找不到提前终止,导致COPY步骤未实际执行。解决核心路径问题后,构建正常时这部分会显示正常的执行日志。
内容的提问来源于stack exchange,提问作者Miryafa
相关产品推荐
相关产品推荐

