Ubuntu 22 + JDCloud 国内网络环境”下安装 Docker/Compose

目标

  • Docker Engine 可用
  • admin 能免 sudo 用 docker
  • 有可用的 Compose(你这次最终是 docker-compose 1.29.2

正确步骤(最终有效路径)

  1. 不要用 Docker 官方源(download.docker.com)(在你当前网络里不稳定)
  2. 直接用 Ubuntu 仓库安装 Docker:
    • 安装 Docker 引擎:
      • sudo apt update
      • sudo apt install -y docker.io(或你系统里对应的 docker 包,最终你装到了 28.2.2)
    • 启动并开机自启:
      • sudo systemctl enable --now docker
  3. 安装 Compose(Ubuntu 仓库里常见是 v1 包名):
    • sudo apt install -y docker-compose
    • 验证:docker-compose --version 应该出现 1.29.2
  4. admin 免 sudo 使用 admin:
    • sudo usermod -aG docker skflip
    • 退出 SSH 再重新登录(必须)
    • 验证:docker ps(不加 sudo 且不报错)
  5. 验证 Docker 正常:
    • docker --version(你的是 28.2.2-0ubuntu1~22.04.1
    • (可选)docker run --rm hello-world


我们遇到的坑 & 原因(很关键,以后能快速定位)

坑 1:Docker 官方源 download.docker.com TLS 握手失败

你当时看到的核心报错是:

  • Could not handshake ... [IP: ... 443]
  • 导致:docker-ce / containerd.io / docker-compose-plugin 全部 “找不到”

原因(本质)
JDCloud + 国内网络到 Docker 官方仓库(CloudFront/CDN)经常出现 TLS 握手失败或被中间链路干扰。
不是你命令错,是网络通路不可靠,所以 apt 无法下载索引,自然就提示“包不存在”。

正确处理
不要死磕 docker-ce 官方源,改用 Ubuntu 官方仓库的 docker(稳定、可用)。


坑 2:docker-compose-plugin 包找不到

你执行:

  • sudo apt install -y docker.io docker-compose-plugin
    报:
  • Unable to locate package docker-compose-plugin

原因
在你的镜像源/仓库里,Compose v2 插件包名可能不存在(或被裁剪),Ubuntu 仓库里经常提供的是 docker-compose(v1) 而不是 docker-compose-plugin

正确处理
改用:

  • sudo apt install -y docker-compose
    然后使用命令:
  • docker-compose up -d(注意是带连字符)

坑 3:以为“没装 compose 就无法部署服务”

其实不是。你最终使用的是:

  • docker-compose 1.29.2

原因
很多教程都讲 v2 的 docker compose(空格),但你环境是 v1 的 docker-compose(连字符)。两者都能用,只是命令不同。

正确处理
只要 docker-compose --version 有输出,就可以继续部署 Gotify/DAV/WordPress。


坑 4:组权限生效需要重新登录

你做了:

  • usermod -aG docker admin

但如果不重新登录,会出现:

  • 需要 sudo 才能 docker
  • 或 permission denied

原因
Linux 的用户组权限是在登录会话创建时加载的,修改组需要重新登录才能生效。

正确处理

  • 退出 SSH、重新登录
  • docker ps 验证

你这次最终“正确状态”是什么(便于以后对照)

你现在的正确输出是:

  • docker --versionDocker version 28.2.2 ...
  • docker-compose --version1.29.2
  • docker ps → 不报错(空容器列表正常)


总结一下,可以用以下 Ubuntu 22.04(国内网络/JDCloud 友好)Docker + docker-compose(v1) 一键安装脚本实现以上过程:

  • ✅ 不依赖 download.docker.com(避免 TLS handshake 坑)
  • ✅ 安装 docker.io + docker-compose
  • ✅ 启动 Docker 并设置开机自启
  • ✅ 把当前用户加入 docker
  • ✅ 给出下一步提示(需要重新登录使组权限生效)

你用 admin登录的话,就会把 admin 加入 docker 组。
如果你是其它用户运行,也会自动加当前用户。


一键脚本(复制整段到服务器执行)

cat <<'BASH' > ~/install_docker_ubuntu22.sh
#!/usr/bin/env bash
set -euo pipefail

echo "==> [1/7] Basic info"
echo "User: $(whoami)"
echo "Hostname: $(hostname)"
echo "OS:"
if command -v lsb_release >/dev/null 2>&1; then
  lsb_release -a || true
else
  cat /etc/os-release || true
fi
echo

echo "==> [2/7] apt update + install prerequisites"
sudo apt update -y
sudo apt install -y ca-certificates curl gnupg lsb-release apt-transport-https

echo "==> [3/7] Remove old/unused docker packages (safe if not installed)"
sudo apt remove -y docker docker-engine docker.io containerd runc >/dev/null 2>&1 || true

echo "==> [4/7] Install docker.io + docker-compose from Ubuntu repo"
sudo apt update -y
sudo apt install -y docker.io docker-compose

echo "==> [5/7] Enable and start Docker service"
sudo systemctl enable --now docker

echo "==> [6/7] Add current user to 'docker' group (requires re-login to take effect)"
USER_NAME="$(whoami)"
sudo usermod -aG docker "$USER_NAME"

echo "==> [7/7] Verify versions (docker works now; group takes effect after re-login)"
docker --version || true
docker-compose --version || true
sudo systemctl status docker --no-pager | sed -n '1,12p' || true

cat <<EOF

✅ Docker installed.
IMPORTANT:
- You must log out and log back in (or open a new SSH session) so that 'docker' group permission takes effect.
After re-login, run:
  docker ps
Optional test:
  docker run --rm hello-world

EOF
BASH

chmod +x ~/install_docker_ubuntu22.sh
~/install_docker_ubuntu22.sh

脚本跑完你要做什么?

  1. 退出 SSH 重新登录(必须让 docker 组生效)
  2. 重新登录后执行:
docker ps
docker-compose --version
docker run --rm hello-world

这就是我们接下来部署 Gotify 的完美起点。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注