🧊

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