Импорт файла JSON в контейнер mon go с использованием механизма аутентификации - PullRequest
1 голос
/ 12 марта 2020

Я использую контейнер mon go и хочу вставить записи из файла JSON в контейнер mon go

Вот docker -compose.yml

version: '3'
services:
  mongodb:
    image: mongo
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: "dev"
      MONGO_INITDB_ROOT_PASSWORD: "pass"
  mongo_seed:
    build: ./mongo-seed
    depends_on:
      - mongodb

mon go -seed - это еще один контейнер docker, который использует mongoimport для загрузки данных в базу данных

FROM mongo

COPY services.json /services.json

CMD mongoimport --host mongodb --username dev --password pass --authenticationDatabase cloud --db cloud --collection services --type json --upsertFields number,type --file /services.json

, но во время работы выдает ошибку

SASL SCRAM-SHA-1 authentication failed for dev on cloud from client 192.168.229.9:34598 ; UserNotFound: Could not find user "dev" for db "cloud"
mongodb_1     | 2020-03-12T13:46:35.293+0000 I  NETWORK  [conn2] end connection 192.168.229.9:34598 (1 connection now open)
mongo_seed_1  | 2020-03-12T13:46:35.293+0000    error connecting to host: could not connect to server: connection() : auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-1": (AuthenticationFailed) Authentication failed

Как указать имя пользователя и пароль (аутентификация) при вставке данных с помощью mongoimport.

Я также попытался указать переменную MONGO_INITDB_DATABASE: "cloud" env в файле составления, даже если этого не произошло работа.

1 Ответ

0 голосов
/ 16 апреля 2020

Заранее извините, что я не проверял это локально или что-то еще, но я считаю, что вам не хватает конфигурации для создания вашей базы данных не по умолчанию.

Вы пытаетесь подключиться к «облаку», поэтому попробуйте добавить следующую среду в контейнер «mongodb»:

MONGO_INITDB_DATABASE=cloud

Редактировать :

Также я бы скептически отнесся к значению --authenticationDatabase. Я не должен был использовать это в прошлом.

IDK, что по умолчанию, но вы можете попытаться удалить, предполагая, что по умолчанию делает правильные вещи.

Я обнаружил другую проблему, где принятый ответ использует значение для --authenticationDatabase, отличное от для --db. Надеюсь, это тоже полезно. { ссылка }

...