Zend Framework 2 + докер: MongoDB ConnectionTimeoutException - PullRequest
0 голосов
/ 12 декабря 2018

Я использую Zend Framework 2 и MongoDB v3.2.11.

При запуске приложения ZF появляется следующая ошибка:

Неустранимая ошибка: Uncaught MongoDB \ Driver\ Exception \ ConnectionTimeoutException: не найдено подходящих серверов (serverSelectionTryOnce установлено) в /var/www/project/vendor/mongodb/mongodb/src/Collection.php в строке 360

Вот мой докер-compose:

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"

Та же ошибка.

1 Ответ

0 голосов
/ 12 декабря 2018

После 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 будет реплицирован и готов к использованию.для автоматизации второй части этого (config mongodb) вы можете написать сценарий bash, который работает как Entrypoint в файле docker-compose, или использовать несколько реплицированных образов docker, таких как bitnami .

...