我正在运行一个小型测试以连接到ETCD。此测试导入go.etcd.io/etcd/clientv3
女巫,借助go模块的魔力,拉起github.com/coreos/go-systemd/journal
。
我使用 go模块管理依赖项。
首先,我使用go version go1.13.1 windows/amd64
在Windows下运行了测试,一切都很好,并且按预期运行。
在那之后,由于打算将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 下会有所不同吗?
我是在做错什么还是错过了什么?
最终复制此文字的文件:
执行代码:
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
)