Maison > développement back-end > Golang > le corps du texte

Erreur de connexion à rethinkDB depuis Golang

WBOY
Libérer: 2024-02-12 10:45:08
avant
525 Les gens l'ont consulté

从 golang 连接到 rethinkDB 时出错

L'éditeur php Baicao a rencontré un problème lors de l'utilisation de Golang pour se connecter à rethinkDB. Le message d'erreur indiquant qu'il ne pouvait pas se connecter au serveur rethinkDB l'a dérouté. En réponse à ce problème, il a effectué une série de dépannage et de débogage, et a finalement trouvé une solution. Dans cet article, nous discuterons des problèmes possibles et des solutions lors de la connexion à rethinkDB depuis Golang.

Contenu de la question

J'utilise rethinkdb pour exécuter un conteneur Docker, puis j'exécute go file pour me connecter à la base de données, mais une erreur se produit lors de la connexion.

Bonjour à tous. J'ai besoin d'aide pour rethinkdb, j'ai exécuté un conteneur Docker :

docker run --name rth -p 8100:8080 -d rethinkdb
Copier après la connexion

Ensuite, visitez http://localhost:8100 et il y a la page d'accueil de rethinkdb, donc tout va bien. Mais lorsque j'essaie de me connecter à la base de données depuis Golang, j'obtiens des erreurs :

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")
    }
}
Copier après la connexion

J'ai eu cette erreur après avoir exécuté 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
Copier après la connexion

Merci La raison pour laquelle cela se produit est que le port est incorrect (28015), mais si je le change, sauf le port = 8100, j'obtiens le même problème. Si je saisis 8100 au lieu de 28015 et que j'obtiens cette erreur :

rethinkdb: Unexpected EOF: HTTP/ 400 Bad Request

2023/05/18 01:38:52 Could not connect
exit status 1
Copier après la connexion

Peut-être que quelqu'un sait comment résoudre ce problème)

Solution de contournement

-p 8100:8080 将容器中的端口 8080 映射到主机上的端口 8100 。您没有映射任何其他端口,因此,当您尝试访问 8100 以外的任何端口(例如 127.0.0.1:28015) lorsque votre demande n'atteint pas le conteneur. Il se peut que quelque chose d'autre sur l'hôte écoute sur ce port, ou que rien n'écoute.

Vous avez mentionné que vous avez accès à 上的管理界面http://localhost:8100 ; si vous vérifiez les journaux, vous remarquerez quelque chose comme :

 ;
listening for administrative http connections on port 8080
listening for client driver connections on port 28015
Copier après la connexion

Le serveur écoute donc les connexions sur plusieurs ports. port 8080 (映射到 8100)是管理 http 接口,28015 用于驱动程序连接(这在 文档)。您的代码正在尝试连接到端口 28015 (ce qui est correct), mais vous n'avez pas mappé le port donc il n'est pas accessible sur l'hôte, corrigez ceci :

 ;
docker run --name rth -p 8100:8080 -p 28015:28015 -d rethinkdb
Copier après la connexion

Cela changera le port dans le conteneur en 28015 映射到主机上的端口 28015 (vous pouvez utiliser un autre port hôte si nécessaire ; n'oubliez pas de mettre à jour votre code). Nous pouvons maintenant connecter avec succès les éléments suivants :

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")
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!