从golang连接到rethinkDB时出错

rjee0c15  于 2023-05-20  发布在  Go
关注(0)|答案(1)|浏览(119)

我用rethinkdb运行了docker container,然后运行go file连接到数据库,但连接时出错。
大家好我需要rethinkdb的帮助,我运行了docker容器:

docker run --name rth -p 8100:8080 -d rethinkdb

然后去了http://localhost:8100,并有RethinkDB的主页,所以Everythink都很好。但是当我尝试从golang连接到数据库时,我遇到了一些错误:

package main

import (  
    r "gopkg.in/rethinkdb/rethinkdb-go.v6"
    "log"
    "fmt"
)

func main() {
    _, err := r.Connect(r.ConnectOpts{
        Address: "localhost:28015",
        Database: "test",
    })
    if err != nil {
        fmt.Println(err)
        log.Fatal("Could not connect")
    }
}

在运行go run main.go后,我遇到了以下错误:

rethinkdb: dial tcp 127.0.0.1:28015: connect: connection refused
2023/05/18 01:38:39 Could not connect
exit status 1

我感谢这是因为错误的端口(28015),但如果我改变它,我有同样的问题,除了端口= 8100。如果我输入8100而不是28015,并出现以下错误:

rethinkdb: Unexpected EOF: HTTP/ 400 Bad Request

2023/05/18 01:38:52 Could not connect
exit status 1

可能有人知道如何解决这个问题)

8dtrkrch

8dtrkrch1#

-p 8100:8080将容器中的端口8080Map到主机上的端口8100。您不Map任何其他端口,因此当您尝试访问除8100以外的任何端口(例如127.0.0.1:28015)时,您的请求将无法到达容器。主机上的其他设备可能正在端口上侦听,或者没有任何设备在侦听。
您提到您能够访问http://localhost:8100上的管理界面;如果你检查日志,你会注意到类似这样的内容:

Listening for administrative HTTP connections on port 8080
Listening for client driver connections on port 28015

因此,服务器正在侦听多个端口上的连接。端口8080(Map到8100)是管理HTTP接口,28015用于驱动程序连接(这将在the docs中介绍)。您的代码试图连接到端口28015(这是正确的),但您没有Map该端口,因此无法在主机上访问该端口;修复此问题:

docker run --name rth -p 8100:8080 -p 28015:28015 -d rethinkdb

这将把容器中的端口28015Map到主机上的端口28015(如果需要,可以使用不同的主机端口;请记住更新代码)。我们现在可以成功连接到以下内容:

package main

import (
    "fmt"
    "log"

    r "gopkg.in/rethinkdb/rethinkdb-go.v6"
)

func main() {
    _, err := r.Connect(r.ConnectOpts{
        Address:  "localhost:28015",
        Database: "test",
    })
    if err != nil {
        fmt.Println(err)
        log.Fatal("Could not connect")
    }
    fmt.Println("Connected")
}

相关问题