805 Words

ある日のこと 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-0rm で削除することができると思います.

rm -r .Trash-0

確認のために

ls -a

をすると,.Trash-0 が削除されているのが確認できます.これで

docker-compose up --build

をして JupyerLab を立ち上げることができるようになりました.

防止策

.Trash-0 が生成される原因が「GUI 上からファイルを削除したとき」なので,GUI 上からファイルを削除しないようにすることで,防止できると思います(検証してない).