シナリオの説明 あるシステムでは、機能サービスは その結果、顧客はサーバーを再起動しました... サービスを再起動するためにサーバーにログインすると、データベース内の以前のデータが消える可能性があるという問題が見つかりました (docker run を使用してサービスを再度開始する場合)。 解決 試行 1 最初はデータが確実に失われたと思ったので、再度データを復旧する必要がありましたが、作業量が膨大すぎました... でも仕方がない、次回起動時にストレージをハードディスクにマウントするだけだ、Orz しかし、同僚と話し合った結果、より簡単な(ただし永続的ではない)解決策を見つけました。試行 2 を参照してください。 試行2 同僚によると、 後で考えてみると、docker によって起動されたイメージのデータがマッピングされていない場合、そのデータはデフォルトのボリュームに保存されます。docker restart xxx でコンテナを再起動しても、変更されたデータはそのまま残ります。つまり、この時点では、サーバーが再起動され、コンテナがハングアップしています (docker ps を使用して表示すると、コンテナのステータスは Exited です)。ただし、実際には、以前のデータはデフォルトのボリュームに残っており、変更されたデータはコンテナが削除された場合にのみ失われます。 検証テスト イメージをパックし、コンテナを起動し、ファイルを作成し、停止し、再度起動して、ファイルが存在するかどうかを確認するだけです。 # コンテナを起動します ➜ docker_start_test docker run -itd --name docker_run_test 4cbf48630b46 ping 127.0.0.1 d6278f537113122d4ccbe00950790750215c5a09002bcbd1ef6f9e660fc9eaac ➜ docker_start_test docker ps -a コンテナID イメージ コマンド 作成ステータス ポート名 d6278f537113 4cbf48630b46 "ping 127.0.0.1" 3秒前 2秒前 docker_run_test # コンテナにファイルを追加 ➜ docker_start_test docker exec -it docker_run_test /bin/sh sh-4.2#パスワード / sh-4.2# タッチテスト sh-4.2# 終了 出口 # コンテナを再起動します ➜ docker_start_test docker stop docker_run_test docker_run_test ➜ docker_start_test docker ps -a | grep docker_run_test d6278f537113 4cbf48630b46 "ping 127.0.0.1" 約1分前 終了しました (137) 12秒前 docker_run_test # ファイルが存在するか確認します ➜ docker_start_test docker start docker_run_test docker_run_test ➜ docker_start_test docker exec -ti docker_run_test /bin/sh sh-4.2# ls anaconda-post.log bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys test tmp usr var ご覧のとおり、ファイル test はまだ存在しています。コンテナを停止し、docker rm を使用してコンテナを削除し、同じ名前のコンテナを再起動すると、コンテナ内に test ファイルがないことがわかります。 # コンテナを停止/rm ➜ docker_start_test docker stop docker_run_test docker_run_test ➜ docker_start_test docker ps -a | grep docker_run d6278f537113 4cbf48630b46 "ping 127.0.0.1" 7 分前 終了 (137) 13 秒前 docker_run_test ➜ docker_start_test docker rm d6278f537113 d6278f537113 # 同じ名前で新しいコンテナを起動します ➜ docker_start_test docker run -itd --name docker_run_test 4cbf48630b46 ping 127.0.0.1 99a6f5df0a86e4c07abf184e322a23e4fbec89ff354691459cdac8fcd8687ba3 # 検証するコンテナに入る ➜ docker_start_test docker exec -ti docker_run_test /bin/sh sh-4.2# ls anaconda-post.log bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var sh-4.2# ls テスト ls: テストにアクセスできません: そのようなファイルまたはディレクトリはありません docker runの手順 公式サイトによると、start コマンドの機能は次のとおりです。 うーん、かなり単純で、言うことはあまりないですね 追伸 実際、コンテナのストレージディレクトリをマウントするのが最善の方法です...また、一般的に言えば、コンテナを使用してデータベースサービスを起動すべきではないようです 要約する 上記は、docker run によって起動されたコンテナがデータをハングアップした場合の対処方法について紹介したものです。お役に立てば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
<<: Vue3 での Teleport の使用に関する詳細な説明
>>: MySQL データベース監視ソフトウェア lepus の使用上の問題と解決策
この記事では、例を使用して、MySQL のデータベース間トランザクション XA 操作について説明しま...
MySQL 外部キー制約 (FOREIGN KEY) はテーブルの特別なフィールドであり、主キー制約...
axiosをインストールして通信を実装するここでは、axios を使用して Vue フロントエンドと...
この投稿では、通知、画像とビデオ、フォーム フィールド、タイトル、段落、箇条書きリスト、ナビゲーショ...
主要な Web サイトと個人的な習慣に従って、Docker ソースを追加するには次の方法を使用します...
はじめに: 最近 Hadoop プラットフォームの構築を勉強し始めたので、ローカルマシンに VMwa...
序文SpringBoot + Vueのフロントエンドとバックエンドを分離したプロジェクトをどのように...
Docker は非常に人気のあるコンテナ技術です。K8S によって廃止され、別のコンテナ技術である ...
この記事の例では、セカンダリメニュー効果を実現するためのJSの具体的なコードを参考までに共有していま...
1. 複雑なSQLクエリ1.1. 単一テーブルクエリ(1)指定の列を選択する[例] 全生徒の生徒ID...
1. tomcatイメージをダウンロードする docker pull tomcat:8.5.29 2...
MySql での時間比較の実装unix_timestamp() unix_timestamp 関数は...
目次序文面接官は適切な質問をしていますか? § React は setState をどのように制御し...
目次1. 開発前の準備2. 新しいプロジェクトIdea は Java 開発のための強力なツールであり...
リンク A のセマンティクス、ライティング スタイル、およびベスト プラクティス。私は JavaEy...