我运行在Docker(klaemo / couchdb)中安装的couchdb,并让端口转发安装,以便我的本地机器可以使用它。除了添加管理员用户之外,我还没有配置此数据库。
这些是我的vm端口转发设置:
我可以打开localhost:5984 / _utils,浏览安装中的数据,我可以从AWS中的远程数据库实例化到这个couchDB的复制,但如果我以另一种方式启动复制,它永远不会更新被褥(我得到的只是菜单栏中的微调器)。
如果我使用Curl进行复制,就像这样:
curl -X POST http://localhost:5984/_replicate -d '{"source":"http://username:password@localhost:5984/database-name","target":"http://username:password@remote.url.com:5984/database-name","connection_timeout":"60000"}' -H "Content-Type: application/json"
我超时了。
{"error":"timeout"}
如果我打开Charles(一个HTTP代理)并将“代理”:“http://localhost:8888”添加到curl请求有效负载,则不会出现任何流量,因此我假设在本地沙发和远程之间从未尝试过连接沙发上。
为什么会这样?
修改
请注意,curl复制在docker容器中的shell内执行。我能够在同一个容器中在本地和远程数据库上创建新的数据库,只复制超时。
编辑2 经过一些试验和错误后,我将复制运行,但它只复制了一部分文档:
运行复制后的响应cURL:
{"ok":true,"session_id":"3c195aa3c723696bfb33679d4de3632a","source_last_seq":79,"replication_id_version":3,"history":[{"session_id":"3c195aa3c723696bfb33679d4de3632a","start_time":"Mon, 20 Apr 2015 13:42:37 GMT","end_time":"Mon, 20 Apr 2015 13:42:38 GMT","start_last_seq":0,"end_last_seq":79,"recorded_seq":79,"missing_checked":53,"missing_found":53,"docs_read":53,"docs_written":**53**,"doc_write_failures":0}]}
目标数据库是一个空DB,因此它应该复制所有文档。顺便说一下,这是cURL'在本地原产地DB中的结果:
{"db_name":"db-name","doc_count":**435**,"doc_del_count":0,"update_seq":43116,"purge_seq":0,"compact_running":false,"disk_size":384835704,"data_size":7091262,"instance_start_time":"1429537029129810","disk_format_version":6,"committed_update_seq":43116}
所以应该复制435个文件,而不是53个。
我想如果我再次运行复制它会继续进程,但它没有运行(no_changes:true):
{"ok":true,"no_changes":true,"session_id":"3c195aa3c723696bfb33679d4de3632a","source_last_seq":79,"replication_id_version":3,"history":[{"session_id":"3c195aa3c723696bfb33679d4de3632a","start_time":"Mon, 20 Apr 2015 13:42:37 GMT","end_time":"Mon, 20 Apr 2015 13:42:38 GMT","start_last_seq":0,"end_last_seq":79,"recorded_seq":79,"missing_checked":53,"missing_found":53,"docs_read":53,"docs_written":53,"doc_write_failures":0}]}