質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • CentOS

    2839questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Docker

    811questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

docker コンテナ内部のファイルが完全に削除できない

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,204

前提・実現したいこと

docker コンテナ内部でファイルを完全に削除したい。

発生している問題・エラーメッセージ

rm testfile
とすると 問題なくコマンドが正常終了するが
その後以下実行するとtestfileが残っているような表示になる。
ls -l 
??????????  ? ?    ?       ?            ? testfile

ファイル名を指定して実行すると以下になる。
ls -l testfile
ls: cannot access testfile: No such file or directory

試したこと

削除後に
touch testfile
を実行すると正常にコマンドが実行できる。

その後 
mv testfile testfile2
とした後にls を実行すると、

問題で記載している内容の
??????????  ? ?    ?       ?            ? testfile

が表示される。

sh-4.2# LANG=C /bin/ls -l > /tmp/lslog.txt
/bin/ls: cannot access testfile: No such file or directory
sh-4.2# less /tmp/lslog.txt

以下、抜粋
-rw-r--r-- 1 root root      0 Apr 19 11:14 lslog.txt
?????????? ? ?    ?         ?            ? testfile

lsattr testfile を実行すると。
lsattr: No such file or directory while trying to stat testfile
と表示される。

??????の文字化けを解消するため
docker stop コンテナ名
docker rm  コンテナ名
docker run -e LANG=en_US.UTF-8 -it コンテナ名 /bin/bash

を実行して再度ls をするが、文字化け?は変わらず。

補足情報(言語/FW/ツール等のバージョンなど)

OS; CentoS 7.3.1611
Docker: version 17.04.0-ce, build 4845c56
Dockerコンテナ内部のファイルシステム: overlay

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • lazhuward

    2017/04/18 20:00 編集

    とりあえず【LANG=C /bin/ls -l】を叩いてみてもらえませんか?もしかしてリンクじゃないですかね

    キャンセル

  • Hidek_iMiyamoto

    2017/04/19 09:57

    sh-4.2# LANG=C sh-4.2# ls -l ls: cannot access testfile: No such file or directory ??????????  ? ?    ?       ?            ? testfile となりました。 ファイルアクセスできないのに見えているのがよくわからないです…

    キャンセル

  • lazhuward

    2017/04/19 10:28 編集

    本当はコマンド分けずに【LANG=C /bin/ls -l】のまま打ってほしかったんですが。。。まぁ一緒みたいなので。では、ファイルに落とすとどうなりますか?【LANG=C /bin/ls -l > /tmp/lslog.txt】【less /tmp/lslog.txt】上の質問文に追記できますので追記してください。ここ改行できないので。

    キャンセル

  • lazhuward

    2017/04/19 10:39

    あ、わかった。immutableか。回答書いておきます。

    キャンセル

回答 2

+2

lsattr testfile と打ってください。

恐らくこうなると思います。
----i--------e-- testfile

i はIMMUTABLEの意味でrootでも変更できません。

ですので以下のコマンドを実行して変更不可を解除します。
sudo chattr -i testfile

逆に変更不可にしたいときはこのようにします。
sudo chattr +i testfile

こちら参考になるかと。
「lsattr」と「chatter」

 Dockerコンテナのキャラクタ指定

docker run -e LANG=en_US.UTF-8 -it コンテナ名 /bin/bash

en_US.UTF-8 は ja_JP.UTF-8 でも良いです

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/19 11:25

    lsattr testfileを実行したのですが、 lsと同様、No such file or directory while trying to stat testfile でした。

    キャンセル

  • 2017/04/19 11:33 編集

    アクセスすらできないってことですね。では【chattr -ias testfile】→lsしてみてください。

    キャンセル

  • 2017/04/19 12:29

    chattr -ias testfile の時点で ↑↑と同じエラーが表示されます。 ls をしても ???の記述がのこったままです。

    キャンセル

  • 2017/04/19 13:42

    じゃあやっぱり文字化け先に直しましょうか。あと差し支えなければBash使ってみてください。
    コンテナログインするときに【sudo docker exec -it コンテナ名 /bin/bash】→【export LANG=en_US.UTF-8】→lsするとどうなりますか?

    キャンセル

  • 2017/04/19 13:46 編集

    あ、先にrun設定しないと駄目だった。上に追記しました。

    キャンセル

  • 2017/04/19 14:32

    質問側に追記しました。 特にかわらず ????? の表示そのままでした。

    キャンセル

  • 2017/04/19 14:50

    LANGで駄目なんですか。LC_CTYPEとLC_ALLかな。一回【locale】の結果を貼り付けてもらえませんか?
    エラーが出たらエラー内容のまま記述してください。ユーザー名はいってたらマスキングしてください。

    キャンセル

  • 2017/04/19 15:14

    文字化けではなく、(コンテナ内部から見た)ファイルシステムがおかしくなっていて、パーミッションなどの情報が取得できない状況なのではないでしょうか。
    実際にファイルシステムがおかしくなっているのか、そうではなく、ホスト-コンテナ間で何か不整合が起きているのかはわかりません。

    キャンセル

  • 2017/04/19 15:31

    ああそうか。となるとfsckすれば良いのですが、恐らくルートボリュームだと思うしunmountできないから作り直したほうが早いのかもしれないな。

    キャンセル

  • 2017/04/19 16:31

    お二人ともコメントありがとうございます。 作り直しで対応してみます。

    キャンセル

0

こちらの現象が発生するのは、特定のコンテナ用イメージだけでしょうか。あるいは、どのようなイメージを使っても同様の問題がありますでしょうか。

気になる所としましては、Docker側というよりホスト側でトラブルが起こっているかもしれません(ファイルの不整合など)。 dmesg コマンドでファイルシステムの問題が画面に表示されているようでしたら、まずそちらの確認と対応が必要と思います。

他に確認点としましては、 overlayfs ドライバの場合、コンテナ内のファイルの実体は、ホスト側では /var/lib/docker/overlay/ ディレクトリ以下に保管されています。

そのため、find /var/lib/docker/overlay/ -name testfile などでホスト上の実体の確認も、解決につながるかもしれませんね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • CentOS

    2839questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Docker

    811questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです