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

Docker构建时COPY步骤无法找到auth-svc目录的问题排查

Docker Compose构建Go多服务容器COPY目录失败的解决方案

问题解答

1. 为何无法找到auth-svc目录?

核心原因是项目根目录的.dockerignore规则过于严格,将auth-svc目录排除在了构建上下文之外。从错误信息中transferring context: 54B可以看出,构建上下文仅包含少量文件(大概率只有go.mod和go.sum),导致Docker执行COPY auth-svc ./auth-svc时找不到目标目录。

需明确:Dockerfile中COPY的源路径是相对于构建上下文,而非Dockerfile自身的存放路径,你的路径写法本身是正确的,问题不在路径语法。

2. docker-compose.yml的构建上下文设置是否有问题?

没有问题。你在/home/sohel/go/src/github.com/bizspace/deploy/docker目录下运行命令,context: ../..恰好指向项目根目录/home/sohel/go/src/github.com/bizspace/,这个上下文包含了所有服务目录和根依赖文件,完全符合Go多服务项目的构建需求。

3. 如何正确配置确保构建成功?

分两步修正:

步骤1:修正根目录的.dockerignore文件

打开项目根目录的.dockerignore,调整规则以允许服务目录被纳入构建上下文。如果原来的规则是全局忽略(比如包含*),需添加例外:

*
# 保留根依赖文件
!go.mod
!go.sum
# 允许复制服务目录
!auth-svc/
!api-gateway/

步骤2:确认Dockerfile的COPY路径(可选优化)

你的auth-svc/deploy/Dockerfile写法本身正确,可微调以更清晰:

# Build stage
FROM golang:1.22-alpine AS builder

WORKDIR /app

# 复制根目录的依赖清单
COPY go.mod go.sum ./
RUN go mod download

# 复制auth-svc服务代码(路径相对于构建上下文:项目根目录)
COPY auth-svc/ ./auth-svc/

# 构建二进制文件
RUN CGO_ENABLED=0 GOOS=linux go build -o /bin/auth-svc ./auth-svc/cmd/main.go

# Final stage
FROM scratch
COPY --from=builder /bin/auth-svc /bin/auth-svc
ENTRYPOINT ["/bin/auth-svc"]

步骤3:重新构建

回到deploy/docker目录,重新执行构建命令:

docker-compose up --build

额外验证方法

如果仍有问题,可单独构建auth-svc服务以排除docker-compose的影响:

cd /home/sohel/go/src/github.com/bizspace/deploy/docker
docker build --context ../.. --file auth-svc/deploy/Dockerfile .

内容的提问来源于stack exchange,提问作者Asaduzzaman Sohel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:47:04