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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:35:00