简介
本实验提供了一份实用指南,用于解决“docker-compose: 命令未找到”错误,这是 Docker 用户经常遇到的一个常见问题。Docker Compose 是管理多容器 Docker 应用程序的重要工具,遇到此错误可能会阻碍你的工作流程。通过完成本实验,你将获得排查和修复此问题的技能,从而能够继续有效地开发和部署你的容器化应用程序。

本实验需要联网进行学习,因此只有专业版用户可以启动虚拟机。将你的账户升级到专业版。
了解 Docker Compose 并验证安装
什么是 Docker Compose?
Docker Compose 是一个帮助你定义和共享多容器应用程序的工具。使用 Compose,你可以创建一个 YAML 文件来配置应用程序的服务,然后通过一个命令启动所有服务。它简化了管理协同工作的多个容器的过程。
检查 Docker Compose 是否已安装
让我们首先检查 Docker Compose 是否已经安装在你的系统上。打开一个终端并运行:
docker-compose --version
你将会看到类似这样的输出:
docker-compose: 命令未找到

然而,如果你收到像 docker-compose: 命令未找到 这样的错误消息,这意味着 Docker Compose 没有安装,或者没有在你系统的路径中正确配置。
验证 Docker 安装
在我们安装 Docker Compose 之前,让我们验证 Docker 本身是否已正确安装。运行:
docker --version
你应该会看到类似这样的输出:
Docker 版本 20.10.21,构建版本 20.10.21-0ubuntu1~22.04.3
如果你没有看到这个输出,Docker 可能没有正确安装。不过,对于本实验,我们将专注于解决 Docker Compose 的问题。
安装 Docker Compose
由于我们确认 Docker Compose 未安装或无法访问,让我们来安装它。安装 Docker Compose 有几种不同的方法,但我们将重点介绍适用于 Ubuntu 系统的最直接的方法。
方法一:使用 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 版本 v2.33.1
方法二:使用 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 文件
现在,创建一个简单的 Docker Compose 文件来运行一个基本的 Nginx 网络服务器。使用 nano 文本编辑器创建一个名为 docker-compose.yml 的文件:
nano docker-compose.yml
在编辑器中,添加以下内容:
version: "3"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes: -./html:/usr/share/nginx/html
此配置定义了:
- 一个名为“web”的服务,使用最新的 Nginx 镜像
- 端口映射,将容器的端口 80 映射到主机的端口 8080
- 一个卷,将本地目录映射到 Nginx 网络根目录
按下 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 正在运行!</h1>
<p>如果你能看到此页面,则说明你已成功解决了 docker-compose 问题。</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 已成功创建并启动了你的容器。
验证网络服务器
验证我们的网络服务器是否正常运行:
curl http://localhost:8080
你应该会看到你之前创建的 HTML 内容:
<!DOCTYPE html>
<html>
<head>
<title>Docker Compose Test</title>
</head>
<body>
<h1>Docker Compose 正在运行!</h1>
<p>如果你能看到此页面,则说明你已成功解决了 docker-compose 问题。</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 网络服务器容器正在运行,并且端口映射处于活动状态。
查看容器日志
要查看容器的日志,运行:
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: 命令未找到”错误,你在使用 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
现在两个服务都应该在运行,一个在端口 8080,另一个在端口 8081。
- 通过停止并移除两个项目来清理:
docker compose down
cd ~/project/another-test
docker compose down
总结
恭喜你完成了这个关于解决“docker-compose: 命令未找到”错误的实验。你已经成功地:
- 验证了 Docker 和 Docker Compose 的安装状态
- 使用不同方法安装了 Docker Compose
- 创建并运行了一个简单的 Docker Compose 应用程序
- 学习了用于管理应用程序的基本 Docker Compose 命令
- 探讨了常见的 Docker Compose 问题及其解决方案
在你未来处理多容器 Docker 应用程序时,这些技能将非常有用。你所学的故障排除技术可以应用于许多其他与 Docker 相关的问题,使你的开发工作流程更加顺畅和高效。



