[解決済み] 停止している/起動していないDockerコンテナ内のファイルを編集する方法
質問
複数のコンテナに分割された自分のアプリケーションのエラーやデバッグ問題を修正しようとして、コンテナ内のファイルを頻繁に編集しています。
-
完全に怠け者で、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"である場合にのみ、これらの措置にフォールバックすべきなので、どんな変更も改善されるでしょう。
関連
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Docker Dockerコンテナからホストへのファイルコピー
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] 古いDockerコンテナを削除する方法
-
[解決済み] Dockerでデータベースなどの永続的なストレージを扱う方法
-
[解決済み] 既に起動しているDockerコンテナに新しいTTYで入る方法
-
[解決済み】Dockerは仮想マシンとどう違うの?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ZIPエラー - 何もできない
-
[解決済み】firebase-tools "-bash: firebase: command not found".
-
[解決済み] bash : cd : 引数が多すぎる [閉店].
-
[解決済み] sed で二重引用符と単一引用符をエスケープするにはどうしたらいいですか?
-
[解決済み] mkdir コマンドが bash スクリプトで見つかりません。
-
[解決済み] Bash/Terminalで複数行の環境変数を書き出す方法 例: RSA秘密鍵
-
[解決済み] bash スクリプトを実行している docker エントリポイントに "permission denied" が表示される。
-
[解決済み] bashでのDiffコマンド
-
[解決済み] Bash - "fi ;;" の使い方は?
-
[解決済み] 停止したDockerコンテナを別のコマンドで起動するには?