Dockerfile用docker build构建失败但docker-compose可正常运行
问题原因与解决方案
核心问题
你使用的构建命令 docker build - < Dockerfile 没有传递构建上下文。
当用管道方式传递Dockerfile时,Docker守护进程只能获取到Dockerfile本身,无法访问当前目录下的go.mod、go.sum等本地文件,因此COPY步骤会失败。而docker-compose默认会将当前目录作为构建上下文传递给Docker,所以能正常找到这些文件完成构建。
解决方案
方法1:使用标准构建命令(推荐)
直接在项目根目录执行:
docker build .
该命令会自动将当前目录作为构建上下文,Docker就能访问到go.mod、go.sum以及其他需要复制的文件。
方法2(可选):带上下文的管道构建(不推荐)
如果一定要用管道方式,需要先将当前目录打包后传递给Docker:
tar -c . | docker build -
不过这种写法冗余,不如方法1简洁直观。
额外优化建议
你的Dockerfile中COPY go.mod go.sum bin/这一行,因已设置WORKDIR /bin,可以简化为:
COPY go.mod go.sum ./
这样更清晰,避免路径混淆。
内容的提问来源于stack exchange,提问作者R. Barrett
相关产品推荐
相关产品推荐

