容器启动时无法初始化MongoDB

时间:2018-08-04 16:47:15

标签: mongodb docker docker-compose

这是我的docker-compose.yaml

version: '3.3'
mongo:
  build:
    context: '.'
    dockerfile: 'Dockerfile'
  environment:
    MONGO_INITDB_DATABASE: 'mydb'
  ports:
    - '27017:27017'
  volumes:
    - 'data-storage:/data/db'
  networks:
    mynet:

volumes:
  data-storage:

networks:
  mynet:

这是我的Dockerfile

FROM mongo:latest
COPY ./initdb.js /docker-entrypoint-initdb.d/

最后是我的inidb.js

db.createCollection("strategyitems");
db.strategyitems.createIndex( {strategy: 1 }, { unique: false } );
db.strategyitems.createIndex( {strategy: 1, symbol: 1 }, { unique: true } );
db.strategyitems.insertMany([
  { strategy: "crypto", symbol: "btcusd", eval_period: 15, buy_booster: 8.0, sell_booster: 5.0, buy_lot: 0.2, sell_lot: 0.2 },
  { strategy: "crypto", symbol: "ethusd", eval_period: 15, buy_booster: 8.0, sell_booster: 5.0, buy_lot: 0.2, sell_lot: 0.2 },
  { strategy: "crypto", symbol: "neousd", eval_period: 15, buy_booster: 8.0, sell_booster: 5.0, buy_lot: 0.2, sell_lot: 0.2 }
]);

容器成功构建并启动...但是无法执行上述db语句。

如果我登录到容器,则文件夹/docker-entrypoint-initdb.d/包含initdb.js ...,因此我希望数据库初始化。

我想念什么吗?

1 个答案:

答案 0 :(得分:1)

因此,提供的撰写文件对我不起作用,我必须对其进行编辑以使其开始运行(v18.06 CE),因此请单单了解。

version: '3.3'
services:
  mongo:
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      MONGO_INITDB_DATABASE: 'mydb'
    ports:
      - '27017:27017'
    volumes:
      - 'data-storage:/data/db'
    networks:
      mynet:

volumes:
  data-storage:

networks:
  mynet:

接下来,如果您在添加docker-compose up文件之前运行initdb.js,然后用docker-compose down停止,那么docker-compose down会停止容器,但不会删除容器音量

docker ps

| CONTAINER    | ID               | IMAGE                | COMMAND | CREATED | STATUS | PORTS | NAMES |         |                          |                    |
|--------------|------------------|----------------------|---------|---------|--------|-------|-------|---------|--------------------------|--------------------|
| c412bbd9a22b | lumberjack_mongo | docker-entrypoint.s… | 7       | minutes | ago    | Up    | 6     | minutes | 0.0.0.0:27017->27017/tcp | lumberjack_mongo_1 |

docker volume ls

| DRIVER |   | VOLUME | NAME                    |
|--------|---|--------|-------------------------|
| local  |   |        | lumberjack_data-storage |

docker-compose down
Removing lumberjack_mongo_1 ... done
Removing network lumberjack_mynet

docker volume ls

| DRIVER |   | VOLUME | NAME                    |
|--------|---|--------|-------------------------|
| local  |   |        | lumberjack_data-storage |

在存在卷的情况下运行docker-compose up时会出现问题-Docker在容器启动之前安装了卷。 Mongo执行some pre-checks,如果发现目录存在,则跳过initdb序列。

如果您在docker-compose down之后删除卷并执行docker-compose up,则将从头开始创建该卷,预检查将什么也没有发现并初始化mongodb

docker volume rm lumberjack_data-storage
lumberjack_data-storage

docker-compose up

Creating network "lumberjack_mynet" with the default driver
Creating volume "lumberjack_data-storage" with default driver
Creating lumberjack_mongo_1 ... done
Attaching to lumberjack_mongo_1

[....]
mongo_1  | /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/initdb.js
mongo_1  | 2018-08-04T18:08:47.699+0000 I INDEX    [LogicalSessionCacheRefresh] build index on: config.system.sessions properties: { v: 2, key: { lastUse: 1 }, name: "lsidTTLIndex", ns: "config.system.sessions", expireAfterSeconds: 1800 }

mongo_1  | 2018-08-04T18:08:47.745+0000 I NETWORK  [conn2] received client metadata from 127.0.0.1:45324 conn2: { application: { name: "MongoDB Shell" }, driver: { name: "MongoDB Internal Client", version: "4.0.0" }, os: { type: "Linux", name: "Ubuntu", architecture: "x86_64", version: "16.04" } }
mongo_1  | 2018-08-04T18:08:47.747+0000 I STORAGE  [conn2] createCollection: initdb.strategyitems with generated UUID: 585edb14-bc63-4879-bc5d-504867fb5e12
mongo_1  | 2018-08-04T18:08:47.851+0000 I INDEX    [conn2] build index on: initdb.strategyitems properties: { v: 2, key: { strategy: 1.0 }, name: "strategy_1", ns: "initdb.strategyitems" }
mongo_1  | 2018-08-04T18:08:47.851+0000 I INDEX    [conn2]       building index using bulk method; build may temporarily use up to 500 megabytes of RAM
mongo_1  | 2018-08-04T18:08:47.852+0000 I INDEX    [conn2] build index done.  scanned 0 total records. 0 secs
mongo_1  | 2018-08-04T18:08:47.881+0000 I INDEX    [conn2] build index on: initdb.strategyitems properties: { v: 2, unique: true, key: { strategy: 1.0, symbol: 1.0 }, name: "strategy_1_symbol_1", ns: "initdb.strategyitems" }
mongo_1  | 2018-08-04T18:08:47.881+0000 I INDEX    [conn2]       building index using bulk method; build may temporarily use up to 500 megabytes of RAM
mongo_1  | 2018-08-04T18:08:47.882+0000 I INDEX    [conn2] build index done.  scanned 0 total records. 0 secs
mongo_1  | 2018-08-04T18:08:47.886+0000 I NETWORK  [conn2] end connection 127.0.0.1:45324 (0 connections now open)
[....] 
mongo_1  | MongoDB init process complete; ready for start up.
mongo_1  |
mongo_1  | 2018-08-04T18:08:48.933+0000 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
mongo_1  | 2018-08-04T18:08:48.939+0000 I CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=e90c80083360