【问题标题】:Connecting couchdb container from another container从另一个容器连接 couchdb 容器
【发布时间】:2018-02-05 09:19:21
【问题描述】:

我正在尝试从在另一个容器中运行的 nodejs 应用程序连接到我的 couchdb 容器。我的 docker-compose 文件是这样的;

version: '3.1'
services:
    couchdb:
        image: couchdb
        container_name: my-db
        ports:
            - 5984:5984
        environment:
            COUCHDB_USER: admin
            COUCHDB_PASSWORD: password
    api:
       image: my-api
       container_name: my-api
       build: .
       command: npm run dev
       ports:
           - 8080:8080
       depends_on:
           - couchdb
       links:
           - couchdb

但我总是收到一个错误提示:

Error: connect ECONNREFUSED 172.19.0.2:5984
    at Object._errnoException (util.js:1003:13)
    at _exceptionWithHostPort (util.js:1024:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1195:14)

我看到这篇文章提到了同样的问题; how to map database from couchdb container to another containers webapp in same docker-compose file

当我尝试这样做时,我遇到了同样的错误。 新的 docker compose 文件;

version: '3.1'
services:
    couchdb:
        image: couchdb
    container_name: my-db
    ports:
        - 5984:5984
    environment:
        COUCHDB_USER: admin
        COUCHDB_PASSWORD: password
api:
    image: my-api
    container_name: my-api
    build: .
    command: npm run dev
    ports:
        - 8080:8080
    depends_on:
        - couchdb
    links:
        - couchdb
    environment:
        DB_URL: http://admin:password@couchdb:5984

还是一样的错误..

我正在尝试在 nodejs 端将 couchdb 容器与其服务名称('couchdb')连接起来。我还检查了容器是否在同一个网络上。两者都在使用网桥驱动程序的名为“my_default”的网络上。

当我尝试从本地运行的 nodejs 应用程序连接到 db 时,没有问题。

有什么我忘记了吗?

【问题讨论】:

  • 您总是可以在您的 api 容器中运行 bash 并尝试使用 curl 调试问题
  • 感谢您的建议。我发现了问题。当 couchdb 服务未准备好时,Api 服务尝试连接到 db。我写了一个 docker-entrypoint.sh 来让 api 服务等待 couchdb 服务准备好。现在可以了。

标签: node.js docker docker-compose couchdb dockerfile


【解决方案1】:

您忘记包含连接端口:

DB_URL: http://admin:password@couchdb:5984

【讨论】:

  • 其实是复制粘贴错误,不好意思。它被包括在内,并且有同样的错误。我现在在帖子中更正了。
【解决方案2】:

为了让您发现 couchdb 已经启动但还没有准备好,Docker 文章 Control startup order in Compose 列出了一些处理这种情况的方法,包括 wait-for-itdockerize 等工具,或用于轮询依赖项状态的脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-26
    • 2017-10-15
    • 1970-01-01
    • 2021-04-08
    • 2019-02-24
    • 1970-01-01
    • 2019-07-19
    相关资源
    最近更新 更多