如何在Docker容器退出前将构建生成的二进制文件复制到宿主机?
解决Docker构建后获取二进制文件的问题
下面是几种可行的解决方法,按需选择:
方法1:使用卷挂载(最推荐)
直接将宿主机目录挂载到容器内,构建时指定二进制文件输出到挂载目录,构建完成后宿主机即可直接获取文件:
docker run --rm -v $(pwd):/output builder /bin/sh -c 'cd /go/project; go build -o /output/main main.go'
--rm:容器执行完成后自动删除,避免残留无用容器-v $(pwd):/output:把宿主机当前工作目录挂载到容器的/output目录-o /output/main:指定Go编译输出路径为挂载目录,编译完成后宿主机当前目录会生成main文件
方法2:让容器保持运行后复制文件
先启动容器后台运行,构建完成后让容器保持存活,复制文件后再清理容器:
# 后台启动容器,构建完成后用tail -f保持运行 docker run -d --name temp-builder builder /bin/sh -c 'cd /go/project; go build main.go; tail -f /dev/null' # 复制容器内的二进制文件到宿主机当前目录 docker cp temp-builder:/go/project/main . # 停止并删除临时容器 docker stop temp-builder && docker rm temp-builder
方法3:通过标准输出导出文件
将容器内的二进制文件内容输出到标准输出,宿主机直接重定向到本地文件:
docker run --rm builder /bin/sh -c 'cd /go/project; go build main.go; cat main' > main
这种方式无需挂载卷或保留容器,直接通过管道完成文件传输。
内容的提问来源于stack exchange,提问作者gmalesux111
相关产品推荐
相关产品推荐

