【问题标题】:RUN go build main.go in dockerfile在 dockerfile 中运行 go build main.go
【发布时间】:2018-12-20 08:56:37
【问题描述】:

我正在尝试在 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 命令。

为什么会这样?

【问题讨论】:

    标签: docker go


    【解决方案1】:

    每个 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 文件。)

    【讨论】:

      猜你喜欢
      • 2019-11-05
      • 1970-01-01
      • 2016-04-18
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 2013-10-14
      相关资源
      最近更新 更多