【问题标题】:How can I copy results from docker build without running如何在不运行的情况下从 docker build 复制结果
【发布时间】:2019-05-02 13:29:42
【问题描述】:

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

【问题讨论】:

  • 你为什么不想运行一个容器?有什么不同? docker run build-my-go-project.
  • 你需要构建镜像吗?或者你只是想使用 docker 来执行你的编译?
  • 如果我确实选择运行 docker,我将不得不编写 bash 脚本 1. 运行它,然后 2. 将 bin 复制到主机 3. 杀死容器 这就是你的建议 @tkausl 吗?还有没有其他办法?
  • 第 2 步和第 3 步你不需要做。一次运行可以完成所有三件事。

标签: docker go dockerfile


【解决方案1】:

您不必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

【讨论】:

  • 是的,@tgogos 这是一种方法。为此,我将编写一个 bash 脚本并运行它。想知道我是否可以在Dockerfile 中做到这一点。这样我就不用写 bash 脚本了?
  • @mayankcpdixit 到目前为止,仅使用 Dockerfile 是无法做到这一点的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
相关资源
最近更新 更多