从 golang 连接到 rethinkDB 时出错

问题描述 投票:0回答:1

我用 rethinkdb 运行 docker 容器,然后运行 go file 连接数据库,但是我在连接时出错。

大家好。我需要 rethinkdb 的帮助,我运行了 docker 容器:

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

然后去http://localhost:8100 有rethinkdb 的主页,所以一切都很好。但是当我尝试从 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

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

docker go rethinkdb
1个回答
0
投票

-p 8100:8080
将容器中的端口
8080
映射到主机上的端口
8100
。您不映射任何其他端口,因此,当您尝试访问
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
(映射到
8100
)是管理员HTTP接口,
28015
用于驱动程序连接(这在docs中有介绍)。您的代码正在尝试连接到端口
28015
(这是正确的),但您没有映射该端口,因此主机无法访问它;解决这个问题:

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

这会将容器中的端口

28015
映射到主机上的端口
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")
}
© www.soinside.com 2019 - 2024. All rights reserved.