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.
这样的图片
我正在使用 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.