解决 'zsh: command not found: docker-compose' 错误 | Docker Compose 故障排除

DockerBeginner
立即练习

介绍

Docker Compose 是一个用于管理多容器 Docker 应用程序的重要工具。本实验将指导你解决许多用户在开始使用 Docker Compose 时遇到的常见 "zsh: command not found: docker-compose" 错误。

通过完成本实验,你将学习如何正确安装 Docker Compose,解决与路径相关的问题,并使用 Docker Compose 运行一个简单的多容器应用程序。这些技能对于使用容器化应用程序的开发人员来说至关重要。

了解 Docker 和 Docker Compose

在开始故障排除之前,让我们了解一下 Docker Compose 是什么,以及它在 Docker 生态系统中的重要性。

什么是 Docker?

Docker 是一个平台,使开发人员能够在容器中构建、打包和运行应用程序。容器是轻量级、隔离的环境,包含运行应用程序所需的一切——代码、运行时、系统工具、库和设置。

什么是 Docker Compose?

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Docker Compose,你使用一个 YAML 文件来配置应用程序的服务、网络和卷。然后,只需一个命令,你就可以从你的配置中创建并启动所有服务。

让我们检查一下 Docker 是否已正确安装在我们的系统上:

docker --version

你应该看到类似这样的输出:

Docker version 20.10.21, build baeda1f

这确认了 Docker 已安装并可以使用。现在,让我们尝试运行 Docker Compose,看看它是否已安装:

docker-compose --version

如果 Docker Compose 未安装,你将看到错误:

zsh: command not found: docker-compose

此错误消息是本实验的重点——我们将在接下来的步骤中对这个问题进行故障排除和修复。

为什么使用 Docker Compose?

Docker Compose 为管理多容器应用程序提供了几个优势:

  1. 简化配置:在单个 YAML 文件中定义你的整个应用程序堆栈
  2. 确保一致性:在多个环境中运行相同的应用程序设置
  3. 管理依赖关系:处理服务启动顺序和容器之间的通信
  4. 提高生产力:使用简单的命令来管理你的整个应用程序生命周期,从而节省时间

在下一步中,我们将安装 Docker Compose 并解决 "command not found" 错误。

安装 Docker Compose

现在我们了解了 Docker Compose 是什么,让我们在系统上安装它以解决 "command not found" 错误。

下载 Docker Compose 二进制文件

第一步是下载 Docker Compose 二进制文件。官方 Docker Compose 二进制文件可在 GitHub 上获得。我们将使用 curl 命令下载它:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

此命令下载与你的操作系统架构匹配的 Docker Compose 二进制文件,并将其保存到 /usr/local/bin/docker-compose。该命令将需要一点时间来执行,因为它会下载文件。

使 Docker Compose 可执行

下载二进制文件后,我们需要使其可执行:

sudo chmod +x /usr/local/bin/docker-compose

此命令授予 Docker Compose 二进制文件执行权限。

验证安装

现在,让我们验证 Docker Compose 是否已正确安装:

docker-compose --version

你应该看到类似这样的输出:

Docker Compose version v2.17.2

如果你仍然看到 "command not found" 错误,这意味着 /usr/local/bin 目录可能不在你系统的 PATH 中。我们将在下一步中解决此问题。

了解 PATH 变量

PATH 变量是 Linux 中的一个环境变量,它告诉 shell 在你运行命令时搜索可执行文件的目录。要查看你当前的 PATH,请运行:

echo $PATH

你应该看到一个由冒号 (:) 分隔的目录列表。如果 /usr/local/bin 不在此列表中,这可以解释为什么 shell 找不到 docker-compose 命令。

在下一步中,我们将对可能阻止我们使用 Docker Compose 的任何剩余问题进行故障排除和解决。

解决 "Command Not Found" 错误

如果你在安装后仍然遇到 "zsh: command not found: docker-compose" 错误,让我们对一些常见原因及其解决方案进行故障排除。

解决方案 1:创建符号链接

一个常见的解决方案是在你的 PATH 中肯定存在的目录(例如 /usr/bin)中创建指向 Docker Compose 二进制文件的符号链接:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

此命令在 /usr/bin 目录中创建一个指向 Docker Compose 二进制文件的符号链接(快捷方式),该目录通常默认包含在系统的 PATH 中。

创建符号链接后,再次尝试运行 Docker Compose:

docker-compose --version

你现在应该看到 Docker Compose 的版本信息,没有任何错误。

解决方案 2:使用 Docker Compose 插件(替代方法)

在较新版本的 Docker 中,Compose 作为插件提供。如果你更喜欢使用此方法,可以尝试:

docker compose version

请注意 dockercompose 之间没有连字符。如果此命令有效,则表示 Docker Compose 作为插件可用,你可以使用此语法。

解决方案 3:将 Docker Compose 添加到你的 PATH

如果你希望将 Docker Compose 保留在当前位置,但符号链接不起作用,你可以手动将该目录添加到你的 PATH 中:

echo 'export PATH=$PATH:/usr/local/bin' >> ~/.zshrc
source ~/.zshrc

这会将 /usr/local/bin 添加到你的 PATH 中,并立即将更改应用于你当前的会话。

验证

无论你使用哪种解决方案,请验证 Docker Compose 现在是否正常工作:

docker-compose --version

你应该看到类似这样的输出:

Docker Compose version v2.17.2

现在我们已经成功安装和配置了 Docker Compose,在下一步中,我们将创建一个简单的 Docker Compose 项目来测试我们的安装。

创建一个简单的 Docker Compose 项目

现在 Docker Compose 已正确安装并运行,让我们创建一个简单的项目来测试我们的设置。我们将创建一个包含 Web 服务器和 Redis 数据库的基本 Web 应用程序。

创建项目目录

首先,让我们为我们的项目创建一个专用目录:

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

创建 Docker Compose 文件

现在,让我们使用 nano 文本编辑器创建一个 docker-compose.yml 文件:

nano docker-compose.yml

将以下内容复制并粘贴到文件中:

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

此 Docker Compose 文件定义了两个服务:

  • web:一个 Nginx Web 服务器,它将从本地目录提供内容
  • redis:一个 Redis 数据库,用于缓存或存储会话数据

Ctrl+O,然后按 Enter 保存文件,然后按 Ctrl+X 退出 nano。

创建 HTML 内容

让我们创建一个简单的 HTML 页面,我们的 Web 服务将提供该页面:

mkdir -p html
nano html/index.html

将以下内容复制并粘贴到文件中:

<!DOCTYPE html>
<html>
  <head>
    <title>Docker Compose Test</title>
  </head>
  <body>
    <h1>Hello from Docker Compose!</h1>
    <p>If you can see this, your Docker Compose setup is working correctly.</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
Pulling web (nginx:alpine)...
Pulling redis (redis:alpine)...
[...]
Creating docker-compose-test_web_1   ... done
Creating docker-compose-test_redis_1 ... done

验证服务是否正在运行

让我们检查我们的服务是否正在正确运行:

docker-compose ps

你应该看到类似这样的输出:

           Name                         Command               State          Ports
------------------------------------------------------------------------------------
docker-compose-test_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp
docker-compose-test_web_1     /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8080->80/tcp

访问 Web 应用程序

现在,你可以通过在 LabEx 界面中打开 Web 浏览器并导航到 http://localhost:8080 来访问 Web 应用程序。你应该看到 "Hello from Docker Compose!" 消息。

或者,你可以使用 curl 从命令行检查 Web 服务器:

curl http://localhost:8080

你应该看到我们之前创建的 HTML 内容。

停止 Docker Compose 项目

当你完成测试后,你可以停止 Docker Compose 项目:

docker-compose down

你应该看到类似这样的输出:

Stopping docker-compose-test_web_1   ... done
Stopping docker-compose-test_redis_1 ... done
Removing docker-compose-test_web_1   ... done
Removing docker-compose-test_redis_1 ... done
Removing network docker-compose-test_default

恭喜你!你已成功安装 Docker Compose,解决了 "command not found" 错误,并通过一个简单的多容器应用程序测试了你的设置。

总结

在这个实验中,你已经学会了:

  1. 了解 Docker Compose 在管理多容器应用程序中的作用
  2. 在你的系统上安装 Docker Compose
  3. 解决 "zsh: command not found: docker-compose" 错误
  4. 使用 Docker Compose 创建并运行一个简单的多容器应用程序

这些技能为使用 Docker 和 Docker Compose 奠定了坚实的基础。你现在可以自信地使用 Docker Compose 来定义、部署和管理复杂的多容器应用程序。

为了进一步学习,请考虑探索更高级的 Docker Compose 功能,例如环境变量、网络、卷和扩展服务。你可能还想了解 Docker Compose 在生产环境中的应用,以及如何将其与 CI/CD 管道集成。