在dockerfile中运行go build main.go



我正试图在dockerfile中运行go build hello.go,作为

FROM golang
COPY hello.go /go/src/hello.go
RUN cd src/
RUN go build hello.go
RUN ./hello

一切都很顺利,直到go build命令,然后出现以下错误消息:

stat hello.go: no such file or directory
The command '/bin/sh -c go build hello.go' returned a non-zero code: 1

但是,如果我在dockerfile上注释最后两个命令并运行创建的映像,我就可以毫无问题地运行go build命令。

为什么会发生这种情况?

每个RUN命令都会启动一个具有干净环境和新默认工作目录的新shell。特别地,RUN cd ...作为一个孤立的步骤没有任何作用。

如果您确实需要更改Dockerfile中的目录,请将这两个步骤合并为一个步骤,或者使用WORKDIR指令使更改更具全局性。

在Go存储库的特定情况下,由于有一个标准的目录布局,至少是非常受欢迎的,我会使用它运行:

FROM golang
WORKDIR /go/src/github.com/me/myprogram
COPY . ./
RUN go install .
CMD ["/go/bin/myprogram"]

(一般来说,Go处理相关文件的整个目录或"包",而不一定是单个.go文件。(

最新更新