「docker-compose: コマンドが見つかりません」エラーの解決

DockerDockerBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Dockerユーザーが頻繁に遭遇する「docker-compose: コマンドが見つかりません」エラーの解決策に関する実践的なガイドを提供します。Docker Composeは、マルチコンテナDockerアプリケーションを管理するための必須ツールであり、このエラーに遭遇すると作業フローが妨げられる場合があります。この実験を完了することで、この問題をトラブルシューティングして修正するスキルを身につけることができ、コンテナ化されたアプリケーションの開発と展開を効果的に続けることができます。

docker compose command not found

この実験では学習のためにインターネット接続が必要ですので、ProユーザーのみがVMを起動できます。アカウントをProにアップグレード


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") subgraph Lab Skills docker/run -.-> lab-390530{{"「docker-compose: コマンドが見つかりません」エラーの解決"}} docker/ps -.-> lab-390530{{"「docker-compose: コマンドが見つかりません」エラーの解決"}} docker/start -.-> lab-390530{{"「docker-compose: コマンドが見つかりません」エラーの解決"}} docker/stop -.-> lab-390530{{"「docker-compose: コマンドが見つかりません」エラーの解決"}} docker/rm -.-> lab-390530{{"「docker-compose: コマンドが見つかりません」エラーの解決"}} docker/logs -.-> lab-390530{{"「docker-compose: コマンドが見つかりません」エラーの解決"}} docker/create -.-> lab-390530{{"「docker-compose: コマンドが見つかりません」エラーの解決"}} docker/version -.-> lab-390530{{"「docker-compose: コマンドが見つかりません」エラーの解決"}} end

Docker Compose の理解とインストールの確認

Docker Compose とは?

Docker Compose は、マルチコンテナアプリケーションを定義して共有するためのツールです。Compose を使うと、YAML ファイルを作成してアプリケーションのサービスを構成し、1 つのコマンドですべてのサービスを起動できます。まともに機能する複数のコンテナを管理するプロセスを簡素化します。

Docker Compose がインストールされているかどうかを確認する

まず、システムに Docker Compose が既にインストールされているかどうかを確認しましょう。ターミナルを開いて以下を実行します。

docker-compose --version

以下のような出力が表示されます。

docker-compose: コマンドが見つかりません
コマンドが見つかりません

ただし、docker-compose: コマンドが見つかりません のようなエラーメッセージが表示された場合、Docker Compose がインストールされていないか、システムの PATH に正しく設定されていないことを意味します。

Docker のインストールを確認する

Docker Compose をインストールする前に、Docker 自体が正しくインストールされていることを確認しましょう。以下を実行します。

docker --version

以下のような出力が表示されるはずです。

Docker version 20.10.21, build 20.10.21-0ubuntu1~22.04.3

この出力が表示されない場合、Docker が正しくインストールされていない可能性があります。ただし、この実験では、Docker Compose の問題の解決に焦点を当てます。

Docker Compose のインストール

Docker Compose がインストールされていないか、アクセスできないことを確認したので、インストールしましょう。Docker Compose をインストールする方法はいくつかありますが、Ubuntu システムに対して最も簡単な方法に焦点を当てます。

方法 1: apt パッケージマネージャを使用する

Docker Compose をインストールする最も簡単な方法は、apt パッケージマネージャを通じるものです。以下のようにしましょう。

  1. まず、リポジトリを設定して依存関係をインストールします。
## Docker の公式 GPG キーを追加します。
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

## Apt ソースにリポジトリを追加します。
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo \"${UBUNTU_CODENAME:-$VERSION_CODENAME}\") stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

更新プロセスが表示されるはずです。

  1. 次に、Docker Compose をインストールします。
sudo apt install -y docker-compose-plugin

インストールの進捗状況が表示されます。

  1. インストールが完了したら、バージョンを確認して正常に動作することを確認します。
docker compose version

注: 新しい Docker インストールでは、コマンドは docker compose (スペース区切り) で、docker-compose (ハイフン区切り) ではありません。

以下のような出力が表示されるはずです。

Docker Compose version v2.33.1

方法 2: curl を使って特定のバージョンをインストールする

apt メソッドを使って既に Docker Compose をインストールしている場合は、この方法を飛ばしても構いません。

apt メソッドが機能しない場合や特定のバージョンが必要な場合は、直接 Docker Compose をインストールできます。

  1. Docker CLI プラグイン用のディレクトリが存在しない場合は作成します。
mkdir -p ~/.docker/cli-plugins/
  1. Docker Compose のバイナリをダウンロードします。
curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose

ファイルのダウンロード時にプログレスバーが表示されます。

  1. バイナリを実行可能にします。
chmod +x ~/.docker/cli-plugins/docker-compose
  1. インストールを確認します。
docker compose version

Docker Compose のバージョンが表示されるはずです。

シンプルな Docker Compose プロジェクトの作成

Docker Compose を正常にインストールしたので、すべてが正しく動作していることを確認するために、シンプルな Docker Compose プロジェクトを作成しましょう。

プロジェクトディレクトリの作成

まず、Docker Compose プロジェクト用のディレクトリを作成しましょう。

mkdir -p ~/project/docker-compose-test
cd ~/project/docker-compose-test

Docker Compose ファイルの作成

次に、基本的な Nginx ウェブサーバーを実行するシンプルな Docker Compose ファイルを作成します。nano テキストエディタを使って docker-compose.yml という名前のファイルを作成します。

nano docker-compose.yml

エディタに以下の内容を追加します。

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes: -./html:/usr/share/nginx/html

この設定では、以下が定義されています。

  • 最新の Nginx イメージを使用した "web" という名前のサービス
  • コンテナのポート 80 をホストのポート 8080 にマッピングするポートマッピング
  • ローカルディレクトリを Nginx のウェブルートにマッピングするボリューム

ファイルを保存するには Ctrl+O を押してから Enter を押し、nano を終了するには Ctrl+X を押します。

HTML コンテンツの作成

html ディレクトリとシンプルな index.html ファイルを作成しましょう。

mkdir -p html
nano html/index.html

エディタに以下の HTML コンテンツを追加します。

<!DOCTYPE html>
<html>
  <head>
    <title>Docker Compose Test</title>
  </head>
  <body>
    <h1>Docker Compose is working!</h1>
    <p>
      If you can see this page, you have successfully resolved the
      docker-compose issue.
    </p>
  </body>
</html>

ファイルを保存するには Ctrl+O を押してから Enter を押し、nano を終了するには Ctrl+X を押します。

Docker Compose プロジェクトの実行

次に、Docker Compose プロジェクトを実行しましょう。

docker compose up -d

-d フラグは、コンテナをデタッチドモード(バックグラウンドで)で実行します。

以下のような出力が表示されるはずです。

Creating network "docker-compose-test_default" with the default driver
Creating docker-compose-test_web_1... done

これは、Docker Compose が正常にコンテナを作成して起動したことを示しています。

ウェブサーバーの検証

ウェブサーバーが正常に動作していることを検証しましょう。

curl http://localhost:8080

先ほど作成した HTML コンテンツが表示されるはずです。

<!DOCTYPE html>
<html>
  <head>
    <title>Docker Compose Test</title>
  </head>
  <body>
    <h1>Docker Compose is working!</h1>
    <p>
      If you can see this page, you have successfully resolved the
      docker-compose issue.
    </p>
  </body>
</html>

これで、Docker Compose が正常に動作していることが確認されます。

docker compose is working

Docker Compose アプリケーションの管理

Docker Compose アプリケーションを正常にセットアップして実行したので、さまざまな Docker Compose コマンドを使ってそれを管理する方法を学びましょう。

実行中のコンテナを確認する

Docker Compose コンテナの状態を確認するには、以下を実行します。

cd ~/project/docker-compose-test
docker compose ps

以下のような出力が表示されるはずです。

NAME                        COMMAND                  SERVICE             STATUS              PORTS
docker-compose-test-web-1   "/docker-entrypoint.…"   web                 running             0.0.0.0:8080->80/tcp

これは、Nginx ウェブサーバーコンテナが実行中で、ポートマッピングが有効であることを示しています。

コンテナのログを表示する

コンテナのログを表示するには、以下を実行します。

docker compose logs

これにより、Docker Compose アプリケーション内のすべてのコンテナの結合ログが表示されます。Nginx の起動メッセージを含む出力が表示されるはずです。

特定のサービスのログを表示するには、その名前を指定します。

docker compose logs web

アプリケーションを停止する

コンテナを削除せずに Docker Compose アプリケーションを停止するには、以下を実行します。

docker compose stop

コンテナが停止されていることを示す出力が表示されるはずです。

✔ Container docker-compose-test-web-1  Stopped

コンテナが停止していることを確認するには、その状態を確認します。

docker compose ps

コンテナがもはや実行されていないことがわかります。

アプリケーションを再度起動する

停止したコンテナを再度起動するには、以下を実行します。

docker compose start

コンテナが起動されていることを示す出力が表示されるはずです。

✔ Container docker-compose-test-web-1  Started

再度実行されていることを確認します。

docker compose ps

アプリケーションを停止して削除する

Docker Compose アプリケーションの使用が終了したら、1 つのコマンドですべてのコンテナ、ネットワーク、ボリュームを停止して削除できます。

docker compose down

以下のような出力が表示されるはずです。

✔ Container docker-compose-test-web-1  Removed
✔ Network docker-compose-test_default  Removed

これは、コンテナが停止されて削除され、それらに対して作成されたネットワークも削除されたことを示しています。

一般的な Docker Compose の問題のトラブルシューティング

このステップはオプションです。Docker Compose の問題のトラブルシューティングを練習したくない場合は、このステップを飛ばしても構いません。

「docker-compose: コマンドが見つかりません」のエラーを解決した後でも、Docker Compose で他の一般的な問題に遭遇することがあります。これらの問題とその解決策を見ていきましょう。

問題 1: 既存のコンテナとの競合

時々、以下のようなエラーに遭遇することがあります。

ERROR: for web  Cannot create container for service web: Conflict. The container name "/docker-compose-test-web-1" is already in use by container.

これは、同じ名前のコンテナが既に存在する場合に発生します。対処法を見ていきましょう。

  1. まず、既存のコンテナを確認します。
docker ps -a

このコマンドは、停止しているコンテナを含むすべてのコンテナを一覧表示します。

  1. 競合する名前のコンテナが見つかった場合、削除できます。
docker rm -f docker-compose-test-web-1

出力から実際のコンテナ名に置き換えてください。

問題 2: 権限拒否エラー

Docker Compose を使用しているときに、時々権限エラーが表示されることがあります。これらは、通常、Docker コマンドには root 権限が必要であるために発生します。以下のようなエラーが表示された場合:

ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?

Docker Compose コマンドに sudo を付けるか、ユーザーが Docker グループに所属していることを確認する必要があります。ユーザーを Docker グループに追加するには:

sudo usermod -aG docker $USER

注: これにはログアウトして再度ログインする必要があります。この実験では、必要に応じてコマンドに sudo を使用できます。

問題 3: ポート競合

以下のようなエラーが表示された場合:

ERROR: for web  Cannot start service web: driver failed programming external connectivity on endpoint: Bind for 0.0.0.0:8080 failed: port is already allocated

これは、別のサービスが既にポート 8080 を使用していることを意味します。解決策は以下の通りです。

  1. ポート 8080 を使用しているものを見つけます。
sudo lsof -i :8080
  1. そのサービスを停止するか、docker-compose.yml を変更して別のポートを使用するようにします。
nano docker-compose.yml

ポートマッピングを "8080:80" から "8081:80" のように変更し、保存して終了します。

  1. Docker Compose アプリケーションを再度起動します。
docker compose up -d

ポート競合の解決を練習しましょう

意図的にポート競合を作成して解決しましょう。

  1. 同じポートを使用する新しい Docker Compose プロジェクトを作成します。
mkdir -p ~/project/another-test
cd ~/project/another-test
nano docker-compose.yml
  1. 以下の内容を追加します。
version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

保存して終了します。

  1. 新しいサービスを起動します。
docker compose up -d
  1. 次に、元のプロジェクトに戻り、起動しようとします。
cd ~/project/docker-compose-test
docker compose up -d

ポート競合のエラーが表示されるはずです。

  1. 元の docker-compose.yml を変更して、代わりにポート 8081 を使用するようにします。
nano docker-compose.yml

"8080:80""8081:80" に変更し、保存して終了します。

  1. 再度起動してみましょう。
docker compose up -d

これで、両方のサービスが起動しており、1 つはポート 8080 で、もう 1 つはポート 8081 で動作しているはずです。

  1. 両方のプロジェクトを停止して削除してクリーンアップします。
docker compose down
cd ~/project/another-test
docker compose down

まとめ

「docker-compose: コマンドが見つかりません」のエラーを解決するこの実験を完了しました。おめでとうございます。あなたは正常に:

  1. Docker と Docker Compose のインストール状況を確認しました。
  2. さまざまな方法を使って Docker Compose をインストールしました。
  3. シンプルな Docker Compose アプリケーションを作成して実行しました。
  4. アプリケーションを管理するための重要な Docker Compose コマンドを学びました。
  5. 一般的な Docker Compose の問題とその解決策を調べました。

これらのスキルは、将来、マルチコンテナ Docker アプリケーションを扱う際に役立ちます。学んだトラブルシューティング技術は、他の多くの Docker 関連の問題にも適用でき、開発のワークフローをスムーズで効率的にすることができます。