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

标签 docker go dockerfile

我想使用多阶段构建,我希望最后在运行的容器中包含 Golang。 当我运行容器并执行 go version 时,出现错误“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 ./

最佳答案

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

CMD ["./myproj"]

我希望它能正常工作。

关于docker - 在多阶段构建的 docker 容器中使用 golang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53536088/

相关文章:

docker - 如何停止Docker容器,以便使用相同命令重新运行?

docker - 使用 systemd 套接字激活启动 Docker 容器?

postgresql - 与 Google Cloud Postgres 的 SSL 连接

bash - Dockerfile 'FROM'命令未执行一行

.net - Docker 和 Octopus Deploy 有什么区别

python - Kubernetes部署内存占用高

go - 使用 "/"字符修补 kubernetes 标签

excel - 如何在go中读取excel文件?

https - 在 dotnet core docker 容器中安装证书

nginx - Docker:如何管理开发和生产设置?