2017-09-27 10 views
0

私は(そのスニペット用マットのおかげで今のところ)ドッキングウィンドウ・コン経由のMongoDBドッキングウィンドウのインスタンス(mongo_db)のバックアップダンプをやっているという単一のタイムスタンプに:Mongodumpファイル

実行
version: "3" 
    services: 
    mongo_db_backup: 
     image: 'mongo:3.4' 
     volumes: 
     - '/backup:/backup' 
     command: | 
     mongodump --host mongo_db --out /backup/ --db specific 

コマンド

$ docker-compose run mongo_db_backup 

は私にspecificデシベルのすべてのコレクションを与え、/backup/specificに格納します。

ダンプファイルを1つだけ取得することは可能ですか(現在の時間と呼ばれていますか?

私は--outを使用して、フォルダ内のファイルを取得しています。ドキュメントではと一緒に--archiveを使用できないと言っています。

さらに詳しい情報アーカイブ出力を設定するには、env変数を使用する必要があります。このような何か:

mongo_db_backup: 
    image: 'mongo:3.4' 
    volumes: 
    - '/backup:/backup' 
    command: 
    - sh 
    - -c 
    - | 
     mongodump 
     --host mongo_db 
     --gzip 
     --db specific 
     $$(
     if [ $TYPE = "hour" ] 
     then echo "--archive=/backup/hour/$$(date +"%H").gz" 
     elif [ $TYPE = "day" ] 
     then echo --archive=/backup/day/$$(date +"%d").gz 
     fi 
    ) 

$ docker-compose run -e TYPE=day mongo_db_backup

+0

コマンドをsh -cに変更してみてくださいmongodump --host mongo_db --gzip --archive = /バックアップ/ $$(日付+ "%Y%m%d_%H%M%S")--db特定 " –

+0

" | "は必要ですか? – user3142695

+0

あなたが次の行に置いた場合のみ。'command:'を使用する場合は不要です。 –

答えて

1

で実行あなたはDBを変更したい場合は、

docker-compose run -e DB=abc mongo_db_backup 
以下のようにそれを実行することができます今すぐ

version: "3" 
    services: 
    mongo_db_backup: 
     image: 'mongo:3.4' 
     volumes: 
     - '/backup:/backup' 
     command: sh -c "mongodump --host mongo_db --gzip --archive=/backup/$$(date +'%Y%m%d_%H%M%S') --db $${DB:=specific}" 

以下にごコンを変更することができます

docker-compose run mongo_db_backup abcのように使用する場合は、012を作成する必要がありますスクリプトはその中の引数を扱います。あなたは、環境変数を指定するかではないされているに基づいてコマンドを変更する必要がある場合は、環境変数

を逃すのデフォルトの動作は、変更することができます - だから、

編集-1の環境変数を使用してそれを行うには簡単です他

が解決する場合とコンで、複数行ラインコマンド:

command: sh -c "mongodump --host mongo_db --gzip --archive=/backup/$$(date +'%Y%m%d_%H%M%S') $$(if [ -z $DB ]; then echo '--db default_db'; else echo --collection $DB; fi)" 

編集-2以下のコマンドコンで複数行のコマンドを使用しての問題、あなたは以下のアレイと、複数行

command: 
    - sh 
    - -c 
    - | 
    multi line shell script 

の組み合わせを使用する必要があるがドッキングウィンドウ-COMPOSEは、我々がする必要がある変数を処理しているので、私はあなたの更新のために

command: 
    - bash 
    - -c 
    - | 
    TYPE=$${TYPE:=day} 
    if [ ! -d /backup/hour ]; then mkdir /backup/hour; fi 
    if [ ! -d /backup/day ]; then mkdir /backup/day; fi 

    mongodump --host mongo_db --gzip \ 
    --db test \ 
    $$(\ 
     if [ "$$TYPE" == "hour" ]; then \ 
     echo "--archive=/backup/hour/$$(date +'%H').gz"; \ 
     elif [ "$$TYPE" == "day" ]; then \ 
     echo "--archive=/backup/day/$$(date +'%d').gz"; \ 
     fi \ 
    ) 

を働いたコマンドですそれぞれ$から$$を使用してエスケープします。従って$TYPE$$TYPEになります。またmongodumpは1つのコマンドですので、複数の行に分割する場合は、\を複数行のコマンド継続に使用する必要があります

+0

パーフェクト。 env変数が設定されていないとどうなりますか?それを使用して特定のコレクション(データベースではない)を設定します。 env変数でコレクションが設定されていない場合は、完全なダンプを実行する必要があります。 – user3142695

+0

いいえ、DB名のデフォルト値 'specific'をとるように追加しました。あなたがこれらのことをする必要があるなら、そのような状況に対処できるダンプスクリプトが最適でしょう。 –

+0

私はそのようなダンプスクリプトの小さな例を教えてください。 --collectionオプションを設定する場合のみです。それは本当に素晴らしいだろう! – user3142695

関連する問題