簡體   English   中英

使用 Docker-Compose 在 MongoDB 上導入數據

[英]Import Data on MongoDB using 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

mongo-seed/Dockerfile

FROM mongo

COPY census.json /census.json

CMD mongoimport --host mongodb --db test --collection census --type json --file /census.json --jsonArray

mongo-seed/census.json

[
 {
   "Geography": "Abbeville city, Alabama",
   "Census": "2688"
 }
]

docker-compose 起來后出錯

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

mongoimport語句中,我嘗試使用不同的主機名: mongodb_1127.0.0.1localhost

我讀過,如果設置了replSet ,它可能會出現此錯誤,但我不會設置replSet ,除非它是默認設置,在這種情況下,我不知道它是如何禁用它的。

我也嘗試過mongorestore而不是mongoimport但得到了同樣的錯誤。

自從 Docker 中不推薦使用鏈接以來,我已經讀到,環境變量可能不再有效。 不確定這是真的還是發生在這里。

有人有想法嗎?

我最終刪除了 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

/mongo-seed/import.sh

#! /bin/bash

mongoimport --host mongodb --db test --collection census --type json --file /mongo-seed/census.json --jsonArray

您看到 Permission denied 因為您沒有將.sh文件標記為可執行文件。 只需運行chmod +x file.sh然后再次運行整個chmod +x file.sh -compose up。

有很多關於看似“舊”的方法的信息。 使用 bash 腳本對我來說也沒有吸引力,所以我決定深入挖掘並找到一個“合適的”解決方案。 這里是:

https://hub.docker.com/_/mongo (“初始化新實例”部分)

另外: https://stackoverflow.com/a/42917632/2761550 (使用搜索引擎很難找到這個)

就我而言,我將我的 json 文件放入數據文件夾中

mongoimport:
image: library/mongo:latest
container_name: my-import
volumes:
  - ./data/orders.json:/src/data/orders.json
command: mongoimport --host mongodb --db my-mongo --collection orders --file /src/data/orders.json


mongodb:
image: library/mongo:latest
container_name: my-mongo
ports:
  - 27017:27017
depends_on:
  - mongoimport
restart: always

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM