更新:我现在让它工作了。Jim Zajkowski 的回答帮助我检测到我的/etc/init.d/couchdb重启调用实际上并没有重启实例。在我手动终止 CouchDB 进程并启动新实例后,它获取了所需的 BindAddress 更改。
我已经通过以下方式安装了 CouchDB
安装 CouchDB
从我的服务器,我可以通过
telnet 本地主机 5984
并执行 RESTful 命令。当我尝试从我们网络上的另一台计算机或我们网络外部的计算机访问服务器时,我得到了连接被重置错误。我已经在路由器上设置了端口转发,并且可以通过 Apache、Tomcat、SSH 等访问服务器。
我是 Linux/Ubuntu 的新手,所以我不确定是否有默认防火墙阻止连接,所以我运行了:
iptables -A 输入 -p tcp --dport 5984 -j 接受
但没有帮助。
以下是运行结果iptables -L -n -v
Chain INPUT (policy ACCEPT 2121K packets, 1319M bytes)
pkts bytes target prot opt in out source destination
70 3864 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:5984
9 1647 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 1708K packets, 1136M bytes)
pkts bytes target prot opt in out source destination
我假设显示为传输的字节数5984是由于我的本地主机连接。
以下是运行结果netstat -an |复制代码
tcp 0 0 127.0.0.1:5984 0.0.0.0:* LISTEN
我配置了沙发配置文件设置为“BindAddress=0.0.0.0”并重新启动,因此应该监听所有接口。但是,当我运行“sudo /etc/init.d/couchdb stop”然后运行 netstat 时,我仍然看到上述条目。看起来 CouchDB 实际上根本没有停止。这也许可以解释我的问题,因为这意味着 CouchDB 从未真正重新启动过,也从未获取 BindAddress 更改。
我手动终止了 CouchDB 进程并重新启动它。现在 netstat 显示:
tcp 0 0 127.0.0.1:5984 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:5984 127.0.0.1:35366 TIME_WAIT
但是我仍然无法连接,即使是从局域网上的另一台机器。
答案1
说什么netstat -an | grep 5984
?是说127.0.0.1:5984
还是*:5984
?如果是127.0.0.1
,则需要将 couchdb 设置为监听所有接口。
答案2
您必须更改 /etc/couchdb/default.ini 中的 bind_address。然后重新启动服务并重试。
答案3
我注意到,为了使它工作,出于某种原因,您必须手动终止正在运行的 Erlang 进程。ps ax | grep beam
应该显示 Erlang 进程,您应该0:00 /usr/lib/erlang/erts
在输出中的某处得到类似这样的信息。如果您终止此进程,然后运行,/etc/init.d/couchdb restart
新的配置文件将被加载。
答案4
配置文档:
如果您从 Futon 配置面板进行更改,则无需执行任何其他操作(重新启动数据库等):
更改默认bind_address之前:
peter@earth:~/$ netstat -an | grep 5984
tcp 0 0 127.0.0.1:5984 0.0.0.0:* LISTEN
改为0.0.0.0之后:
peter@earth:~/$ netstat -an | grep 5984
tcp 0 0 0.0.0.1:5984 0.0.0.0:* LISTEN
非专家请注意:无法访问您的计算机(通常是本地网络之外的任何计算机)仍然无法访问您的计算机(CouchDB 或其他任何计算机)。