はじめに
この実験(Lab)では、Docker ユーザーがよく遭遇する「docker-compose: command not found」エラーを解決するための実践的なガイドを提供します。Docker Compose は、マルチコンテナ Docker アプリケーションを管理するための不可欠なツールであり、このエラーに遭遇するとワークフローが妨げられる可能性があります。この実験を完了することで、この問題をトラブルシューティングして修正するためのスキルを習得し、コンテナ化されたアプリケーションの効果的な開発とデプロイを継続できるようになります。

この実験(Lab)は学習にインターネット接続を必要とするため、Pro ユーザーのみが VM を開始できます。アカウントを Pro にアップグレードしてください。
Docker Compose の理解とインストール確認
Docker Compose とは?
Docker Compose は、マルチコンテナアプリケーションを定義し、共有するのに役立つツールです。Compose を使用すると、アプリケーションのサービスを構成するための YAML ファイルを作成し、単一のコマンドで全てのサービスを開始できます。連携して動作する複数のコンテナを管理するプロセスを簡素化します。
Docker Compose がインストールされているか確認する
まず、Docker Compose が既にシステムにインストールされているかどうかを確認しましょう。ターミナルを開き、以下を実行します。
docker-compose --version
次のような出力が表示されます。
docker-compose: command not found

ただし、docker-compose: command not found のようなエラーメッセージが表示された場合、Docker Compose がインストールされていないか、システムの PATH に正しく設定されていないことを意味します。
Docker のインストール確認
Docker Compose をインストールする前に、Docker 自体が正しくインストールされていることを確認しましょう。以下を実行します。
docker --version
次のような出力が表示されるはずです。
Docker version 20.10.21, build 20.10.21-0ubuntu1~22.04.3
この出力が表示されない場合、Docker が正しくインストールされていない可能性があります。ただし、この実験(Lab)では、Docker Compose の問題の解決に焦点を当てます。
Docker Compose のインストール
Docker Compose がインストールされていないか、アクセスできないことを確認したので、インストールしましょう。Docker Compose をインストールする方法はいくつかありますが、Ubuntu システムで最も簡単な方法に焦点を当てます。
方法 1: apt パッケージマネージャーを使用する
Docker Compose をインストールする最も簡単な方法は、apt パッケージマネージャーを使用することです。それでは、やってみましょう。
- まず、リポジトリを設定し、依存関係をインストールします。
## 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
更新プロセスを示す出力が表示されるはずです。
- 次に、Docker Compose をインストールします。
sudo apt install -y docker-compose-plugin
インストール進行状況を示す出力が表示されます。
- インストールが完了したら、バージョンを確認して動作を確認します。
docker compose version
注:新しい Docker インストールでは、コマンドは docker compose (スペースあり) であり、docker-compose (ハイフンあり) ではありません。
次のような出力が表示されるはずです。
Docker Compose version v2.33.1
方法 2: curl を使用して特定のバージョンをインストールする
apt メソッドを使用して既に Docker Compose をインストールしている場合は、この方法はスキップできます。
apt メソッドが機能しない場合や、特定のバージョンが必要な場合は、Docker Compose を直接インストールできます。
- Docker CLI プラグイン用のディレクトリがまだ存在しない場合は、作成します。
mkdir -p ~/.docker/cli-plugins/
- 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
ファイルのダウンロード中にプログレスバーが表示されます。
- バイナリを実行可能にします。
chmod +x ~/.docker/cli-plugins/docker-compose
- インストールを確認します。
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 Web サーバーを実行する簡単な 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 の Web ルートにマッピングするボリューム
Ctrl+O を押して Enter を押してファイルを保存し、Ctrl+X を押して nano を終了します。
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 を押してファイルを保存し、Ctrl+X を押して nano を終了します。
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 がコンテナを正常に作成し、起動したことを示しています。
Web サーバーの検証
Web サーバーが正しく実行されていることを確認しましょう。
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 アプリケーションの管理
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 Web サーバーコンテナが実行されており、ポートマッピングがアクティブであることを示しています。
コンテナログの表示
コンテナからのログを表示するには、次を実行します。
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 アプリケーションが完了したら、単一のコマンドで、すべてのコンテナ、ネットワーク、およびボリュームを停止して削除できます。
docker compose down
次のような出力が表示されるはずです。
✔ Container docker-compose-test-web-1 Removed
✔ Network docker-compose-test_default Removed
これは、コンテナが停止して削除され、それらのために作成されたネットワークも削除されたことを示しています。
よくある Docker Compose の問題のトラブルシューティング
このステップはオプションです。Docker Compose の問題のトラブルシューティングを練習したくない場合は、スキップできます。
「docker-compose: command not found」エラーを解決した後でも、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.
これは、同じ名前のコンテナが既に存在する場合に発生します。これに対処する方法を見てみましょう。
- まず、既存のコンテナがないか確認します。
docker ps -a
このコマンドは、停止したコンテナを含むすべてのコンテナを一覧表示します。
- 競合する名前のコンテナが表示された場合は、それを削除できます。
docker rm -f docker-compose-test-web-1
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 を使用していることを意味します。これを解決するには、次の手順に従います。
- ポート 8080 を使用しているものを探します。
sudo lsof -i :8080
- そのサービスを停止するか、
docker-compose.ymlを変更して別のポートを使用します。
nano docker-compose.yml
ポートマッピングを "8080:80" から "8081:80" のように変更し、保存して終了します。
- Docker Compose アプリケーションを再度起動します。
docker compose up -d
ポートの競合を修正する練習をしましょう
意図的にポートの競合を作成し、それを解決してみましょう。
- 同じポートで新しい Docker Compose プロジェクトを作成します。
mkdir -p ~/project/another-test
cd ~/project/another-test
nano docker-compose.yml
- 次の内容を追加します。
version: "3"
services:
web:
image: nginx:latest
ports:
- "8080:80"
保存して終了します。
- 新しいサービスを開始します。
docker compose up -d
- 次に、元のプロジェクトに戻り、それを起動してみます。
cd ~/project/docker-compose-test
docker compose up -d
ポートの競合エラーが表示されるはずです。
- 元の docker-compose.yml を変更して、代わりにポート 8081 を使用します。
nano docker-compose.yml
"8080:80" を "8081:80" に変更し、保存して終了します。
- もう一度起動してみます。
docker compose up -d
これで、両方のサービスが実行され、1 つはポート 8080 で、もう 1 つはポート 8081 で実行されるはずです。
- 両方のプロジェクトを停止して削除して、クリーンアップします。
docker compose down
cd ~/project/another-test
docker compose down
まとめ
「docker-compose: command not found」エラーの解決に関するこの実験を完了したことをおめでとうございます。次のことを正常に実行しました。
- Docker および Docker Compose のインストール状態を確認しました。
- さまざまな方法を使用して Docker Compose をインストールしました。
- 簡単な Docker Compose アプリケーションを作成して実行しました。
- アプリケーションを管理するための重要な Docker Compose コマンドを学習しました。
- よくある Docker Compose の問題とその解決策を探求しました。
これらのスキルは、今後、マルチコンテナ Docker アプリケーションを操作する際に役立ちます。学習したトラブルシューティング技術は、他の多くの Docker 関連の問題にも適用でき、開発ワークフローをよりスムーズかつ効率的にすることができます。



