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 restore
Les 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:8080
Je 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.
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
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