更新:我现在开始工作了。Jim Zajkowski 的回答帮助我检测到我的/etc/init.d/couchdb重新启动调用实际上并没有重新启动实例。在我手动终止 CouchDB 进程并启动一个新实例后,它获取了所需的 BindAddress 更改。
我已经通过安装 CouchDB
aptitude 安装 couchdb
从我的服务器,我可以通过
远程登录本地主机 5984
并执行 RESTful 命令。当我尝试从我们网络上的另一台计算机或我们网络外部的计算机访问服务器时,我收到连接已重置错误。我已经在路由器上设置了端口转发,并且可以通过 Apache、Tomcat、SSH 等访问服务器。
我是 Linux/Ubuntu 的新手,所以我不确定是否有默认防火墙阻止连接,所以我运行:
iptables -A INPUT -p tcp --dport 5984 -j ACCEPT
但这没有帮助。
这是运行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 |的转储 grep 5984
tcp 0 0 127.0.0.1:5984 0.0.0.0:* LISTEN
我将couch.ini配置为“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
我仍然无法连接,即使是从 LAN 上的另一台机器。
说什么
netstat -an | grep 5984
?它说127.0.0.1:5984
或*:5984
?如果是127.0.0.1
,则需要将 couchdb 设置为侦听所有接口。您必须更改 /etc/couchdb/default.ini 中的 bind_address。然后重新启动服务并重试。
我注意到,为了使其工作,您必须出于某种原因手动终止正在运行的 erlang 进程。
ps ax | grep beam
应该揭示 erlang 过程,你应该0:00 /usr/lib/erlang/erts
在输出中的某个地方得到一些东西。如果你杀死这个进程然后运行/etc/init.d/couchdb restart
新的配置文件将被加载。在家用 PC/Mac 上运行以下命令:
下一次在浏览器中打开 localhost:5984/_utils ...它适用于我
配置文档:
如果您从 Futon 配置面板更改它,则无需执行任何其他操作(重新启动数据库等):
在更改默认 bind_address 之前:
更改为 0.0.0.0 后:
请注意非专家:无法访问您的计算机(通常是本地网络之外的任何东西)仍然无法访问您的计算机(CouchDB 或其他任何东西)。
我遇到了这个问题,我的问题最终是显然在我安装的 Ubuntu 中已经安装了 couchdb。我一直在编辑 /etc/couchdb 下的配置文件,但正在运行的实际上是从 /usr/local/etc/couchdb 中提取配置文件。
提示是 /etc/couchdb 中的配置提到了沙发 0.10,但我刚刚安装了 1.0.1。
iptables -L -n -v
将显示您当前的防火墙规则。查看是否有一个在这些数据包到达您的规则之前丢弃了这些数据包。