簡體   English   中英

在Docker容器中種子mongodb

[英]Seed mongodb inside a docker container

我知道有一些技巧,例如使用一個單獨的容器來播種真正的容器,例如此答案 我喜歡這種方法,但是我想知道容器啟動后是否可以這樣做。 只需創建一個Dockerfile。 使用以前的答案作為起點,我嘗試了各種解決方案,這是一個:

FROM mongo:3.0.15

COPY ./init.json /init.json

CMD (mongod &) && (sleep 70 && mongoimport -v --db reach-engine --collection MyDummyCollection --type json --file /init.json --jsonArray)

EXPOSE 27017

mongoimport是,這種解決方案不是很優雅,也不是mongoimport原因:由於mongod處於后台,因此mongoimport一旦完成容器停止,因此即使import成功,它也完全無法使用。

首先: 睡眠70太糟糕了,因為不清楚mongod花費70秒以上會發生什么。

想法?

我總是喜歡使用單獨的容器方法,但這並不意味着這是無法實現的。 您的問題是您正在后台啟動mongod,然后運行腳本。 您應該在后台運行腳本,然后啟動mongod作為主要進程。

https://github.com/vishnubob/wait-for-it上有一個不錯的shell腳本,它可以為您做所有等待的部分。 但是你需要netcat

所以這是一個更新的Dockerfile

Dockerfile

FROM mongo:3.0.15
RUN apt-get update -y && apt-get install -y netcat && apt-get clean
COPY ./init.json /init.json
COPY ./init.sh /init.sh
ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh /wait-for-it.sh
RUN chmod +x /init.sh /wait-for-it.sh
CMD /init.sh
EXPOSE 27017

init.sh

#!/bin/sh

bash -c "/wait-for-it.sh 127.0.0.1:3306 -t 120 -- mongoimport -v --db reach-engine --collection MyDummyCollection --type json --file /init.json" &
exec mongod

現在,當您運行容器時,您將看到以下輸出

2017-08-29T11:54:33.357+0000 I NETWORK  [initandlisten] waiting for connections on port 27017
2017-08-29T11:54:34.286+0000 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:33070 #1 (1 connection now open)
2017-08-29T11:54:34.287+0000 I NETWORK  [conn1] end connection 127.0.0.1:33070 (0 connections now open)
wait-for-it.sh: 127.0.0.1:27017 is available after 1 seconds
2017-08-29T11:54:34.295+0000    filesize: 556 bytes
2017-08-29T11:54:34.295+0000    using fields:
2017-08-29T11:54:34.296+0000 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:33072 #2 (1 connection now open)
2017-08-29T11:54:34.297+0000    connected to: localhost
2017-08-29T11:54:34.297+0000    ns: reach-engine.MyDummyCollection
2017-08-29T11:54:34.297+0000    connected to node type: standalone
2017-08-29T11:54:34.297+0000    using write concern: w='1', j=false, fsync=false, wtimeout=0
2017-08-29T11:54:34.297+0000    using write concern: w='1', j=false, fsync=false, wtimeout=0
2017-08-29T11:54:34.298+0000 I INDEX    [conn2] allocating new ns file /data/db/reach-engine.ns, filling with zeroes...
2017-08-29T11:54:34.338+0000 I STORAGE  [FileAllocator] allocating new datafile /data/db/reach-engine.0, filling with zeroes...
2017-08-29T11:54:34.340+0000 I STORAGE  [FileAllocator] done allocating datafile /data/db/reach-engine.0, size: 64MB,  took 0.001 secs
2017-08-29T11:54:34.342+0000    imported 4 documents
2017-08-29T11:54:34.342+0000 I NETWORK  [conn2] end connection 127.0.0.1:33072 (0 connections now open)

如您所見,服務器啟動與插入記錄之間甚至沒有1秒的延遲

暫無
暫無

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

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