Golang中Docker构建失败:"The command '/bin/sh -c go-wrapper install # "go install -v ./..."' returned a non-zero code: 2"错误解决方法

Golang中Docker构建失败:"The command ‘/bin/sh -c go-wrapper install # “go install -v ./…”’ returned a non-zero code: 2"错误解决方法 我的构建今天开始失败,我这边没有任何更改,错误信息如下: “命令 ‘/bin/sh -c go-wrapper install # “go install -v ./…”’ 返回了非零代码:2” 我的 Dockerfile:

FROM golang:1.8
ENV VER 1b21dcc3dca54970b3599eea81df467d68e07596

# 安装解压工具
RUN apt-get -y update && apt-get -y install zip

# 下载并解压 Dapperdox 源代码
RUN cd /go/src/ && \
    curl -L -o dapperdox.zip https://github.com/wix-playground/dapperdox/archive/${VER}.zip && \
    unzip dapperdox.zip && \
    rm dapperdox.zip

# 编译
WORKDIR /go/src/dapperdox-${VER}

RUN go-wrapper download         # "go get -d -v ./..."
RUN go-wrapper install    # "go install -v ./..."

#........................
#........................

ENV BIND_ADDR 0.0.0.0:8080
EXPOSE 8080

尝试构建 Docker 镜像时出现:

.................
步骤 7/18 : RUN go-wrapper install    # "go install -v ./..."
 ---> 在 a8b9129c7020 中运行
+ exec go install -v
github.com/gorilla/context
github.com/gorilla/mux
github.com/justinas/alice
github.com/justinas/nosurf
github.com/ian-kent/envconf
github.com/wix/dapperdox/logger
github.com/ian-kent/gofigure/sources
github.com/wix/dapperdox/navigation
github.com/ian-kent/htmlform
github.com/unrolled/render
github.com/ian-kent/gofigure
golang.org/x/net/html/atom
github.com/gorilla/pat
golang.org/x/net/html
github.com/wix/dapperdox/config
github.com/russross/blackfriday
github.com/sergi/go-diff/diffmatchpatch
github.com/sourcegraph/annotate
github.com/sourcegraph/syntaxhighlight
github.com/shurcooL/highlight_go/vendor/go/scanner
# github.com/shurcooL/highlight_go/vendor/go/scanner
../github.com/shurcooL/highlight_go/vendor/go/scanner/scanner.go:281: s.file.AddLineColumnInfo 未定义(类型 *token.File 没有字段或方法 AddLineColumnInfo)
github.com/shurcooL/sanitized_anchor_name
github.com/go-openapi/analysis/internal
github.com/mailru/easyjson/jlexer
github.com/shurcooL/highlight_diff
github.com/mailru/easyjson/buffer
gopkg.in/yaml.v2
github.com/mailru/easyjson/jwriter
github.com/microcosm-cc/bluemonday
github.com/shurcooL/octicon
github.com/PuerkitoBio/urlesc
golang.org/x/text/transform
golang.org/x/text/unicode/bidi
golang.org/x/text/unicode/norm
golang.org/x/text/secure/bidirule
golang.org/x/text/width
golang.org/x/net/idna
github.com/asaskevich/govalidator
github.com/globalsign/mgo/internal/json
github.com/go-openapi/swag
github.com/PuerkitoBio/purell
github.com/go-openapi/errors
github.com/mitchellh/mapstructure
github.com/serenize/snaker
github.com/wix/dapperdox/handlers/specs
github.com/go-openapi/jsonpointer
github.com/globalsign/mgo/bson
github.com/wix/dapperdox/handlers/timeout
github.com/wix/dapperdox/network
github.com/go-openapi/jsonreference
github.com/wix/dapperdox/proxy
github.com/go-openapi/spec
github.com/go-openapi/strfmt
github.com/go-openapi/analysis
github.com/go-openapi/loads
命令 '/bin/sh -c go-wrapper install    # "go install -v ./..."' 返回了非零代码:2

请给出建议


更多关于Golang中Docker构建失败:"The command '/bin/sh -c go-wrapper install # "go install -v ./..."' returned a non-zero code: 2"错误解决方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

1.8 版本已经过时,你是否检查过你的依赖项是否仍然支持 1.8?

更多关于Golang中Docker构建失败:"The command '/bin/sh -c go-wrapper install # "go install -v ./..."' returned a non-zero code: 2"错误解决方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我什么都没做,问题自己就解决了。 谢谢

是的,正如Norbert所说。Golang仅支持最新的两个版本。因此不建议使用任何早于1.10的版本。请参阅此页面上的发布策略:

https://golang.org/doc/devel/release.html

无论如何,你都应该更新你的 Go 版本!

由于你的构建在 github.com/go-openapi/loads 处停止了,很可能是在构建它时失败了。我检查了他们的代码库,发现他们的 CI 只检查 1.9 及更新版本。因此,1.8 版本可能随时会出问题,而且没有人会意识到。

在我深入研究的这些项目中,似乎通常 CI 中只检查两个 Go 版本,即当前版本和当前版本的上一个版本,就目前而言,这些版本是 1.11 和 1.10。如果你落后两个版本,你的任何依赖项都可能随时出现问题。

这个错误是由于Go 1.8与某些依赖包版本不兼容导致的。具体错误信息显示:

../github.com/shurcooL/highlight_go/vendor/go/scanner/scanner.go:281: s.file.AddLineColumnInfo 未定义(类型 *token.File 没有字段或方法 AddLineColumnInfo)

AddLineColumnInfo 方法在较新版本的Go标准库中已被移除或修改。解决方案是升级到更新的Go版本,因为Go 1.8已经过时且不再受支持。

修改你的Dockerfile,使用更新的Go基础镜像:

FROM golang:1.21

ENV VER 1b21dcc3dca54970b3599eea81df467d68e07596

# 安装解压工具
RUN apt-get -y update && apt-get -y install zip

# 下载并解压 Dapperdox 源代码
RUN cd /go/src/ && \
    curl -L -o dapperdox.zip https://github.com/wix-playground/dapperdox/archive/${VER}.zip && \
    unzip dapperdox.zip && \
    rm dapperdox.zip

# 编译
WORKDIR /go/src/dapperdox-${VER}

RUN go mod init dapperdox
RUN go mod tidy
RUN go build -o dapperdox .

ENV BIND_ADDR 0.0.0.0:8080
EXPOSE 8080

CMD ["./dapperdox"]

如果项目需要保持原有的构建方式,也可以尝试使用Go 1.16:

FROM golang:1.16

ENV VER 1b21dcc3dca54970b3599eea81df467d68e07596

# 安装解压工具
RUN apt-get -y update && apt-get -y install zip

# 下载并解压 Dapperdox 源代码
RUN cd /go/src/ && \
    curl -L -o dapperdox.zip https://github.com/wix-playground/dapperdox/archive/${VER}.zip && \
    unzip dapperdox.zip && \
    rm dapperdox.zip

# 编译
WORKDIR /go/src/dapperdox-${VER}

RUN go get -d -v ./...
RUN go install -v ./...

ENV BIND_ADDR 0.0.0.0:8080
EXPOSE 8080

主要变化:

  1. 将基础镜像从golang:1.8升级到golang:1.21golang:1.16
  2. 使用Go modules替代旧的GOPATH工作模式
  3. 或者直接使用go build命令构建可执行文件

升级Go版本应该能解决这个兼容性问题。

回到顶部