Macでlima上のDockerにEmacsでdocker-trampする方法


はじめに

この環境って結構レアケースだと思うので、とても情報が少なく、やっと接続できるようになったのでメモしておきます。
まず、Docker Desktopが有償になってしまい、その代替えとしてMacではlima VMを使って、その上でDocker Engine Serverを動かして使用するという方法を見つけたので試してみました。
https://qiita.com/yoichiwo7/items/44aff38674134ad87da3
たぶん大抵の人はこれで解決するのでしょう。

ただ、私の場合はEmacsを使っており、dockerコンテナ上のファイルにアクセスするのにdocker-trampを使っています。
急にdocker-trampが使えなくなった時の使い勝手の悪さときたら。。。

ということで試行錯誤して、やっと使えるようになりました。
こんな方法があったとは知らなかったです。

ssh接続できるようにする

まず先ほどのページの設定 Docker Desktop for Macの実用的な代替手段: lima + Dockerを実施した後に、次のように lima.yaml を設定変更します。

~/.lima/default/lima.yaml
ssh:
  localPort: 0
  loadDotSSHPubKeys: true

localPortを0にしておくと自動でポートを設定してくれて、デフォルトだと60022でssh接続できるようになります。

いったんstop→startします。

limactl stop
limactl start

この後、一度sshで接続しておきます。

ssh -p 60022 127.0.0.1

docker-trampで接続する

dockerコンテナが起動していないと思いますので起動しておきます。

docker start test-container

この状態で、Emacsからdocker-trampで接続します。

C-x C-f /ssh:127.0.0.1#60022|docker:test-container:/root

/rootディレクトリに接続する例です。
Multi-hopという機能を利用して接続できるようです。
これリモートのコンテナでも使えるので便利ですね。