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 restore
Kebergantungan 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:8080
Saya 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.
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