我如何在不运行的情况下从Docker构建中复制结果

时间:2018-11-30 11:33:38

标签: docker go dockerfile

我想对go文件等进行一些编译,并且想将生成的二进制文件等传输到主机。 因此,每个人都不需要进行本地设置,他们只需运行docker命令,输出就会在docker中编译并传输到主机。

FROM golang:1.11-alpine as builder
COPY src /go/src/project/src
RUN cd /go/src/project/src && go build -o myBin

现在,我希望将myBin转移到主机。有任何想法吗? PS:我希望在不运行容器的情况下完成此操作。如果只运行构建可以做到这一点,那就最好了!

1 个答案:

答案 0 :(得分:0)

您不必run一个容器,但是必须create一个容器才能随后从该容器cp(复制)二进制文件。所需的2条命令是:

  • docker container create ...
  • docker container cp $container_name:/path/in/container /path/on/host

示例:

main.go:

package main

import "fmt"

func main() {
  fmt.Println("hello world")
}

Dockerfile:

FROM golang:1.10-alpine3.7

WORKDIR /go/src/app
COPY . .

RUN go get -d -v ./...
RUN go install -v ./...

CMD ["app"]

构建-创建temp容器-复制二进制文件-清理:

docker build -t go-build-test .
docker container create --name temp go-build-test
docker container cp temp:/go/bin/app ./
docker container rm temp

二进制文件已复制到您的当前文件夹:

~/docker_tests/go-build-test$ ls
app  Dockerfile  main.go
~/docker_tests/go-build-test$ ./app
hello world