Go build,带模块,在 Alpine 镜像下失败,但在 Windows 下正常

我正在运行一个小测试来连接到 ETCD。这个测试导入go.etcd.io/etcd/clientv3 女巫,通过 go 模块的魔力,拉动github.com/coreos/go-systemd/journal.


我使用go 模块来管理依赖项。


首先,我在 Windows 下运行了测试,go version go1.13.1 windows/amd64一切都很好并且按预期运行良好。


之后,因为我的 etcd 客户端项目打算通过基于 alpine 的 Docker 镜像进行部署,所以我尝试使用 go 1.13 镜像golang:1.13-alpine来编译它


我用了 :


docker run --rm -v "/${PWD}":/go/src/ -w //go/src/ golang:1.13-alpine go build -o etcd

我遇到了第一个已知问题,告诉我该问题git未安装在golang:1.13-alpine


构建github.com/nirekin/etcd:无法加载github.com/coreos/go-systemd/journal:git init --bare in /go/pkg/mod/cache/vcs/1f60ff15ab3093bffd86f4a985673d120db13dabca39c597aaa5016031c601a6:exec:“git”:可执行文件在 $PATH 中找不到


然后我使用以下 docker 文件构建了一个新映像,以便git添加golang:1.13-alpine


Dockerfile:


FROM golang:1.13-alpine


RUN apk --update add git less openssh && \

    rm -rf /var/lib/apt/lists/* && \

    rm /var/cache/apk/*

使用我的新图像,我尝试再次编译


docker run --rm -v "/${PWD}":/go/src/ -w //go/src/ my/image go build -o etcd

我得到了这个错误:


构建 github.com/myuser/etcd:无法加载 github.com/coreos/go-systemd/journal:查询“最新”没有匹配的版本


我不明白为什么相同版本的 1.13在解决依赖关系时在windows和alpine下的行为不同?


我做错了什么或者遗漏了什么吗?


素胚勾勒不出你
浏览 114回答 1
1回答

潇潇雨雨

问题是go.etcd.io/etcd依赖于github.com/coreos/go-systemd/journallinux,它没有正确使用 go 模块。有两个问题(#321和#325)提交给项目,维护者承认该问题(但尚未解决)。建议的解决方案是将以下内容添加到go.mod:replace (   github.com/coreos/go-systemd => github.com/coreos/go-systemd/v22 latest )然后run go tidy。(容器内)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go