使用Docker-Compose在MongoDB上导入数据

Ben*_*ley 7 mongodb docker dockerfile docker-compose

有很多站点显示了如何使用以下docker-compose方法将数据导入到mongodb中,但我的站点找不到数据库服务器。

如何使用docker-compose播种mongo数据库? https://gist.github.com/jschwarty/6f9907e2871d1ece5bde53d259c18d5f https://docs.codefresh.io/v1.0/docs/import-data-to-mongodb-in-composition

想知道是否有什么变化使它不再起作用。

docker-compose.yml

version: '3'
services:
  mongodb:
    image: mongo
    command: mongod --smallfiles
    ports:
      - 27017

  mongo_seed:
    build: mongo-seed/.
    links:
      - mongodb
Run Code Online (Sandbox Code Playgroud)

mongo-seed / Dockerfile

FROM mongo

COPY census.json /census.json

CMD mongoimport --host mongodb --db test --collection census --type json --file /census.json --jsonArray
Run Code Online (Sandbox Code Playgroud)

mongo-seed / census.json

[
 {
   "Geography": "Abbeville city, Alabama",
   "Census": "2688"
 }
]
Run Code Online (Sandbox Code Playgroud)

docker-compose up后发生错误

mongodb_1     | 2018-01-09T21:57:14.353+0000 I NETWORK  [initandlisten] waiting for connections on port 27017
mongo_seed_1  | 2018-01-10T00:19:58.286+0000    [........................] test.census 0B/1KB (0.0%)
mongo_seed_1  | 2018-01-10T00:19:58.332+0000    [........................] test.census 0B/1KB (0.0%)
mongo_seed_1  | 2018-01-10T00:19:58.332+0000    Failed: error connecting to db server: no reachable servers
mongo_seed_1  | 2018-01-10T00:19:58.332+0000    imported 0 documents
Run Code Online (Sandbox Code Playgroud)

mongoimport:发言,我一直在使用不同的主机名试图mongodb_1127.0.0.1本地主机

我已经读过,如果设置了replSet,它可能会出现此错误,但是我没有设置replSet,除非它是默认设置,在这种情况下,我不知道它如何禁用它。

我也尝试了mongorestore而不是mongoimport,但是得到了同样的错误。

我已经读过,因为Docker中不推荐使用链接,因为环境变量可能不再起作用。不知道这是真的还是在这里发生。

有人有想法吗?

Ben*_*ley 8

我最终删除了Dockerfile,在bash脚本中添加了命令,然后从docker-compose文件中调用了该脚本。在docker-compose文件中使用脚本而不是一个命令,因为我要导入多个文件,因此示例中未显示多个命令。我需要使用mongo:3.2.6来完成这项工作。可能还有其他版本,但是肯定可以使用。

docker-compose.yml

version: '3'
services:
  mongodb:
    image: mongo:3.2.6
    ports:
      - 27017:27017

  mongo_seed:
    image: mongo:3.2.6
    links:
      - mongodb
    volumes:
      - ./mongo-seed:/mongo-seed
    command:
      /mongo-seed/import.sh
Run Code Online (Sandbox Code Playgroud)

/mongo-seed/import.sh

#! /bin/bash

mongoimport --host mongodb --db test --collection census --type json --file /mongo-seed/census.json --jsonArray
Run Code Online (Sandbox Code Playgroud)

  • 我正在`/usr/local/bin/docker-entrypoint.sh:第354行:/mongo-seed/import.sh:权限被拒绝。任何帮助 (2认同)
  • 我总是收到:连接到主机时出错:`无法连接到服务器:连接握手期间发生连接()错误:身份验证错误:sasl 对话错误:无法使用机制“SCRAM-SHA-1”进行身份验证:(AuthenticationFailed)身份验证失败。`即使我在`mongodb`容器内手动运行命令! (2认同)