2017-06-14 27 views
0

ドッカーでPostgresを 'docker restart'コマンドで再起動しようとしました。それは停止したが、私はそれを開始することができません。私が 'ps -a'コマンドを実行すると、ステータスは 'Exited'と表示されます。もう一度やり直す方法はありますか?私はそのデータベースのデータを失いたくはありません。
コンテナの再起動中にアクティブな接続が1つありました。それは問題を作り出していますか?ドッカーでPostgresを再起動

+0

質問にさらに多くの情報を追加する必要があります。元のコンテナを開始するために使用されたコマンドは何ですか? Dockerのどのバージョン? DockerはどのホストOSにインストールされていますか? MacOSにインストールされている場合は、Docker for MacまたはDocker Machineを使用していますか? 'docker logs 'の出力は?終了コードとは何ですか? –

答えて

0

コンテナがバグなどでクラッシュした場合は、コンテナを再起動できないことがあります。ただし、リカバリするコンテナから新しいイメージを作成することで、データの少なくとも一部をリカバリできます。あなたがそれを行う方法をここにあります:

  1. まず、あなたのマシンで実行しているすべてのコンテナをリスト:

    docker ps -a 
    
  2. は、あなたがしたいすべてのデータを使用して実行コンテナである1を見つけます回復します。 CREATEDフィールド(これはいつ起動したのか分かります)から把握できるはずです。

  3. グラブコンテナのハッシュ(CONTAINER_ID)、そして次のコマンドを実行します。これは、あなたが実行可能な画像のような容器に保存されます

    docker commit <hash> <a_new_name:tag> 
    

    を。

  4. は、私たちの基本イメージが提供するものに応じて、bashまたはshセッションとコンテナを実行します。

    docker run --entrypoint sh/bash -it <a_new_name:tag> 
    

これはあなたが出て行く時には、コンテナの状態にアクセスできるようになります、状況を調べたり、バグを発見したり、場合によってはデータを回復することができます。がんばろう!

+0

ありがとうございます。私はログをチェックしました。 'エラー:別のPostgreSQLサーバが' /var/lib/pgsql/data/data/postmaster.pid 'ファイルが既に存在するためDBデータを使用しているようです。 pidファイルが残っていることが確かな場合は、 'clear_pgdata_pidfile'オプションを使用してください(詳細については、 'container-usage'を参照してください)。私は同じコンテナを回収しようとしています。 –

+0

イメージをコミットし、そのイメージを使用して新しいコンテナを作成しました。新しいコンテナが作成されましたが、データベースに接続できませんでした。理由を訴えない。最後にrootユーザーとしてログインし、 '/var/lib/pgsql/data/data/postmaster.pid'を削除しました。今度は同じコンテナを正常に開始することができました。作成されたイメージを使用してコンテナを作成する方法について詳しく調べていきます。 –

+0

このような既存のコンテナからイメージをコミットすることは決してお勧めしません。あなたのデータはボリューム内にあって100%アクセス可能であったはずです。 'docker inspect 'を使って、ボリュームが存在するかどうか確認してください。公式の 'postgres'イメージを使用している場合は、/ var/lib/pgsqlフォルダのボリュームがあります。 – programmerq

関連する問題