使用模块进行构建,在 Alpine 图像下失败但在 Windows 下没问题
Go build, with module, fails under an Alpine image but is fine under Windows
我是运行连接ETCD的小测试。此测试导入 go.etcd.io/etcd/clientv3
,借助 go modules 的魔力,拉取 github.com/coreos/go-systemd/journal
.
我使用go module来管理依赖。
首先,我 运行 我在 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
上
build github.com/nirekin/etcd: cannot load
github.com/coreos/go-systemd/journal: git init --bare in
/go/pkg/mod/cache/vcs/1f60ff15ab3093bffd86f4a985673d120db13dabca39c597aaa5016031c601a6:
exec: "git": executable file not found in $PATH
然后我用下面的docker文件构建了一个新图像,以便在golang:1.13-alpine
中添加git
Docker文件:
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
我得到了这个错误:
build github.com/myuser/etcd: cannot load
github.com/coreos/go-systemd/journal: no matching versions for query
"latest"
我不明白为什么同一个 1.13 版本在 windows 和 alpine 下的行为不同?
我做错了什么或遗漏了什么吗?
最终重现此强文本的文件:
转码:
package main
import (
"log"
"time"
"go.etcd.io/etcd/clientv3"
)
func main() {
c := clientv3.Config{
Endpoints: []string{"http://127.0.0.1:2379"},
DialTimeout: 5 * time.Second,
}
log.Printf("%v", c)
}
go.mod:
module github.com/nirekin/etcd
go 1.13
require (
github.com/coreos/etcd v3.3.17+incompatible // indirect
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f // indirect
github.com/gogo/protobuf v1.3.1 // indirect
github.com/google/uuid v1.1.1 // indirect
go.etcd.io/etcd v3.3.17+incompatible
go.uber.org/zap v1.13.0 // indirect
google.golang.org/grpc v1.25.1 // indirect
)
我是运行连接ETCD的小测试。此测试导入 go.etcd.io/etcd/clientv3
,借助 go modules 的魔力,拉取 github.com/coreos/go-systemd/journal
.
我使用go module来管理依赖。
首先,我 运行 我在 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
build github.com/nirekin/etcd: cannot load github.com/coreos/go-systemd/journal: git init --bare in /go/pkg/mod/cache/vcs/1f60ff15ab3093bffd86f4a985673d120db13dabca39c597aaa5016031c601a6: exec: "git": executable file not found in $PATH
然后我用下面的docker文件构建了一个新图像,以便在golang:1.13-alpine
git
Docker文件:
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
我得到了这个错误:
build github.com/myuser/etcd: cannot load github.com/coreos/go-systemd/journal: no matching versions for query "latest"
我不明白为什么同一个 1.13 版本在 windows 和 alpine 下的行为不同?
我做错了什么或遗漏了什么吗?
最终重现此强文本的文件:
转码:
package main
import (
"log"
"time"
"go.etcd.io/etcd/clientv3"
)
func main() {
c := clientv3.Config{
Endpoints: []string{"http://127.0.0.1:2379"},
DialTimeout: 5 * time.Second,
}
log.Printf("%v", c)
}
go.mod:
module github.com/nirekin/etcd
go 1.13
require (
github.com/coreos/etcd v3.3.17+incompatible // indirect
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f // indirect
github.com/gogo/protobuf v1.3.1 // indirect
github.com/google/uuid v1.1.1 // indirect
go.etcd.io/etcd v3.3.17+incompatible
go.uber.org/zap v1.13.0 // indirect
google.golang.org/grpc v1.25.1 // indirect
)