23

私が実装しようとしているのは、コンテナ内で呼び出しmysqldump、データベースをコンテナ自身のディレクトリにダンプすることです。

まず、以下のコマンドを試します。

$ docker exec container-name mysqldump [options] database | xz > database.sql.xz

それはうまくいかないので、別のものを試します:

$ docker exec container-name bash -c 'mysqldump [options] database | xz > database.sql.xz'

今回はうまくいきました。

しかし、それは本当に不自由です。

次に docker-py 今回はcmdオプションを使用してみましたが、次のように機能しました。

cmd=['bash', '-c', 'mysqldump [options]  database | xz > database.sql.xz']

以下のロガーイベント:

level="info" msg="-job log(exec_start: bash -c mysqldump [options]  database | xz > database.sql.xz, fe58e681fec194cde23b9b31e698446b2f9d946fe0c0f2e39c66d6fe68185442, mysql:latest) = OK (0)"

私の質問:

私の目標をアーカイブするよりエレガントな方法はありますか?

4

1 に答える 1

43

パイプを機能させるには、-i フラグを追加するだけです。

-i, --interactive    Keep STDIN open even if not attached

docker exec -i container-name mysqldump [options] database > database.sql.xz

パイプをファイルリダイレクトに置き換えましたが、パイプでも同じように機能します。-t オプションは使用しないでください。これにより破損します。


追加:

SQL ダンプを mysql にインポートするには:

docker exec -i container-name mysql [options] database < database.sql.xz

この小さなスクリプトは、mysql をパイプで実行しているかどうかを検出します。

#!/bin/bash
if [ -t 0 ]; then
    docker exec -it container-name mysql "$@"
else
    docker exec -i container-name mysql "$@"
fi
于 2016-03-07T11:04:11.680 に答える