我在 Windows 10 上运行 Docker Desktop。我的桌面上有一个文件夹,其结构为:
├── cab/
│ ├── backend/
│ │ ├── Dockerfile
│ │ └── (the rest of my backend java application)
│ ├── frontend/
│ │ ├── Dockerfile
│ │ └── (the rest of my frontend react application)
│ ├── 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:
这是我在前端的 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
我不确定这些错误是什么意思 - 既不是输出顶部的 http2 服务器错误,也不是 COPY 的空白输出,也不是找不到“/src”。我该怎么办?
事实证明错误出在我的上下文参数上。我必须将 docker-compose.yml 文件更改为如下所示:
services:
mysql:
build:
context: ./mysql
dockerfile: ./Dockerfile
ports:
- "3306:3306"
networks:
- cab-booking
cab-frontend:
build:
context: ./frontend
dockerfile: ./Dockerfile
ports:
- "3000:3000"
networks:
- cab-booking
cab-backend:
build:
context: ./backend
dockerfile: ./Dockerfile
ports:
- "8080:8080"
networks:
- cab-booking
networks:
cab-booking:
套用某人帮助我的话:Docker 在
/
目录中运行。但我的前端 Dockerfile 将文件放入 /home/cab-frontend/
目录中。
context: ./mysql
就像在运行 dockerfile 之前告诉 docker compose 到 cd
到 mysql
。
语境: 。如果你的 dockerfiles 都在你的根目录下就好了。