首页 > 解决方案 > Zend Framework 2 + docker:MongoDB ConnectionTimeoutException

问题描述

我正在使用 Zend Framework 2 和 MongoDB v3.2.11。

当我启动我的 ZF 应用程序时,出现以下错误:

致命错误:未捕获的 MongoDB\Driver\Exception\ConnectionTimeoutException:serverSelectionTryOnce在第 360 行的 /var/www/project/vendor/mongodb/mongodb/src/Collection.php 中找不到合适的服务器(设置)

这是我的码头工人撰写:

mongodb:
    image: mongo:3.2.11
    restart: always
    container_name: mongodb
    environment:
      - MONGO_DATA_DIR=/data/project
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=mongopassword
    volumes:
      - mongodb-data:/data/project
    ports:
      - "27017:27017"
    command: mongod --smallfiles

这是我的 ZF 配置:

'caches' => [
        'Project\Web\Cache\Sessions' => [
            'template' => 'mongodb',
            'adapter' => [
                'name' => 'Project\Common\Cache\Storage\Adapter\MongoDb',
                'options' => [
                    'server' => getenv('ZF_MONGO_HOST'),
                    'connection_options' => [
                        'connect' => true,
                        'connectTimeoutMS' => 5000,
                        'fsync' => true,
                        'readPreference' => 'primaryPreferred',
                        'replicaSet' => 'set-1',
                    ],
                    'database' => getenv('ZF_MONGO_DATABASE_NAME'),
                    'collection' => 'sessions',
                    'ttl' => 3600,
                ],
            ],
        ],
    ],

这是我的 docker-compose.env:

## MONGO DB ##
ZF_MONGO_HOST=mongodb://my_user:mymongopassword@mongodb/my_db
ZF_MONGO_DATABASE_NAME=my_db

我尝试了什么: * 当我连接到 mongodb 时,它可以工作 * 我测试了用户凭据:工作 * 当我更改时,ZF_MONGO_HOST我得到了同样的错误,但在括号中我看到他无法连接到 - 错误 - url。所以设置似乎没问题。* 谷歌搜索约 3 小时:所有错误都连接到离线 mongodb 服务器...

有任何想法吗?

更新

我尝试了 bitnami 图像,设置如下:

  mongodb:
    image: bitnami/mongodb:3.6.8
    restart: always
    container_name: mongodb
    environment:
      - MONGODB_USERNAME=my_user
      - MONGODB_PASSWORD=mymongopassword
      - MONGODB_DATABASE=my_db
    volumes:
      - mongodb-data:/data/db-bitnami
    ports:
      - "27017:27017"

同样的错误。

标签: phpmongodbdockerzend-framework2

解决方案


在 docker 之后docker-compose up,连接到 MongoDB 数据库并输入rs.status(),它应该有member表明它是从属的字段。如果未设置,则需要在 mongodb 中定义:

rs.initiate( {
   _id : "set-1",
   members: [
      { _id: 0, host: "mongodb0.example.net:27017" },
      { _id: 1, host: "mongodb1.example.net:27017" },
      { _id: 2, host: "mongodb2.example.net:27017" }
   ]
})

在此步骤之后,您的 mongodb 已被复制并可以使用。为了自动化第二部分(配置 mongodb),您可以编写一个 bash 脚本,该脚本Entrypoint在 docker-compose 文件中工作,或使用一些复制的 docker 图像,如bitnami


推荐阅读