php - 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"
同样的错误。
解决方案
在 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。
推荐阅读
- reactjs - Formik 复选框在检查时造成如此多的延迟 #1901
- c - 挣扎于 C 字符串和 printf %s
- c# - 无法在 C# 中发送电子邮件
- ios - 如何设置约束,如果视图的宽度不能至少为某个宽度,则该视图的宽度为 0
- angular - angular 8 populate 从 observable 下拉
- c# - 如何使用 Asp.Net Core 3.0.1 从 Windows 读取剪贴板数据
- java - 如何将json字符串转换为对象java
- regex - 如何使用正则表达式 python 在下面的字符串中获取名称“Gokila”?
- javascript - 如果 XHR 对象已经形成,则从 XHR 获取 formData 对象
- asp.net - RDLC 在记分表上显示重复记录