Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 使用Mongoose连接到docker环境中的MongoCrypted实例_Mongodb_Docker_Mongoose_Docker Compose_Docker Networking - Fatal编程技术网

Mongodb 使用Mongoose连接到docker环境中的MongoCrypted实例

Mongodb 使用Mongoose连接到docker环境中的MongoCrypted实例,mongodb,docker,mongoose,docker-compose,docker-networking,Mongodb,Docker,Mongoose,Docker Compose,Docker Networking,我在网上搜索过,但在任何地方都找不到我的答案。 我正在尝试使用NestJS框架运行一个API web服务 我正在运行docker compose,它启动API服务器、一个MongoDB实例和一个MongoCrypted实例,以允许在我的应用程序上进行客户端字段级加密 我可以连接到MongoDB实例,但不能连接到mongocryptd实例 Docker编写文件: 使用的dockerfile是mongo的官方dockerfile,但提供了args以构建包含企业功能的映像的企业版本 尝试从应用程序连接

我在网上搜索过,但在任何地方都找不到我的答案。 我正在尝试使用NestJS框架运行一个API web服务

我正在运行docker compose,它启动API服务器、一个MongoDB实例和一个MongoCrypted实例,以允许在我的应用程序上进行客户端字段级加密

我可以连接到MongoDB实例,但不能连接到mongocryptd实例

Docker编写文件: 使用的dockerfile是mongo的官方dockerfile,但提供了args以构建包含企业功能的映像的企业版本

尝试从应用程序连接到数据库时,我正在运行:

MongooseModule.forRoot(`mongodb://usr:pwd@mongodb:27017`, {
      useNewUrlParser: true,
      useUnifiedTopology: true,
      useFindAndModify: false,
      retryAttempts: 2,
      autoEncryption: {
        keyVaultNamespace,
        kmsProviders,
        extraOptions: {
          mongocryptdURI: `mongodb://mongocryptd:27020`,
          mongocryptdBypassSpawn: true
        }
      } as any
    })
**这是提供配置的NestJS版本。它类似于mongoose——第一个参数是URI,第二个是设置对象


没有自动加密选项,我可以连接而没有任何问题。这意味着我的数据库地址是正确的。 使用AutoEncyOption选项,我将获得
MongooseServerSelectionError:connect EconReconRefused 172.25.0.4:27020
(mongocryptd地址)。这意味着IP是正确的(DNS解析),但连接被拒绝。如前所述,端口(27020)由docker compose文件发布,我甚至尝试在构建本身中添加一个公开步骤

但是当我将容器的网络映射到主机(
网络模式:“主机”
)时,应用程序能够毫无问题地连接(将连接DNS更改为localhost:27017和27020)。所以这一定意味着这是一个与码头工人有关的问题

我尝试过的其他事情&&我尝试过的内容的概述:
  • 附加一个卷,用以下网络配置替换
    /etc/mongod.conf.orig
  • 在启动mongo服务之前,在生成步骤中替换卷,而不是附加卷
  • 我还尝试将
    bindIp
    更改为docker网络提供的特定应用程序IP
  • 所有类型的连接字符串,包括和不包括用户凭据、身份验证源和默认数据库
  • 端口27020在docker compose中发布,并在docker文件中公开
我没有主意了。感谢您的帮助!:)

编辑: 在进一步调试之后,我可以看到默认情况下,
mongod
是以
--bind\u ip\u all
运行的,因此更改conf文件应该不会产生效果。 还尝试使用mongods
docker entrypoint.sh运行
mongocryptd
,而不是覆盖它

  • 验证
    mongocryptd
    是否正在运行(
    ps awwxu
    等)
  • 验证是否可以使用
    mongo
    从运行它的同一容器上的
    bash
    连接到它
  • 验证是否可以使用
    mongo
    从主机系统连接到它
  • 检查
    mongocryptd
    日志(它基本上是一个带有一些额外功能的
    mongod
  • 验证
    mongocryptd
    是否正在运行(
    ps awwxu
    等)
  • 验证是否可以使用
    mongo
    从运行它的同一容器上的
    bash
    连接到它
  • 验证是否可以使用
    mongo
    从主机系统连接到它
  • 检查
    mongocryptd
    日志(它基本上是一个带有一些额外功能的
    mongod

  • 1.我可以使用
    ps awwxu
    验证它是否在根用户下运行。2.我遇到了一个失败的、连接被拒绝的错误——这是因为我没有在该容器上运行mongod进程,只是在mongocryptd上运行。我尝试从同一个容器中运行mongod和mongocryptd(运行MongoRegular image,打开shell,运行mongocryptd),但我遇到了相同的连接拒绝错误。3.同样,mongod没有运行4。日志是空的。我可以看到启动日志
    [listener]正在127.0.0.1上侦听和[listener]在端口27020上等待连接
    我已从同一容器重新运行mongocryptd和mongo,并使用Nmap扫描端口。27017和27020均表示为打开状态。使用mongo CLI时,我没有收到拒绝的连接,如果在连接设置中省略使用MongoCrypted的选项(上面示例中的自动加密密钥),我可以从应用程序进行连接。当我重新添加加密密钥时,它尝试连接到MongoCrypted,我得到了相同的EconReconFused错误。同样,当使用主机网络模式时,一切正常。通过这些步骤,mongo shell可以直接连接到mongocryptd进程,至少可以在其上运行ismaster。我已经完成了。它们是用默认配置配置的(我也尝试过传递上面解释的conf文件设置)。目前,我无法解决这个问题。我的最佳猜测是mongocryptd没有绑定到localhost以外的其他IP的选项的原因(在.conf文件中不接受它,也没有将它作为命令参数传递的选项)。3天后,我放弃了,在应用程序容器中安装了mongodb enterprise cryptd包。它可以完美地工作,但这不是最佳解决方案。你是对的,mongocryptd似乎无法识别--bind_ip.1。我可以使用
    ps awwxu
    验证它是否在根用户下运行。2.我遇到了一个失败的、连接被拒绝的错误——这是因为我没有在该容器上运行mongod进程,只是在mongocryptd上运行。我尝试从同一个容器中运行mongod和mongocryptd(运行MongoRegular image,打开shell,运行mongocryptd),但我遇到了相同的连接拒绝错误。3.同样,mongod没有运行4。日志是空的。我可以看到启动日志
    [listener]正在127.0.0.1上侦听和[listener]在端口27020上等待连接
    我已从同一容器重新运行mongocryptd和mongo,并使用Nmap扫描端口。27017和27020均声明为
    MongooseModule.forRoot(`mongodb://usr:pwd@mongodb:27017`, {
          useNewUrlParser: true,
          useUnifiedTopology: true,
          useFindAndModify: false,
          retryAttempts: 2,
          autoEncryption: {
            keyVaultNamespace,
            kmsProviders,
            extraOptions: {
              mongocryptdURI: `mongodb://mongocryptd:27020`,
              mongocryptdBypassSpawn: true
            }
          } as any
        })
    
    net:
      port: 27017
      bindIp: 0.0.0.0
      bindIpAll: true