Heim  >  Fragen und Antworten  >  Hauptteil

golang – MongoDB kann nach der Bereitstellung des Go-Projekts in Docker nicht verbunden werden

Ich habe ein Buch befolgt und einen API-Server erstellt. Hier ist das Projekt. Nachdem das Projekt gestartet und lokal ausgeführt wurde mongod来启动 MongoDB 是可以连接的。但是当我打包 Server 成 docker 后(docker build -t taskmanager .),并且用容器启动这个 Server(docker run --publish 8080:8080 taskmanager), weiß ich nicht wie zuvor, wie ich eine Verbindung zur Datenbank herstellen soll. Ich weiß nicht, ob ich die Docker-Datei falsch geschrieben habe oder ob der Port nicht richtig eingestellt ist, und ich bin mit Docker nicht sehr vertraut.

// 连接 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

Docker-Datei:

# 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

Soll ich die Datenbank auch in Docker einbinden? Oder stimmt etwas mit der Art und Weise, wie ich Docker starte, nicht? Der Port von Mongodb ist der Standard. 27017,项目如果成功启动打开会显示404。godep restoreProjektabhängigkeiten können installiert werden.


Update:

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 . Probieren Sie den Link nach dem Erstellen aus

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

Jetzt kann es gestartet werden, aber localhost:8080Ich kann das Projekt nicht sehen und ich kann die Serveradresse nicht finden.
Ich habe vor, in den nächsten Tagen „Das erste Docker-Buch“ zu lesen und dann wieder vorbeizuschauen dieses Problem.
Vielen Dank an die Antwortenden.

仅有的幸福仅有的幸福2685 Tage vor919

Antworte allen(2)Ich werde antworten

  • PHP中文网

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

    docker里面的程序是不能访问宿主机的服务的。你应该将mongodb也采用docker去运行,然后用link指令去链接两个容器

    Antwort
    0
  • 巴扎黑

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

    你的问题跟link不link没太大关系
    docker访问宿主机服务不能用 127.0.0.1 得用内网或外网IP 如192.168.x.x

    Antwort
    0
  • StornierenAntwort