golang - Tidak dapat menyambung ke MongoDB selepas menggunakan projek Go ke Docker
仅有的幸福
仅有的幸福 2017-05-16 13:17:18
0
2
984

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.

仅有的幸福
仅有的幸福

membalas semua(2)
洪涛

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

巴扎黑

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan