Rumah  >  Soal Jawab  >  teks badan

golang - Tidak dapat menyambung ke MongoDB selepas menggunakan projek Go ke Docker

Saya mengikuti buku dan membuat Pelayan API Berikut ialah projeknya. Selepas projek dimulakan dan dijalankan secara tempatan mongod来启动 MongoDB 是可以连接的。但是当我打包 Server 成 docker 后(docker build -t taskmanager .),并且用容器启动这个 Server(docker run --publish 8080:8080 taskmanager), saya tidak tahu cara menyambung ke pangkalan data seperti sebelum ini. Saya tidak tahu sama ada saya menulis Dockerfile salah atau jika port tidak ditetapkan dengan betul.

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

Fail 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

Perlukah saya juga membungkus pangkalan data dalam Docker? Atau adakah terdapat sesuatu yang salah dengan cara saya memulakan Docker? Pelabuhan Mongodb ialah lalai 27017,项目如果成功启动打开会显示404。godep restoreKebergantungan projek boleh dipasang.


Kemas kini:

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 . cuba pautan selepas bina

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

Kini ia boleh dimulakan, tetapi localhost:8080Saya tidak dapat melihat projek itu, dan saya tidak dapat mencari alamat pelayan..
Saya bercadang untuk membaca "The First Docker Book" dalam beberapa hari akan datang dan kemudian kembali untuk melihat pada masalah ini.
Terima kasih kepada responden.

仅有的幸福仅有的幸福2685 hari yang lalu920

membalas semua(2)saya akan balas

  • PHP中文网

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

    Program dalam docker tidak boleh mengakses perkhidmatan hos. Anda juga harus menggunakan docker untuk menjalankan mongodb, dan kemudian gunakan arahan pautan untuk memautkan dua bekas

    balas
    0
  • 巴扎黑

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

    Masalah anda tiada kaitan sama ada pautan dipautkan atau tidak
    Docker tidak boleh mengakses perkhidmatan hos menggunakan 127.0.0.1 Anda mesti menggunakan IP dalaman atau luaran seperti 192.168.x.x

    balas
    0
  • Batalbalas