Maison  >  Questions et réponses  >  le corps du texte

golang - MongoDB ne peut pas être connecté après le déploiement du projet Go sur Docker

J'ai suivi un livre et créé un serveur API. Voici le projet. Une fois le projet démarré et exécuté localement mongod来启动 MongoDB 是可以连接的。但是当我打包 Server 成 docker 后(docker build -t taskmanager .),并且用容器启动这个 Server(docker run --publish 8080:8080 taskmanager), je ne sais plus comment me connecter à la base de données comme avant. Je ne sais pas si j'ai mal écrit le Dockerfile ou si le port n'est pas configuré correctement, et je ne connais pas très bien Docker.

// 连接 mongodb
func createDbSession() {
    var err error
    session, err = mgo.DialWithInfo(&mgo.DialInfo{
        Addrs:    []string{"127.0.0.1"},
        Username: "",
        Password: "",
        Timeout:  60 * time.Second,
    })
    if err != nil {
        log.Fatalf("[createDbSession]: %s\n", err)
    }
}
// 报错
$ docker run --publish 8080:8080 taskmanager
2017/04/25 13:37:59 [createDbSession]: no reachable servers

Fichier Docker :

# golang image where workspace (GOPATH) configured at /go.
FROM golang

# Copy the local package files to the conainer's workspace
ADD . /go/src/github.com/Latias94/taskmanager

# Setting up working directory
WORKDIR /go/src/github.com/Latias94/taskmanager

# Get godeps for managing and restoring dependencies
RUN go get github.com/tools/godep

# Restore godep dependencies
RUN godep restore

# Build the taskmanager command inside the container.
RUN go install github.com/Latias94/taskmanager

# Run the taskmanager command when the container starts.
ENTRYPOINT /go/bin/taskmanager

# Service listens on port 8080.
EXPOSE 8080

Dois-je également envelopper la base de données dans Docker ? Ou y a-t-il un problème dans la façon dont je démarre Docker ? Le port de Mongodb est celui par défaut 27017,项目如果成功启动打开会显示404。godep restoreLes dépendances du projet peuvent être installées.


Mise à jour :

func createDbSession() {
    var err error
    // 改为 mgo.Dial
    session, err = mgo.Dial(AppConfig.MongoDBHost) // "mongo:27017"
    if err != nil {
        log.Fatalf("[GetSession]: %s\n", err)
    }
    if err != nil {
        log.Fatalf("[createDbSession]: %s\n", err)
    }
}

docker build -t taskmanager . essayez le lien après la construction

$ docker run -it --link mongodb:mongo --name taskmanager2 taskmanager --publish 8080:8080
2017/04/26 13:17:07 Listening...

Maintenant, il peut être démarré, mais localhost:8080Je ne vois pas le projet et je ne trouve pas l'adresse du serveur
Je prévois de lire "The First Docker Book" dans les prochains jours, puis de revenir le consulter. ce problème.
Merci aux répondants.

仅有的幸福仅有的幸福2736 Il y a quelques jours964

répondre à tous(2)je répondrai

  • PHP中文网

    PHP中文网2017-05-16 13:19:18

    Les programmes dans Docker ne peuvent pas accéder aux services de l'hôte. Vous devez également utiliser docker pour exécuter mongodb, puis utiliser la commande link pour lier les deux conteneurs

    répondre
    0
  • 巴扎黑

    巴扎黑2017-05-16 13:19:18

    Votre problème n'a rien à voir avec le lien ou non.
    Docker ne peut pas accéder au service hôte en utilisant 127.0.0.1. Vous devez utiliser une adresse IP interne ou externe telle que 192.168.x.x

    .

    répondre
    0
  • Annulerrépondre