【发布时间】:2018-03-14 20:23:48
【问题描述】:
根据执行二进制文件的位置,我在 mgo Dial 上得到不同的结果。
现在,我正在我的机器上构建(Fedora: uname -a: Linux localhost.localdomain 4.15.6-300.fc27.x86_64 #1 SMP Mon Feb 26 18:43:03 UTC 2018 x86_64 x86_64 x86_64 GNU /Linux) 使用以下命令:
$ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -ldflags '-s' -o myProgram
所以,如果我使用以下方法构建我的 docker 映像:
FROM centos
COPY myProgram "/usr/local/bin/myProgram"
ENTRYPOINT ["/usr/local/bin/myProgram"]
完美运行。这意味着我已连接到数据库。但是,如果我改为:
FROM debian
COPY myProgram "/usr/local/bin/myProgram"
ENTRYPOINT ["/usr/local/bin/myProgram"]
我发现无法访问服务器。我的目标是使用 golang 映像在 gitlab-ci 上编译应用程序,并在 alpine 容器上运行它。
问题是:为什么同一个可执行文件在不同的基础镜像上得到不同的结果?
mgo(或 go)是否使用与操作系统相关的东西?我的意思是,我的二进制文件似乎只能在基于红帽的发行版上运行(只是猜测,现在对我来说没有多大意义。)
拨号源代码:
dialInfo := &mgo.DialInfo{
Addrs: config.Addr,
Database: config.Auth,
Username: config.User,
Password: config.Pass,
ReplicaSetName: config.ReplicaSet,
Timeout: time.Second * 10,
}
dialInfo.DialServer = func(addr *mgo.ServerAddr) (net.Conn, error) {
return tls.Dial("tcp", addr.String(), &tls.Config{})
}
session, err := mgo.DialWithInfo(dialInfo)
if err != nil {
log.Fatal(err.Error())
}
【问题讨论】:
-
您尝试连接的地址是什么?
-
@MichaelHampton 这是 MongoDB Atlas 上的一个集群([cluster-shard].mongodb.net:27017。仅出于测试目的,它允许从任何地方访问(0.0.0.0/0)。我已连接使用MongoDB Compass,还有一些文档。我的第一个想法也是某种类型的连接问题,所以我尝试从机器内部ping集群,并使用nc -z测试端口(两个测试很好)。