ある日のこと JupyterLab を起動しようとして
docker-compose up --build
をすると
failed to solve: error from sender: open /working_directory/.Trash-0: permission denied
が出るようになり,JupyterLabを立ち上げれなくなりました.これは困ったということで解決策を考えます.
いろいろやってみる
まず,原因となっている .Trash-0
についてですが
Jupyter Notebook 上で GUI で削除したファイルは削除されるのではなく、全てこちらの ‘Trash’ に移動されるようです[1] です.そして,権限を調べてみると
drwx------
となっていて,一般ユーザーでは何もできないことが分かります.ですので,rm
しようとしても消えません.
解決策
こうなっている原因は Container 中で JupyterLab を動かし,GUI 上からファイルを削除したからです.ですので,container の中に入ってから .Trash-0
を消してあげる必要があります.
.Trash-0
の原因を考えると,この問題が発生するのは,少くとも一度は container を作成して起動した場合なので,以下 conintaier はあるものとして考えます.
対象の container が起動してるか確認する
なので,まずは
docker ps
をして対象の container が起動しているかを確認します[2].起動している場合は次の「対象の container を起動する」部分は飛ばしてください.
対象の container を起動する
対象の container が起動していないことを確認したので,container を起動して,中に入れるようにします.
docker start <目的のCONTAINER ID>
一応,確認のために docker ps
を打って,ちゃんと起動していることを確認しました.
対象の container の中に入る
対象の container を起動できたので,後は中に入って .Trash-0
を消すだけです.
docker exec -it <CONTINER NAME> bash
で container 内で bash を起動します.この環境では .Trash-0
を rm
で削除することができると思います.
rm -r .Trash-0
確認のために
ls -a
をすると,.Trash-0
が削除されているのが確認できます.これで
docker-compose up --build
をして JupyerLab を立ち上げることができるようになりました.
防止策
.Trash-0
が生成される原因が「GUI 上からファイルを削除したとき」なので,GUI 上からファイルを削除しないようにすることで,防止できると思います(検証してない).