1. ホーム
  2. bash

[解決済み] 停止している/起動していないDockerコンテナ内のファイルを編集する方法

2022-05-26 13:13:45

質問

複数のコンテナに分割された自分のアプリケーションのエラーやデバッグ問題を修正しようとして、コンテナ内のファイルを頻繁に編集しています。

  • 完全に怠け者で、nano をインストールしてコンテナーで直接編集するか、または

  • コンテナからファイルを docker cp して編集し、それをコピーバックしてコンテナを再起動します。

これらは、コンテナ構築のための新しいコンテンツに来る前の中間ステップで、上記を行うよりもずっと時間がかかります (もちろん、これは中間/いじくり回すだけです)。

今、私は頻繁にコンテナの開始プログラムを壊しています。壊す場合、ノード スクリプトまたは python Web サーバー スクリプトのいずれかですが、両方とも通常、構文エラーで失敗します。

これらのコンテナーを保存する方法はありますか。コンテナーは起動しないので、docker exec で実行することはできず、したがって、それらは私の手元から失われています。私は、ビルド入力で問題のあるファイルを修正した後、rm/rmi/build/run ルートに進みます。

停止したコンテナ内のファイルを編集するか、それらを cp するか、停止したコンテナ内でシェルを開始するにはどうしたらよいでしょうか。

停止したコンテナーを修正することはできますか?

(それは、リモートコンピューター上で作業して、ネットワーク設定を破壊するようなものです。この方法では、接続は失われ、もしそれが存在するならば、フォールバックを使用しなければなりません。)

ホストから Docker コンテナ ファイルを編集するにはどうすればよいですか? は関連性があるように見えますが、古くなっています。

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

私自身の質問に答えています...まだ、より詳しい人からのより良い答えを期待しています!

2つの可能性があります。

1) ホスト上のファイルシステムを直接編集する . これはやや危険で、コンテナを完全に破壊する可能性があり、何が間違っているかに応じて他のデータも破壊する可能性があります。

2) スタートアップスクリプトを変更する を、bashを起動するような失敗しないものに変更し、修正/編集を行い、そしてスタートアッププログラムを目的のもの(nodeや以前あったもの)に再び変更します。

詳細はこちら。

1)使用方法

docker ps

で実行中のコンテナを探したり

docker ps -a

で全てのコンテナ(停止しているものも含む)を検索し

docker inspect (containername)

最初の値の1つである "Id" を探します。

これは実装の詳細を含む部分であり、変更される可能性があります。この方法では、コンテナを失う可能性があるので注意してください。

に移動します。

/var/lib/docker/aufs/diff/9bc343a9..(long container id)/

と入力すると、コンテナのベースとなるイメージに対して変更されたすべてのファイルが表示されます。ファイルの上書き、ファイルの追加、編集が可能です。

繰り返しますが、私はこれをお勧めしません。

2) で説明されているように https://stackoverflow.com/a/32353134/586754 のようなパスに、設定用の json config.json があります。

/var/lib/docker/containers/9bc343a99..(long container id)/config.json

ここで、引数を "nodejs app.js" などから "/bin/bash" に変更します。ここで、dockerサービスを再起動し、コンテナを起動します(正しく起動することが確認できるはずです)。その際

docker start -i (containername)

を追加して、直ぐに終了しないようにします。これで、コンテナで作業したり、後で

docker exec -ti (containername) /bin/bash

また、docker cpはコンテナの外で編集されたファイルをコピーするのに割と便利です。

また、コンテナが多かれ少なかれ "lost"である場合にのみ、これらの措置にフォールバックすべきなので、どんな変更も改善されるでしょう。