运行在dockerfile

时间:2018-12-20 00:44:18

标签: docker 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命令。

为什么会这样?

1 个答案:

答案 0 :(得分:3)

每个RUN命令都会使用干净的环境和新的默认工作目录启动一个新的Shell。尤其是,RUN cd ...作为隔离的步骤什么也没做。

如果确实需要更改Dockerfile中的目录,则可以将两个步骤组合为一个步骤,也可以使用WORKDIR指令来更全局地进行更改。

在Go存储库的特定情况下,由于至少强烈建议使用standard directory layout,因此我会使用它:

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

(通常,Go处理相关文件的整个目录或“包”,而不必处理单个.go文件。)