如何使用另一个容器中的golang Web应用程序连接到MONGODB容器

时间:2018-12-15 13:59:01

标签: mongodb docker go docker-compose

我有一个使用mongodb的golang网络应用。我创建了两个容器:一个用于my_app,另一个用于mongodb。 我使用官方的mongo-go-driver / mongo。

[
    {
        "day": 5,
        "time": "morning",
        "availability": 0
    }
]

我的问题是我不知道如何在容器内获取(连接)mongodb的地址ip(本地主机)。如果我使用

var client *mongo.Client

//create a mongo.Client
client, err = mongo.NewClient("mongodb://localhost:27017")
//client, err = mongo.NewClient("mongodb://my_first_mongodb:27017")
//client, err = mongo.NewClient("mongodb://:27017")
if err != nil {
    log.Printf("could not create a mongo client:  %v", err)
    panic(err)
}

//connect it to your running MongoDB server
ctx1, cancel1 := context.WithTimeout(context.Background(), 120*time.Second)
defer cancel1()

//Connect initializes the Client by starting background monitoring goroutines.
err = client.Connect(ctx1)
if err != nil {
    log.Printf("could not connect with mongodb:  %v", err)
    panic(err)
}

fmt.Println("trying to start mongodb for my app")
ctx2, cancel2 := context.WithTimeout(context.Background(), 120*time.Second)
defer cancel2()
err = client.Ping(ctx2, nil)
if err != nil {
    log.Printf("no ping to mongo db could not connect with mongodb:  %v", err)
    panic(err)
}

不起作用。但是如果在docker-compose中,我会设置容器名称(my_first_mongodb),然后使用以下代码:

client, err = mongo.NewClient("mongodb://localhost:27017")

一切正常,并且可以正常工作。

my docker-compose

此解决方案的问题是: 由于Docker容器名称必须唯一,因此如果您指定了自定义名称,则不能将服务扩展到1个以上的容器。尝试这样做会导致错误here

请任何帮助。 谢谢

0 个答案:

没有答案