docker链接解析为localhost

时间:2017-09-23 20:39:46

标签: mongodb docker docker-compose

我遇到了一个我以前从未遇到过的非常奇怪的码头问题。我想要做的是使用docker-compose从互联网上提供我的应用程序。它目前正在DigitalOcean的一个实例上运行,我目前正在使用以下docker-compose.yml

    version: '2.2'
    services:
      mongodb:
        image: mongo:3.4
        volumes:
         - ./mongo:/data/db
        ports:
         - "27017"

      mongoadmin:  # web UI for mongo
        image: mongo-express
        ports:
         - "8081:8081"
        links:
         - "mongodb:mongo"
        environment:
         - ME_CONFIG_OPTIONS_EDITORTHEME=ambiance
         - ME_CONFIG_BASICAUTH_USERNAME=user
         - ME_CONFIG_BASICAUTH_PASSWORD=pass

      app:
        image: project/name:0.0.1
        volumes:
          - ./project:/usr/src/app
        working_dir: /usr/src/app
        links:
          - "mongodb:mongodb"
        environment:
          - NODE_ENV=production
        command: ["npm", "start"]
        ports:
          - "3000:3000"

Mongoadmin正确连接并且能够连接到数据库,而数据库本身无法从主机外部连接。

问题是该应用无法连接到正确的地址。它是一个使用mongoose连接到数据库的快速服务器。在连接之前,我正在记录它将连接到的URL。在我的config.js中,我列出了mongodb://mongodb/project,但这已解析为localhost,从而导致MongoError: failed to connect to server [localhost:27017] on first connect。已解析容器的名称,但未解析到正确的地址。

我尝试连接到该容器的docker的IP(在172.18.0.0范围内),但也解析为localhost。我查看了/ etc / hosts,但这并未显示与此相关的任何内容。此外,我很困惑,因为mongo-express容器能够连接。

我已经尝试更改容器的名称,认为由于某些原因,由于之前的运行或类似的原因,它可能会阻塞,但这并没有解决问题

我已尝试使用显式links和隐式使用docker内部DNS解析,但两者都不起作用。

将端口27017绑定到localhost时,它能够连接,但由于安全性和通过环境变量轻松配置,我宁愿将mongodb实例绑定到localhost。

我还尝试在我的本地计算机上运行此功能,并且按预期工作,因为mongoadminapp都能够连接到mongodb容器。我的本地机器运行Docker version 1.12.6, build 78d1802,而VPS运行Docker version 17.06.2-ce, build cec0b72,因此是更新的版本。

这可能是一个新引入的错误吗?还是我错过了别的什么?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的docker-compose文件似乎没有链接app和mongodb容器。

你有这个:

app:
        image: project/name:0.0.1
        volumes:
          - ./project:/usr/src/app
        working_dir: /usr/src/app
        environment:
          - NODE_ENV=production
        command: ["npm", "start"]
        ports:
          - "3000:3000"

虽然我认为应该是这样的:

app:
        image: project/name:0.0.1
        volumes:
          - ./project:/usr/src/app
        working_dir: /usr/src/app
        links:
         - "mongodb:mongodb"
        environment:
          - NODE_ENV=production
        command: ["npm", "start"]
        ports:
          - "3000:3000"