【问题标题】:How does docker-compose link work?docker-compose 链接如何工作?
【发布时间】:2016-05-06 01:39:34
【问题描述】:

我有三个容器,web、rest 和 db。我希望rest(nodejs)能够访问db(mongodb)。

我的 docker-compose.yml:

version: '2'
services:
 web:
  build: front
  depends_on:
   - db
   - rest
 db:
  build: backend/mongodb
  volumes:
   - /src/docker/mongodb:/var/lib/mongodb
  restart: always
 rest:
  build: backend/rest
  restart: always
  links:
    - db:database

在我的 nodejs 程序中:

MongoClient.connect("mongodb://database:27017/mytest", function (err, db) {
 ...

但是,我的 mongo 客户端无法访问数据库并不断重启...

我做错了什么?

【问题讨论】:

    标签: node.js mongodb docker docker-compose


    【解决方案1】:

    容器可以通过它们的名字来访问。因此,在您的情况下,您必须使用db 服务的名称,即db

    MongoClient.connect("mongodb://db:27017/mytest", function (err, db) {

    【讨论】:

      【解决方案2】:

      假设您的 node.js 应用程序是您的 web 服务? Web 只能使用主机名db 访问db 服务。但是rest 服务可以使用dbdatabase 访问它,因为您已经给它一个链接别名。

      您可以在web 服务定义中复制该links: 别名,或者将连接字符串更改为使用db 而不是database

      现在应该可以工作了:

      MongoClient.connect("mongodb://db:27017/mytest", function (err, ndb) {
      

      或添加链接:

      MongoClient.connect("mongodb://database:27017/mytest", function (err, db) {
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-11
        • 2018-02-11
        • 1970-01-01
        • 2016-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-11
        相关资源
        最近更新 更多