【问题标题】:Run GOLANG in Docker image FROM Terraform在 Docker 镜像中从 Terraform 运行 GOLANG
【发布时间】:2022-01-18 22:55:45
【问题描述】:

我的理解是 Terraform Docker 映像来自 Go (Golang) 基础映像。我正在尝试使用 Terraform 图像作为基础来构建自己的图像,因此我可以在运行 Terraform 之前运行一些自定义 Go 命令。但是,当我尝试运行 Go 时,找不到它。

FROM hashicorp/terraform:1.1.3

WORKDIR /app

COPY go.mod ./
COPY go.sum ./
COPY someotherterraformfiles.tf ./

RUN echo $(ls)

RUN go mod download

错误日志...

Step 5/6 : RUN echo $(ls)
 ---> Running in a4333944d871
go.mod go.sum
Removing intermediate container a4333944d871
 ---> 173d8ba93215
Step 6/6 : RUN go mod download
 ---> Running in 4943df7818c2
/bin/sh: go: not found
The command '/bin/sh -c go mod download' returned a non-zero code: 127

如何让我的go 命令正常工作?

【问题讨论】:

  • 原来 terraforms github 项目上的 dockerfile 并不能代表 dockerhub 上的分布,前者是 golang,后者是 linux。

标签: docker go dockerfile terraform


【解决方案1】:

您的基础镜像hashicorp/terraform:1.1.3 是在 Alpine Linux 上构建的,没有安装 Go。

解决方案是在使用 Go 之前安装它。这可以通过将RUN apk add go 添加到上面使用go CLI 工具的行来完成。

FROM hashicorp/terraform:1.1.3

RUN apk add go

WORKDIR /app

COPY go.mod ./
COPY go.sum ./
COPY someotherterraformfiles.tf ./

RUN echo $(ls)

RUN go mod download

【讨论】:

  • 此外,如果您尝试将构建的可执行文件放入映像中而不是在映像中构建,请查看 Docker 多阶段构建。通过这样做,您可以避免在 Dockerfile 生成的映像中安装 Go。 docs.docker.com/develop/develop-images/multistage-build
  • Maaaaan 我真的以为基础镜像是 GO :o 谢谢你帮我省了几个小时的挠头。
  • 这让我很困惑。 100%不反对,只是想了解。 dockerfile 不是显示它是从 golang:alpine 构建的吗?
  • 检查的一个好方法是docker run --rm -it --entrypoint=sh hashicorp/terraform:1.1.3,然后运行命令查看已安装的内容。还有cat /etc/os-release.
  • 这里有一个简短的总结:Terraform 放置在 Docker Hub 上的 Docker 镜像实际上包含一些不在其 GitHub 项目的Dockerfile 中的封闭源代码。他们还有一个旧版本的Dockerfile 上传到 Docker Hub。我做的 GitHub 问题:github.com/hashicorp/terraform/issues/30368
猜你喜欢
  • 2022-10-15
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 1970-01-01
相关资源
最近更新 更多