1. ホーム
  2. mongodb

[解決済み] MongoDBコンテナの起動時にDBを作成するには?

2022-08-30 18:17:34

質問

私はDockerで作業しており、PHP、MySQL、Apache、Redisでスタックを持っています。私は今MongoDBを追加する必要があるので、私はそれをチェックしていました。 Dockerfile をチェックして、最新版と にある docker-entrypoint.sh ファイルから MongoDB Dockerhub というファイルがありますが、コンテナのデフォルトの DB、管理者ユーザー/パスワード、認証方法を設定する方法が見つかりませんでした。 docker-compose.yml ファイルからコンテナのデフォルトDBと管理者ユーザー/パスワード、そしておそらく認証方法を設定する方法を見つけることができませんでした。

MySQLでは、例えば、いくつかのENV変数を設定することができます。

db:
    image: mysql:5.7
    env_file: .env
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}

そして、これでDBの設定とユーザー/パスワードが root のパスワードに設定します。

MongoDBで同じことを実現する方法はないのでしょうか?どなたか経験や回避策をお持ちの方はいらっしゃいませんか?

どのように解決するのですか?

ドッカーハブ mongo にあるスクリプトを実行します。 /docker-entrypoint-initdb.d/ に何も入力されていないときは /data/db ディレクトリに何も入力されていないときです。

データベースの初期化

この mongo コンテナイメージは /docker-entrypoint-initdb.d/ をデプロイするためのパスです。 .js または .sh データベースの初期化時に一度だけ実行されるスクリプトを設定します。 .js スクリプトは test に対して実行されます。 MONGO_INITDB_DATABASE で定義されている場合は

COPY mysetup.sh /docker-entrypoint-initdb.d/

または

COPY mysetup.js /docker-entrypoint-initdb.d/

簡単な初期化 mongo シェル javascript ファイルでは container コレクションの設定、ログの記録、そしてエラー時の終了方法 (結果チェック用) を示すファイルです。

let error = true

let res = [
  db.container.drop(),
  db.container.createIndex({ myfield: 1 }, { unique: true }),
  db.container.createIndex({ thatfield: 1 }),
  db.container.createIndex({ thatfield: 1 }),
  db.container.insert({ myfield: 'hello', thatfield: 'testing' }),
  db.container.insert({ myfield: 'hello2', thatfield: 'testing' }),
  db.container.insert({ myfield: 'hello3', thatfield: 'testing' }),
  db.container.insert({ myfield: 'hello3', thatfield: 'testing' })
]

printjson(res)

if (error) {
  print('Error, exiting')
  quit(1)
}

管理者ユーザー設定

root ユーザーの設定を制御するための環境変数は次のとおりです。

  • MONGO_INITDB_ROOT_USERNAME
  • MONGO_INITDB_ROOT_PASSWORD

docker run -d \
  -e MONGO_INITDB_ROOT_USERNAME=admin \
  -e MONGO_INITDB_ROOT_PASSWORD=password \
  mongod

または Dockerfile

FROM docker.io/mongo
ENV MONGO_INITDB_ROOT_USERNAME admin
ENV MONGO_INITDB_ROOT_PASSWORD password

を使用する必要はありません。 --auth をコマンドライン上で使用する必要はありません。 entrypoint.sh スクリプトは環境変数が存在することを検出するとこれを追加します。