我想对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:我希望在不运行容器的情况下完成此操作。如果只运行构建可以做到这一点,那就最好了!
答案 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