web-dev-qa-db-ja.com

Dockerコンテナにあるファイル/フォルダをプログラムで削除します

現在、プログラムでdockerコンテナー内にあるファイル/フォルダーを削除する方法を検討しています。 docker cpを使用して、コンテナからホストにファイルをコピーできることを知っています。ただし、Docker内でファイル/フォルダーを移動または削除できるdocker mvまたはdocker rmなどを探しています。

シナリオは、自動テストケースをJavaで作成しています。1つのケースでは、テストケースによって書き込まれたログをアサートするためにサーバーのログフォルダーからログファイルをコピーする必要があります。 docker cpを使用してログファイルをコピーしますが、古いテストケースのログも含まれているため、テストケースを実行する前にログファイルを削除できるかどうかを検討していました。私のテストケースのみ。他の方法はありますか?

16
Jimit Joshi

以下のコマンドを使用して、ホストで実行されているプログラムからファイルを削除できます

docker exec <container> rm -rf <YourFile>

ただし、コンテナが削除されなかったために古いファイルが存在する場合、一般的な方法は、すべてのテストスイートの実行が完了したらコンテナを削除することです。

新しいジョブは新しいコンテナを作成する必要があります。

33
sudhir sharma

Dockerファイル定義では、次を使用できます

RUN rm [folder-path]

ただし、ADDまたはCOPYを使用して追加すると、画像のサイズが大きくなります。

編集:ホストで実行されている外部プログラムから実行中のコンテナにアクセスするには、これを試してください。

  1. インスタンスの起動時に、ホストフォルダーをボリュームとしてマウントします。
  2. ホストでスクリプトまたはプログラムを実行して、ホスト上の目的のフォルダーを削除します。これは、コンテナーファイルシステムにも影響します。
3
Santanu Dey

コンテナbashコンソールにアクセスできます

#console control over container
docker exec -it a5866aee4e90 bash

コンテナ内にいるときは、コンソールで何でもできます。このコマンドを使用して、jbossデプロイメントディレクトリ内のファイルを見つけて名前を変更します。必要に応じて変更してください。また、mv use rmを使用してファイルを削除できます。

find /home/jboss/jbossas/standalone/deployments -depth -name "*.failed" -exec sh -c 'mv "$1" "${1%.failed}.dodeploy"' _ {} \;
2
TreantBG