1

公式の MongoDB Docker イメージを使用して、1 つのコンテナー内に 3 セットのレプリケーション クラスターを作成しようとしています。

この公式ガイドに従って、次の dockerfile を作成しました。

  FROM mongo:3.2
    RUN mkdir -p /srv/mongodb/rs0-0 /srv/mongodb/rs0-1 /srv/mongodb/rs0-2
    CMD mongod --port 27017 --dbpath /srv/mongodb/rs0-0 --replSet rs0 --smallfiles --oplogSize 128 &
    CMD mongod --port 27018 --dbpath /srv/mongodb/rs0-1 --replSet rs0 --smallfiles --oplogSize 128 &
    CMD mongod --port 27019 --dbpath /srv/mongodb/rs0-2 --replSet rs0 --smallfiles --oplogSize 128 &
    CMD mongo --port 27017 --eval 'rs.initiate({_id: "rs0",members: [{_id: 0,host: "localhost:27017"}]})'
    CMD mongo --port 27017 --eval "printjson(rs.conf())"
    CMD mongo --port 27017 --eval 'rs.add("localhost:27018")'
    CMD mongo --port 27017 --eval 'rs.add("localhost:27019")'
    CMD mongo --port 27017 --eval "printjson(rs.status())"

しかし、実行すると、次のエラーが発生します。

  MongoDB shell version: 3.2.9
    connecting to: 127.0.0.1:27017/test
    2016-09-04T06:53:06.664+0000 W NETWORK  [thread1] Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
    2016-09-04T06:53:06.664+0000 E QUERY    [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
    connect@src/mongo/shell/mongo.js:231:14
    @(connect):1:6
    exception: connect failed

元の mongo イメージを実行して同じ CMD を実行しようとすると、同じ結果が得られません。

Dockerfileに追加しようとしUSER rootましたが、まったく役に立ちませんでした。

これを機能させるにはどうすればよいですか?

アップデート

  • から始まるイメージを作成しようとしましたがubuntu、同じ結果です
  • まあ、これはある種の docker ファイルのアクセス許可の問題のようです。コードを bash スクリプトに移動してそこから実行すると、すべてが正常に機能しました。これは、これが発生する理由に対する回答ではなく、必要な場合の解決策です。
4

1 に答える 1

0

無効な複数の CMD を入れたため、dockerfile が機能していません。

ドキュメントには次のように記載されています。

Dockerfile には CMD 命令を 1 つだけ含めることができます。複数の CMD をリストすると、最後の CMD のみが有効になります。

于 2016-10-04T10:36:27.680 に答える