在 dockerfile 中运行 go build main.go

我正在尝试go build hello.go在 dockerfile 中运行,因为


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毫无问题地运行该命令。


为什么会这样?


拉风的咖菲猫
浏览 197回答 1
1回答

Qyouu

每个 RUN 命令都会启动一个具有干净环境和新默认工作目录的新 shell。特别是,RUN cd ...作为一个孤立的步骤什么都不做。如果您确实需要更改 Dockerfile 中的目录,请将这两个步骤合二为一,或者使用指令WORKDIR使更改更加全局化。在 Go 存储库的特定情况下,由于有一个至少非常强烈鼓励的标准目录布局,我会使用它:FROM golangWORKDIR /go/src/github.com/me/myprogramCOPY . ./RUN go install .CMD ["/go/bin/myprogram"](一般来说,Go 处理整个目录或相关文件的“包”,而不一定是单个.go文件。)
打开App,查看更多内容
随时随地看视频慕课网APP