首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将复制从一个坞couchDB设置为另一个?

如何将复制从一个坞couchDB设置为另一个?
EN

Stack Overflow用户
提问于 2020-01-29 20:39:16
回答 1查看 748关注 0票数 1

我的windows 10主机上运行着下列停靠容器:

代码语言:javascript
复制
PS C:\Users\jj2> docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                  NAMES
aacbb0c8f189        couchdb:2.1.1       "tini -- /docker-ent…"   15 seconds ago      Up 12 seconds       4369/tcp, 9100/tcp, 0.0.0.0:15984->5984/tcp, 0.0.0.0:15986->5986/tcp   jj2_server-1_1
b00138d9c030        couchdb:2.1.1       "tini -- /docker-ent…"   16 seconds ago      Up 12 seconds       4369/tcp, 9100/tcp, 0.0.0.0:25984->5984/tcp, 0.0.0.0:25986->5986/tcp   jj2_server-2_1
e4c984413ac1        couchdb:2.1.1       "tini -- /docker-ent…"   16 seconds ago      Up 12 seconds       0.0.0.0:5984->5984/tcp, 4369/tcp, 9100/tcp, 0.0.0.0:5986->5986/tcp     jj2_server-0_1

我可以像这样为每一个例子推出Fauxton:

代码语言:javascript
复制
http://127.0.0.1:5984/
http://127.0.0.1:15984/
http://127.0.0.1:25984/

现在,我尝试在主容器…上设置复制。但我肯定是搞砸了复制目标的值。以下是我指定的值:

代码语言:javascript
复制
Replication Source:    Local Database
Source Name:   widgets
Replication Target:    New Remote Database
New Database: http://127.0.0.1:15984/widgets
Replication Type:  Continuous

当我保存这个时,复制尝试失败..。如果我重新打开配置工具,目标将更改为“现有的本地数据库”。

原来的配置JSON是这样的:

代码语言:javascript
复制
{
  "_id": "310ab1c7a68d4ae4aba039d2fa00320f",
  "_rev": "2-cf1a3abced5f09ceebd9d54f42ebd65d",
  "user_ctx": {
    "name": "couchdb",
    "roles": [
      "_admin",
      "_reader",
      "_writer"
    ]
  },
  "source": {
    "headers": {
      "Authorization": "Basic Y291Y2hkYjpwYXNzd29yZA=="
    },
    "url": "http://127.0.0.1:5984/widgets"
  },
  "target": {
    "headers": {
      "Authorization": "Basic Y291Y2hkYjpwYXNzd29yZA=="
    },
    "url": "http://127.0.0.1:15984/widgets"
  },
  "create_target": true,
  "continuous": true,
  "owner": "couchdb"
}

“新建数据库”字段的提示/帮助似乎表明我需要使用URL.这就是我尝试127.0.0.1的原因。

如有任何建议,将不胜感激。

编辑1

我要补充的是,这两个额外的节点没有在它们上运行安装程序。也就是说,我创建了集群,但是当我启动webapp时,它会提示我创建单个节点或集群。在复制工作之前,是否必须将每个节点设置为单个节点?

另外,我首先是这样创建集群/容器的:https://github.com/apache/couchdb-docker/issues/74 --我使用了这个docker-come.yml文件。

编辑2

我知道,了解到,任何127.0.0.1都将指向主机,而这正是我偏离方向的地方。但是如何将一个容器指向另一个容器呢?

就集群而言,使用运行在127.0.0.1:5984上的fauxton,对于服务器-0,我添加了如下两个节点:

couchdb-1:5984绑定地址0.0.0.0 couchdb-2:5984绑定地址0.0.0.0

然后当我这样做时(注意端口):

代码语言:javascript
复制
 http://127.0.0.1:15984/_node/couchdb@couchdb-1/_config

我得到了一个合法的json响应,显示有一些东西正在以"couchdb-1“的名字运行。然而,我意识到我仍然在使用我的主机来获取couchdb-1服务器的视图。(服务器-1)

通过命令行,我确认我有这样的节点:

PS C:\Users\jj2> curl -X GET "http://127.0.0.1:5984/_membership“--用户couchdb输入用户‘couchdb’的主机密码:{"all_nodes":"couchdb@couchdb-0","cluster_nodes":"couchdb@couchdb-0","couchdb@couchdb-1","couchdb@couchdb-2"} PS C:\Users\jj2>

最后,我想也许我可以使用码头指定的容器的IP地址,但是没有一个是可以从主机上点击的。它们都是172.x.x.x地址。

编辑3

以防有帮助。

代码语言:javascript
复制
PS C:\Users\jj2> docker network inspect jj2_network
[
    {
        "Name": "jj2_network",
        "Id": "a0a799f7069ff49306438d9cb7884399a66470a7f0e9ac5364600c462153f53c",
        "Created": "2020-01-30T21:18:55.5841557Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "006b6d02cd4e962f3df9d6584d58b36b67864872446f2d00209001ec58d3cd52": {
                "Name": "jj2_server-1_1",
                "EndpointID": "91260368a2d5014743b41c9ab863a2acbfe0a8c7f0a18ea7ad35a3c16efb4445",
                "MacAddress": "02:42:ac:13:00:03",
                "IPv4Address": "172.19.0.3/16",
                "IPv6Address": ""
            },
            "15b261831c46fb89cdc83f9deb638ada0d9d8a89ece0bc065e0a45818e9b4ce3": {
                "Name": "jj2_server-2_1",
                "EndpointID": "cf072d0bbd95ab86308ac4c15b71b47223b09484506e07e5233d526f46baca1e",
                "MacAddress": "02:42:ac:13:00:04",
                "IPv4Address": "172.19.0.4/16",
                "IPv6Address": ""
            },
            "aeaf74cf591cffa8e7463e82b75e9ca57ebbcfd1a84d3f893ea5dcae324dbd1e": {
                "Name": "jj2_server-0_1",
                "EndpointID": "0a6d66b95bf973f0432b9ae88c61709e63f9e51c6bbf92e35ddf6eab5f694cc1",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "network",
            "com.docker.compose.project": "jj2",
            "com.docker.compose.version": "1.24.1"
        }
    }
]
EN

回答 1

Stack Overflow用户

发布于 2021-07-16 23:54:50

您的对接实例绑定到0.0.0.0还是仅绑定到127.0.0.1

如果为0.0.0.0,则可以通过将源和目标设置为远程数据库来进行复制,其中包含本地计算机的IP地址和每个实例的特定端口。

如果只有127.0.0.1并且它们都位于同一个码头网络(请参阅码头网络ls和码头网络检查),那么您可以使用停靠网络IP地址在容器之间进行复制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59975211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档