【问题标题】:Mongodb ipv6 inside dockerdocker内部的mongodb ipv6
【发布时间】:2021-10-02 10:03:53
【问题描述】:

我正在运行标准的 mongodb 容器(带有修改后的 docker 入口点和配置) 我尝试更改配置文件并启动脚本以使用我的 IPv6 地址或 :: (all/any) 我尝试包括 --ipv6 不同的帖子说需要或不再使用。似乎当 mongo 配置尝试绑定到所有 ipv6 地址时,我失去了整个容器的互联网连接(无法使用 apt update)。

码头工人命令: docker run -d -v /Docker/entrypoint/:/usr/local/bin/ -v /Docker/mongoconfig/mongod.conf.orig:/etc/mongod.conf.orig -p 27017:27017 mongo:5.0.3

我尝试过使用不同的 docker 入口点代码。

尝试 1 个 docker-entrypoint.sh:

#!/bin/bash
exec mongod --bind_ip '::' --ipv6 

尝试 2 docker-entrypoint.sh:

#!/bin/bash
exec mongod --bind_ip [134:1234:134:1324:1234:134:1234:3]

尝试 3 docker-entrypoint.sh:

#!/bin/bash
exec mongod --bind_ip [134:1234:134:1324:1234:134:1234:3] --ipv6 

尝试 4 个 docker-entrypoint.sh:

#!/bin/bash
exec mongod --bind_ip_all

mongo 配置几乎保持不变,通过注释掉来交换绑定 IP 和 ipv6,如下所示:

storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# network interfaces
net:
  port: 27017
  #bindIp: 134:1234:134:1324:1234:134:1234:3
  bind_ip = 0::0
  ipv6 = true

ps -auxwe 输出 root 1 0.8 5.4 1540940 111092 ? Ssl 09:38 0:01 mongod --bind_ip :: --ipv6 HOSTNAME=6cb245ebc947 PWD=/ HOME=/root MONGO_PACKAGE=mongodb-org

网络统计输出

netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 172.17.0.3:45684        91.189.88.152:80        TIME_WAIT   -                   
tcp        0      0 172.17.0.3:39324        91.189.91.38:80         TIME_WAIT   -                   
tcp        0      0 172.17.0.3:54468        91.189.88.142:80        TIME_WAIT   -                   
tcp        0      0 172.17.0.3:40844        13.227.219.90:80        TIME_WAIT   -                   
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
unix  2      [ ACC ]     STREAM     LISTENING     1635933  1/mongod             /tmp/mongodb-27017.sock

mongoshell:

mongo --ipv6 [134:1234:134:1324:1234:134:1234:3]:27017/local
MongoDB shell version v5.0.3
connecting to: mongodb://[134%31234%3134%31324%31234%3134%31234%33]:27017/local?compressors=disabled&gssapiServiceName=mongodb
Error: couldn't connect to server [134:1234:134:1324:1234:134:1234:3]:27017, connection attempt failed: SocketException: Error connecting to [134:1234:134:1324:1234:134:1234:3]:27017 (134:1234:134:1324:1234:134:1234:3:27017) :: caused by :: No route to host :
connect@src/mongo/shell/mongo.js:372:17

当我只将 --ipv6 传递给入口点时,我的 netstat 确实确认了 mongo 监听mongod --ipv6

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      1/mongod            
tcp6       0      0 ::1:27017               :::*                    LISTEN      1/mongod   

【问题讨论】:

  • 补充一下,我可以从Mongo的日志中看到它找不到IPv6地址。不管我用什么。 ``` {"t":{"$date":"2021-10-02T11:50:21.623+00:00"},"s":"W", "c":"NETWORK", "id" :23021, "ctx":"initandlisten","msg":"找不到对等点的地址","attr":{"peer":{"code":7,"codeName":"HostNotFound","errmsg" :"找不到地址 [[::]]:27017: SocketException: Host not found (authoritative)"}}} ``

标签: mongodb docker ipv6


【解决方案1】:

这不是一个理想的答案 - 但它是一个很好的解决方法,直到提供更好的答案。

通过添加第二个网络,我能够让 mongo 服务器为其他容器提供服务。 / 我遵循了另一个关于堆栈溢出的问题的答案: 创建两个容器并确保它们具有 IPv6 连接后,我停止它们并运行以下命令。

$ docker network create network2
$ docker network connect network2 container_name1
$ docker network connect network2 container_name2
$ docker start container_name1
$ docker start container_name2

然后我能够告诉容器 1 通过 Docker 私有 IPv4 地址与容器 2 联系。 似乎在搞砸了配置文件之后,我需要将其更改回来,现在似乎可行的是:

mongod --dbpath ~/mongoDB --bind_ip 172.17.0.3 --ipv6 

然后简单地更新另一个容器上的 mongodb 定位器:

$conn = new MongoDB\Client('mongodb://172.17.0.3:27017');

还有瓦拉!我的空白容器化 mongodb 可通过 IPv6 评估到容器化 Web 服务器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 2018-09-04
    • 2018-11-07
    相关资源
    最近更新 更多