【发布时间】:2019-06-18 04:27:12
【问题描述】:
我正在使用 dockerfile 来构建 go 代码,并且尝试在 -ldflags 选项中传递 3 个选项。 其中两个标志来自 ENV 变量,我必须通过字符串插值或串联将它们注入到 -ldflags 内容中,但我不知道如何。
目标是在 main.go 的两个变量中注入 git 修订哈希和当前时间戳
这可以通过creating a file from dockerfile 使用“echo”命令来完成,但我想确保使用简单的变量插值/连接是不可能的
ENV GIT_REVISION $( git rev-parse --short HEAD )
ENV COMPILATION_TIMESTAMP $( date +%Y%m%dT%H:%M:%S )
RUN go get -d -v
// This one works:
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o myprogram .
// This one, with those variables, fails:
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags "-extldflags '-static' -X main.compiledOn=${COMPILATION_TIMESTAMP} -X main.gitRevisionHash=${GIT_REVISION}" -o myprogram .
【问题讨论】:
-
可能这是因为
RUN不是支持环境替换的Dockerfile命令之一:docs.docker.com/engine/reference/builder/…
标签: git go dockerfile