できない.dev

docker-compose コマンドが見つからない(command not found)

Compose V1 が廃止され V2 で docker compose(ハイフン無し)に統合されたためです。
docker compose version で動作を確認し、古いスクリプトはサブコマンド形式へ移行します。

#docker-compose#compose#command-not-found#cli#migration

要約

docker-compose: command not found の主因は、ハイフン付きの Compose V1 が 2023 年に End of Life となり、現在の Docker では docker compose(スペース区切りのサブコマンド)に統合されたことです。
まず docker compose version を実行し、こちらが動くなら呼び出し側を新形式へ書き換えれば解決します。

よくある原因

  1. V2 のみインストールされている: Docker Desktop や新しい docker-ce には Compose V2 がプラグインとして同梱されるが、docker-compose 単体バイナリは入らない。
  2. compose プラグイン未導入: Linux に Engine だけ入れた場合、docker-compose-plugin を別途インストールしないと両形式とも使えない。
  3. PATH の問題: プラグインは /usr/libexec/docker/cli-plugins 等に置かれ、ここが壊れているとサブコマンドも認識されない。
  4. 古いスクリプト: 既存の Makefile・CI が docker-compose up をハードコードしている。

解決策

1. V2 形式に置き換える

最も確実なのはコマンド呼び出しを新形式へ変えることです。

# 旧
docker-compose up -d
# 新(推奨)
docker compose up -d

docker compose versionDocker Compose version v2.x を返せば V2 は有効です。
詳細は公式の移行ガイドを参照してください。

2. Linux で compose プラグインを入れる

Engine のみの環境では plugin パッケージを追加します。

sudo apt-get update
sudo apt-get install docker-compose-plugin
docker compose version

3. 互換エイリアスを張る

スクリプトを今すぐ変更できない場合は一時的にエイリアスで橋渡しします。

echo 'alias docker-compose="docker compose"' >> ~/.bashrc
source ~/.bashrc

ただし CI では shell の alias が効かないため、最終的にはコマンド本体を docker compose へ書き換えるのが正攻法です。

この記事は役立ちましたか?