如何设置从一个 docker couchDB 到另一个的复制?



我的Windows 10主机上运行了以下docker容器:

PS C:Usersjj2> 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:

http://127.0.0.1:5984/
http://127.0.0.1:15984/
http://127.0.0.1:25984/

现在我尝试在主容器上设置复制...但我一定弄乱了复制目标的值。 这些是我指定的值:

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 的样子:

{
"_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

我应该补充一点的是,另外 2 个节点尚未在其上运行设置。 意思是,我创建了群集,但是当我启动 Web 应用程序时,它会提示我创建单个节点或群集。 我是否必须将每个节点设置为单个节点才能进行复制?

此外,这就是我最初创建集群/容器的方式: https://github.com/apache/couchdb-docker/issues/74 我使用了那个docker-compose.yml文件。

编辑 2

我知道意识到/了解到任何 127.0.0.1 都将指向我误入歧途的主机。 但是,如何将一个容器指向另一个容器呢?
就集群而言,使用在 127.0.0.1:5984 上运行的 fauxton,对于 server-0,我添加了以下 2 个节点,如下所示:

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

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

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" --user couchdb 输入用户"couchdb"的主机密码: {"all_nodes":["couchdb@couchdb-0"],"cluster_nodes":["couchdb@couchdb-0","couchdb@couchdb-1","couchdb@couchdb-2"]} PS C:\Users\jj2>

最后,我想也许我可以使用 docker 分配的容器的 IP 地址,但它们都无法从主机 ping 到。 它们都是 172.x.x.x 地址。

编辑 3

万一有帮助。

PS C:Usersjj2> 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"
}
}
]

您是否将 docker 实例绑定到 0.0.0.0 或仅绑定到 127.0.0.1

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

如果只有 127.0.0.1 并且它们都位于同一 docker 网络上(请参阅 docker 网络 ls 和 docker 网络检查(,则可以使用docker 网络IP 地址在容器之间进行复制。

相关内容

  • 没有找到相关文章

最新更新