Как я могу скопировать результаты из сборки Docker без запуска - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу сделать некоторые компиляции из моих файлов 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 голосов
/ 30 ноября 2018

Вам не нужно 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
...