在多阶段构建中在docker容器中使用golang

时间:2018-11-29 09:48:28

标签: docker go dockerfile

我想使用多阶段构建,最后希望在运行容器中包含Golang。 当我运行容器并执行版本时,出现错误“ unknown go”

# build stage
FROM golang:1.11.2-alpine3.8 AS builder-env



ENV CGO_ENABLED=0
ENV GOOS=linux


ADD https://github.com/golang/dep/releases/download/v0.5.0/dep-linux-amd64 /usr/bin/dep
RUN chmod +x /usr/bin/dep

RUN mkdir -p $GOPATH/src/github/mtp/myproj
WORKDIR  $GOPATH/src/github/mtp/myproj


COPY Gopkg.toml Gopkg.lock ./


RUN dep ensure --vendor-only

COPY . ./



RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix nocgo -o /myproj .


FROM alpine:latest
RUN mkdir /data

COPY --from=builder-env myproj ./

我可以做这样的事情来使其工作,但这是一个不错的选择吗?

FROM alpine:latest
RUN mkdir /data
RUN update-ca-certificates && \
    apk add go 

COPY --from=builder-env myproj ./

1 个答案:

答案 0 :(得分:2)

您不需要go可执行文件来运行已编译的程序,只需生成的二进制文件即可。如果您将缺少的CMD行添加到Dockerfile中

CMD ["./myproj"]

我希望它能正常工作。