devcontainer と zellij の相性問題に遭遇しました


なかなかニッチな問題に遭遇したので記録に残しておきます。

自分は WSL 環境で発生しましたが、もしかしたら他の環境でも発生するかもしれません。

現象

それまで普通に使えていた devcontainer の features が使えなくなりました。

試しにこんな感じで features を指定した devcontainer.json を用意して devcontainer build を実行します。

{
  "name": "Ruby",
  "image": "mcr.microsoft.com/devcontainers/ruby:1-3.4-bullseye",
  "features": {
    "ghcr.io/devcontainers/features/github-cli:1": {}
  }
}

するとビルドは失敗してしまいました。エラー出力には下記のように表示されています。

[2025-06-02T22:01:53.628Z] #2 ERROR: error getting credentials - err: exec: "docker-credential-desktop.exe": executable file not found in $PATH, out: `

docker-credential-desktop.exe に PATH が通っていないようなエラーが出てます。しかし確認してみると PATH は通っているようでコマンドとして実行可能な状態です。

原因

いろいろ試行錯誤した結果、どうやら zellij の自動起動と相性が悪かったみたいです。

zellij を自動起動するためにこんな感じの設定を ~/.bashrc に追加していたのですが、なぜかこの設定があると今回の現象が発生しました。

eval "$(zellij setup --generate-auto-start bash)"

ちなみに zellij setup --generate-auto-start bash の実行結果はこんな感じです。

if [[ -z "$ZELLIJ" ]]; then
    if [[ "$ZELLIJ_AUTO_ATTACH" == "true" ]]; then
        zellij attach -c
    else
        zellij
    fi

    if [[ "$ZELLIJ_AUTO_EXIT" == "true" ]]; then
        exit
    fi
fi

単純に zellij が起動されていなければ起動するだけの設定っぽいです。

一応手動で zellij を起動したり attach して devcontainer build を実行してみましたが、その場合は問題なくビルドできました。

対応策

自動起動はやめて wsl zellij と明示的に指定して起動するようにしました。

なお自分は zellij を homebrew でインストールしたのですが、homebrew でインストールしたパッケージは wsl zellij という風に入力しても起動できません。

wsl zellij という風に入力した時は .bashrc などが反映されていない状態なので PATH が通ってなくてコマンドが見つからないからです。

/etc/environment で指定すればいけるかなと思ったのですが、それもだめそうだったのでシンボリックリンクを張って対処しました。

sudo ln -s /home/linuxbrew/.linuxbrew/bin/zellij /usr/local/bin/zellij