Zend Framework 2 + docker: MongoDB ConnectionTimeoutException

Zend Framework 2 + docker: MongoDB ConnectionTimeoutException

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

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

Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionTimeoutException: No suitable servers found (serverSelectionTryOnce set) in /var/www/project/vendor/mongodb/mongodb/src/Collection.php on line 360

这是我的 docker-撰写:

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。所以设置似乎没问题。 * 谷歌搜索 ~3h:所有错误都连接到离线 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"

同样的错误。

在 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 脚本,它在 docker-compose 文件中作为 Entrypoint 工作,或者使用一些复制的 docker像 bitnami.

这样的图片