我在从运行 ArangoDB 的同一台服务器登录 ArangoDB 时遇到问题。
我们在远程机器上运行着 ArangoDB 的 Docker 容器,假设 IP 是 95.123.123.123:8529。当从我们的 dockerized NodeJS 应用程序连接到数据库时,该应用程序在我的本地机器上运行,如下所示:
import { Database } from 'arangojs';
try {
const db = new Database({
url: 'http://95.123.123.123:8529',
});
db.useDatabase('flex');
db.useBasicAuth('root', 'password');
} catch(err) {
log('database login failed', err);
}
登录工作正常。
但是,当我构建我们的应用程序时,对其进行 dockerize,并将其部署到运行 ArangoDB 的同一台服务器,并使用上述相同的方法登录时,登录失败。我们的服务器应用程序会记录以下错误database login failed, Error: EIO: i/o error, write
。
当从本地机器连接时,登录如何工作,但从运行 Arango 的同一台远程机器登录时却不是?
终于让它工作了。当服务器应用程序和 arango 在同一台服务器中时,问题是使用公共 IP 地址而不是内部地址。
跑步
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <arangocontainerid>
给出容器的内部 IP 地址:172.17.0.4
. 然后使 NodeJS 服务器应用程序指向tcp://172.17.0.4:8529
而不是公共 arango IP 地址,使其工作。
但是,当从本地机器或与 arango 不在同一服务器中的任何机器访问数据库时,显然http://95.123.123.123:8529
必须使用公共 IP 地址。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句