我用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
可能有人知道如何解决这个问题)
1条答案
按热度按时间8dtrkrch1#
-p 8100:8080
将容器中的端口8080
Map到主机上的端口8100
。您不Map任何其他端口,因此当您尝试访问除8100
以外的任何端口(例如127.0.0.1:28015
)时,您的请求将无法到达容器。主机上的其他设备可能正在端口上侦听,或者没有任何设备在侦听。您提到您能够访问
http://localhost:8100
上的管理界面;如果你检查日志,你会注意到类似这样的内容:因此,服务器正在侦听多个端口上的连接。端口
8080
(Map到8100
)是管理HTTP接口,28015
用于驱动程序连接(这将在the docs中介绍)。您的代码试图连接到端口28015
(这是正确的),但您没有Map该端口,因此无法在主机上访问该端口;修复此问题:这将把容器中的端口
28015
Map到主机上的端口28015
(如果需要,可以使用不同的主机端口;请记住更新代码)。我们现在可以成功连接到以下内容: