🧊
OpenHands が音沙汰なくなった時にファイルをサルベージする
最近のバージョンでは減りましたが、OpenHandsのセッションで、何もかも動かなくなることがまれにあります。
公式サンプル通りに/workspace
をbind mountしているなら大丈夫でしょうが、私はOpenHandsを複数立ち上げたりする(頑張ればできる)都合上、bind mountしていません。あと、タスクの度にファイルを消すのが面倒というのもある。
動かない様子
何を聞いてもエラーが出てくる
諦められない
まあとりあえずdocker killするか…とおもいますが、
でもでも、途中まででいいから成果物ファイルはほしいですよね。
(繰り返しになるが、bind mountしているならそこにファイルはあるでしょう)
sandbox containerに入る
OpenHandsの「実作業」はSandbox Container(あるいはRuntime)と呼ばれるコンテナで行われています。
RuntimeはOpenHandsコンテナと並列のDooDなので、ホストのDockerから直接参照が可能です。docker ps
をすれば、大抵sandox container(runtime) が動いてることは解りました。こいつが生きていれば、まだデータはとりだせます。
早速rutimeにはいりましょう
ContainerのIDなどをしらべます
で、入ります。
docker exec -it {container-id-or-name} bash
あとは、/workspace
以下にある必要なファイルを特定し、tarやzipかなにかをどっかにつくって…
docker cp {runtime-container-id-or-name}:/path/to/zip .
こうじゃ!
これでとりだせたので、遠慮無くkillしましょう。
docker kill {container-id}
まとめ
- OpenHandsはDinDでなくDooDなので、わりと無理が効く
- (が、その分Dockerをつかった開発ができなくて不便)
- ノウハウは重要ですね、OSSだし。脱出ハッチは多い方が良い。
- OpenHandsの定番の敵はDisk Fullであることをおぼえておきましょう。
- 大抵それが原因でなにもできなくなる、ちょっと多めの64GBとか渡しておけばまず死なない
- ホストで直接OpenHandsを起動してるなら、まず問題にはならないと思う
- 私は OpenHands in Docker in QEMU(Proxmox) なので…
余談
proxmoxなら足せて便利!!! (とはいえ、再起動がいるので…)
あとはrootでログインして、cfdiskとresize2fsでふやせます。(ググってくれ)
Discussion