目标
- Docker Engine 可用
admin能免 sudo 用 docker- 有可用的 Compose(你这次最终是
docker-compose 1.29.2)
正确步骤(最终有效路径)
- 不要用 Docker 官方源(download.docker.com)(在你当前网络里不稳定)
- 直接用 Ubuntu 仓库安装 Docker:
- 安装 Docker 引擎:
sudo apt updatesudo apt install -y docker.io(或你系统里对应的 docker 包,最终你装到了 28.2.2)
- 启动并开机自启:
sudo systemctl enable --now docker
- 安装 Docker 引擎:
- 安装 Compose(Ubuntu 仓库里常见是 v1 包名):
sudo apt install -y docker-compose- 验证:
docker-compose --version应该出现1.29.2
- 让
admin免 sudo 使用 admin:sudo usermod -aG docker skflip- 退出 SSH 再重新登录(必须)
- 验证:
docker ps(不加 sudo 且不报错)
- 验证 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 --version→Docker version 28.2.2 ...docker-compose --version→1.29.2docker 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
脚本跑完你要做什么?
- 退出 SSH 重新登录(必须让 docker 组生效)
- 重新登录后执行:
docker ps
docker-compose --version
docker run --rm hello-world
这就是我们接下来部署 Gotify 的完美起点。
