WWF世界自然基金会 2026-03-01 00:55 采纳率: 98.7%
浏览 0
已采纳

Oracle Linux 9 中 Docker Compose 下载安装失败的常见原因有哪些?

在 Oracle Linux 9 中安装 Docker Compose 常见失败原因包括:1)**系统默认禁用 EPEL 仓库**,而 `docker-compose`(旧版)已从 OL9 BaseOS/AppStream 移除,需手动启用 `ol9_developer_EPEL` 仓库;2)**混淆 `docker-compose`(Python 版,已弃用)与 `docker compose`(Go 插件,推荐)**,直接 `dnf install docker-compose` 会失败或安装过时包;3)**SELinux 或防火墙限制 HTTPS 下载**,导致 `curl` 获取二进制失败;4)**缺少依赖**如 `ca-certificates` 或 `gnupg2`,影响签名验证与 GitHub 下载;5)**用户权限不足或 `/usr/local/bin` 不在 PATH**,导致安装后命令不可用。建议优先使用 `dnf install docker-ce-plugin-compose`(官方 Go 插件),或通过 `curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose` 手动安装并校验 SHA256。
  • 写回答

1条回答 默认 最新

  • 狐狸晨曦 2026-03-01 00:56
    关注
    ```html

    一、现象层:典型安装失败报错与表征

    • dnf install docker-compose 返回“Error: Unable to find a match”——本质是 OL9 BaseOS/AppStream 中已彻底移除 Python 版 docker-compose 包;
    • 执行 curl -L https://github.com/.../docker-compose-Linux-x86_64 时卡在 TLS 握手或返回 curl: (35) SSL connect error
    • 手动下载后 chmod +x /usr/local/bin/docker-compose,但运行 docker-compose --version 提示 command not found
    • dnf install docker-ce-plugin-compose 失败并提示 “No match for argument”,说明 ol9_developer_EPELol9_appstream 仓库未启用;
    • 即使二进制可执行,运行 docker compose up 却报 ERROR: failed to solve: rpc error: code = Unknown desc = failed to do request: Head "https://...": x509: certificate signed by unknown authority——指向 ca-certificates 缺失或被 SELinux 拦截。

    二、机制层:五大失败根源的深度归因

    Oracle Linux 9(基于 RHEL 9)采用模块化仓库策略与严格安全基线,默认禁用开发者生态仓库,并将容器工具链重构为插件化架构。下表对比了旧/新 Compose 的技术分野:

    维度docker-compose(Python,v1.x)docker compose(Go plugin,v2.20+)
    包来源已从 OL9 BaseOS/AppStream 移除,仅存于 EPEL官方 docker-ce-plugin-compose RPM,依赖 docker-ce-cli
    执行模型独立二进制,PATH 查找Docker CLI 插件机制(~/.docker/cli-plugins//usr/libexec/docker/cli-plugins/
    SELinux 上下文默认无专用策略,易被 container_runtime_t 限制网络随 Docker CE RPM 自动部署 docker_plugin_exec_t 类型

    三、验证层:系统就绪性诊断清单

    1. 检查仓库状态:dnf repolist --enabled | grep -E "(epel|developer|appstream)"
    2. 验证证书信任链:update-ca-trust extract && openssl s_client -connect github.com:443 -servername github.com 2>/dev/null | head -20
    3. 确认 SELinux 网络放行:ausearch -m avc -ts recent | grep docker | grep connect
    4. 检测 PATH 完整性:echo $PATH | tr ':' '\n' | grep -E "(local/bin|docker)"
    5. 校验 GPG 工具可用性:gpg2 --version && rpm -q gnupg2 ca-certificates

    四、实施层:双路径权威安装方案

    推荐优先级:✅ 官方插件方式(生产首选) → ✅ 手动签名验证方式(离线/审计场景) → ⚠️ 禁用 EPEL 安装旧版(仅兼容遗留脚本)

    # 【路径一】官方插件安装(需启用 ol9_developer_EPEL)
    sudo dnf install -y oraclelinux-developer-release-el9
    sudo dnf config-manager --enable ol9_developer_EPEL
    sudo dnf install -y docker-ce-cli docker-ce-plugin-compose
    
    # 【路径二】手动安装(含 SHA256 校验)
    COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep '"tag_name"' | cut -d\" -f4)
    curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \
      -o /usr/local/bin/docker-compose
    curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m).sha256" \
      -o /usr/local/bin/docker-compose.sha256
    sha256sum -c /usr/local/bin/docker-compose.sha256
    chmod +x /usr/local/bin/docker-compose
    

    五、加固层:SELinux 与防火墙协同配置

    若仍遇 HTTPS 下载失败或插件调用阻塞,执行以下最小权限修复:

    graph LR A[SELinux 检测] --> B{是否拒绝 docker_plugin_t?} B -->|Yes| C[setsebool -P container_manage_cgroup on] B -->|No| D[检查 firewall-cmd --list-ports] C --> E[restorecon -Rv /usr/libexec/docker/cli-plugins/] D -->|443 missing| F[firewall-cmd --add-port=443/tcp --permanent && firewall-cmd --reload]

    六、验证层:端到端功能确认脚本

    运行以下复合验证命令,覆盖 CLI、插件、网络、权限四维度:

    #!/bin/bash
    echo "=== Docker Compose 安装验证 ==="
    docker --version
    docker compose version 2>/dev/null || echo "⚠️  docker compose 命令不可用"
    docker-compose --version 2>/dev/null || echo "⚠️  docker-compose 命令不可用"
    curl -I https://hub.docker.com 2>/dev/null | head -1 | grep "200 OK" || echo "❌ HTTPS 连通性异常"
    test -x /usr/local/bin/docker-compose && echo "✅ 手动二进制存在且可执行" || echo "❌ /usr/local/bin/docker-compose 权限异常"
    getenforce | grep -q "Enforcing" && echo "✅ SELinux 启用中" || echo "⚠️ SELinux 未启用(非推荐生产配置)"
    
    ```
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 3月2日
  • 创建了问题 3月1日