Docker构建Golang应用报错:cannot find module providing package
解决Go项目Docker构建时找不到子包的问题
问题原因
你的Dockerfile仅复制了根目录下的*.go文件,而项目的子包(如config、auth等)存放在独立目录中,这些子目录没有被复制到容器内,导致Go编译器无法找到子包代码,从而抛出模块缺失错误。
解决方案
修改Dockerfile中的复制命令,将整个项目目录的内容(包括所有子包目录)复制到容器工作目录:
# syntax=docker/dockerfile:1 FROM golang:1.22.2 WORKDIR /app # 下载依赖 COPY go.mod go.sum ./ RUN go mod download # 复制整个项目代码(包括所有子目录) COPY . . # 构建可执行文件 RUN CGO_ENABLED=0 GOOS=linux go build -o /sac EXPOSE 8080 CMD ["/sac"]
优化建议
为避免复制冗余文件(如.git、vendor、临时文件等),可以在项目根目录创建.dockerignore文件,内容如下:
.git vendor tmp *.log
验证步骤
- 保存修改后的Dockerfile和
.dockerignore文件 - 重新执行构建命令:
docker build --tag sac-server . - 构建成功后运行容器测试:
docker run -p 8080:8080 sac-server
内容的提问来源于stack exchange,提问作者Michael Brennan
相关产品推荐
相关产品推荐

