如何使用带有 docker-compose 的 NodeJS 连接到 ArangoDB?

问题描述

我想将我的 nodejs 应用程序连接到 arangodb。为此,我正在使用 arangojs。 我的连接代码看起来像

new Database({
  url: `${DB_URL}:${DB_PORT}`,auth: {
    username: DB_USERNAME,password: DB_PASSWORD
  }
})
Error: connect EINVAL 0.0.33.81:80 - Local (0.0.0.0:0)
nodeserver_1  |     at internalConnect (node:net:905:16)
nodeserver_1  |     at defaultTriggerAsyncIdScope (node:internal/async_hooks:431:18)
nodeserver_1  |     at GetAddrInfoReqWrap.emitLookup [as callback] (node:net:1051:9)
nodeserver_1  |     at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:71:8) {
nodeserver_1  |   errno: -22,nodeserver_1  |   code: 'EINVAL',nodeserver_1  |   syscall: 'connect',nodeserver_1  |   address: '0.0.33.81',nodeserver_1  |   port: 80,

虽然 DB_URL=db DB_PORT=8529

我的 docker-compose.yml 看起来像这样:

version: '3.9'
services:
  db:
    image: arangodb:latest
    environment:
      araNGO_ROOT_PASSWORD: ${DB_PASSWORD:-root}
    ports:
      - ${DB_PORT:-8529}:8529
    volumes:
      - arangodb_data_container:/var/lib/arangodb3
      - arangodb_apps_data_container:/var/lib/arangodb3-apps
    network_mode: bridge
  nodeserver:
    build:
      context: .
    depends_on:
      - db
    environment:
      DB_PORT: ${DB_PORT}
      DB_NAME: ${DB_NAME}
      DB_USERNAME: ${DB_USERNAME}
      DB_PASSWORD: ${DB_PASSWORD}
      DB_URL: ${DB_URL}
    restart: unless-stopped
    network_mode: bridge
volumes:
  arangodb_data_container:
  arangodb_apps_data_container:

知道我做错了什么吗?

编辑: 我检查了容器的 IP 地址,结果与我预期的不一样:

$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' 4059b252e72e
172.17.0.2

编辑2: 我误解了这个错误。原因如下代码

let db = new Database({
  url: `${DB_URL}:${DB_PORT}`,password: DB_PASSWORD,}
db = db.database(DB_NAME)
const databaseExists = await DB.database.exists() // here the error gets thrown

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...