登录
首页 >  Golang >  Go问答

构建多阶段的 Docker 容器并在其中使用 Golang

来源:stackoverflow

时间:2024-03-22 18:09:25 350浏览 收藏

构建多阶段 Docker 容器时,作者希望在容器中使用 Golang,但遇到了错误。作者最初尝试使用多阶段构建,但在运行容器并执行“go 版本”命令时收到“unknown go”错误。作者提供了一个可能的解决方案,即添加缺少的“CMD”行,以运行已编译的二进制文件。

问题内容

我想使用多阶段构建,并且我希望最后我将在运行的容器中包含 golang。 当我运行容器并执行 go 版本时,我收到错误“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 容器并在其中使用 Golang》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>