跳转到内容
无痕工具库 无痕工具库

Hostinger VPS Docker 应用目录部署错误解决教程

要解决 Hostinger VPS Docker App Catalog(Docker 应用目录) 部署错误,需要删除已保存的镜像仓库凭证;如果是网络地址池错误,则需根据情况清理孤立的 Docker 网络,或扩大服务器的网络地址池。删除已保存的 GitHub Container Registry 凭证可以解决镜像仓库访问错误。根据具体原因,清理未使用的 Docker 网络或扩大默认地址池可以解决子网地址池耗尽的问题。

开始之前

本指南适用于 Hostinger Docker 应用目录部署失败 于 VPS 主机方案的情况。如果你部署的是自定义 Docker Compose 文件,或从外部 URL 拉取了镜像,则本文所述的原因和步骤不适用。

修复镜像仓库访问被拒绝错误

当已保存的 Docker 凭证干扰了从 GitHub Container Registry 拉取公共镜像时,就会出现镜像仓库访问被拒绝错误。

错误日志信息

部署日志会显示以下错误信息之一:

  • Image ghcr.io/hostinger/hvps-<app>:latest Error error from registry: denied
  • Error response from daemon: error from registry: denied

错误原因

Hostinger Docker 应用目录中的应用 从无需身份验证凭证的公共仓库拉取镜像。如果服务器上的 Docker Manager 中存在 GitHub Container Registry 凭证,Docker 会将该凭证附加到每一次来自 ghcr.io 的拉取请求中。如果已保存的凭证已过期、被吊销、缺少所需权限范围,或者未获得组织单点登录(Single Sign-On)授权,公共镜像拉取就会失败。

查看已保存的凭证

  1. 在 Hostinger 控制面板中进入 VPS,并选择你的服务器。
  2. 打开 Docker Manager → Credentials(凭证)。
  3. 在 Docker credentials(Docker 凭证) 部分检查是否存在 GitHub Container Registry 条目。

解决镜像仓库错误

如果你不需要该 GitHub Container Registry 凭证来拉取私有镜像:

  1. 打开 Docker Manager → Credentials(凭证)。
  2. 点击 GitHub Container Registry 凭证旁边的垃圾桶图标将其删除。
  3. 在 Hostinger 控制面板中重试 Docker 应用目录应用部署。

如果你需要该 GitHub Container Registry 凭证来拉取私有镜像:

  1. 确认你的个人访问令牌(personal access token)尚未过期。
  2. 确认该令牌包含 read:packages 权限范围。
  3. 如果镜像属于某个组织,请确保该令牌已获得组织**单点登录(Single Sign-On)**授权。
  4. 在 Docker Manager 中使用有效的令牌更新该凭证。
  5. 在 Hostinger 控制面板中重试 Docker 应用目录应用部署。

修复 Docker 网络地址池耗尽错误

当服务器没有剩余子网可分配给新部署时,就会出现 Docker 网络地址池耗尽错误。这种情况有两种可能的原因,需要采用不同的修复方法。

错误日志信息

部署日志会显示以下错误信息:

  • failed to create network <app-name>-xxxx_default: Error response from daemon: all predefined address pools have been fully subnetted

错误原因

默认情况下,Docker 从一个有限的地址池中分配地址,总共支持大约 31 个网络。服务器上的每一个 Docker 网络(无论是否与 Docker 应用目录相关)都会占用其中一个名额。一旦达到上限,就无法创建新网络,因此也无法进行新部署。

服务器达到此限制有两种不同的原因:

  • 反复部署尝试产生的孤立网络。 反复部署尝试或删除应用后未清理网络,可能会在服务器上留下仍在运行的未使用网络,逐渐耗尽可用的地址池。
  • 多个项目对 Docker 的正常使用。 运行大量 Docker 项目的服务器,包括 Docker 应用目录之外的自定义或自托管项目,也可能在正常使用中达到同样的 31 个网络上限。这种情况下没有可删除的未使用网络,服务器需要的是更大的地址池,而不是清理。

确定原因

  1. 通过 SSH 连接到你的 VPS。
  2. 运行 docker network ls | wc -l,统计服务器上所有处于活动状态的 Docker 网络数量。
  3. 运行 docker network prune,然后再次运行 docker network ls | wc -l。

如果运行 docker network prune 后网络数量减少了,说明服务器上存在孤立网络。请继续执行下文的解决孤立网络问题。

如果网络数量没有变化,说明这些网络正在被现有项目使用。请继续执行下文的解决多项目使用导致的地址池耗尽问题。

解决孤立网络问题

  1. 通过 SSH 连接到你的 Hostinger VPS。
  2. 执行 docker network prune 命令,删除服务器上所有未使用的网络。
  3. 在 Hostinger 控制面板中重试 Docker 应用目录应用部署。

解决多项目使用导致的地址池耗尽问题

如果服务器正在运行大量正常的 Docker 项目,且没有可删除的孤立网络,请改为扩大 Docker 守护进程的默认地址池:

  1. 通过 SSH 连接到你的 Hostinger VPS。

  2. 打开 Docker 守护进程配置文件:sudo nano /etc/docker/daemon.json

  3. 添加以下配置,并与文件中的现有设置合并:

    {
    "default-address-pools": [
    { "base": "172.17.0.0/12", "size": 24 },
    { "base": "192.168.0.0/16", "size": 24 }
    ]
    }
  4. 验证文件格式是否正确:sudo python3 -m json.tool /etc/docker/daemon.json

  5. 重启 Docker 守护进程:sudo systemctl restart docker

  6. 在 Hostinger 控制面板中重试 Docker 应用目录应用部署。

重启 Docker 守护进程可能会短暂影响正在运行的容器。我们建议你在流量较低的时段执行此步骤,并在操作前确认你的容器已配置为自动重启。

删除无效的镜像仓库凭证、清理未使用的网络子网,或扩大服务器的地址池,即可恢复 Hostinger VPS Docker 应用目录应用的正常部署功能。

注意事项

  • docker network prune 命令只会删除未附加到正在运行容器的网络。
  • 每次部署失败后、再次尝试之前,可用 docker network prune 清理未使用的网络,以防子网耗尽。
  • 扩大默认地址池仅影响更改之后创建的网络,不会删除或影响现有网络。