加油
努力

在TencentOS Server 3.1 TK4系统上如何正确安装Docker?

TencentOS Server 3.1 TK4(基于 CentOS Stream 8 / RHEL 8 兼容内核,由腾讯定制的国产化操作系统)上安装 Docker 需特别注意:官方 Docker 不直接支持 TencentOS(非标准 RHEL/CentOS),且 Docker CE 自 2023 年起已停止对 RHEL 8/CentOS 8 的 dnf 官方仓库支持(转为仅支持 RHEL 9+ 和特定云发行版)。但 TencentOS Server 3.1 TK4 实际基于 Linux kernel 4.18+ + userspace 类似 RHEL 8,具备运行 Docker 的基础条件。

✅ 正确、稳定、生产可用的安装方式如下(推荐方案):


✅ 推荐方案:使用 Docker 官方静态二进制包(Stable, 无依赖冲突)

✅ 优势:绕过包管理器兼容性问题,适配所有 Linux 发行版;✅ 无需启用 EPEL/PowerTools;✅ 避免与 TencentOS 自带的 podman/buildah 冲突;✅ 易于升级/卸载;✅ 符合信创环境最小化原则。

步骤 1:前置检查与准备

# 1. 确认系统版本(确保是 TencentOS Server 3.1 TK4)
cat /etc/tencentos-release
# 输出应类似:TencentOS Server 3.1 (TK4) Kernel r on an m

# 2. 确保内核支持(≥4.18,TK4 默认满足)
uname -r  # 应为 4.18.x 或更高(如 4.18.0-tlinux3-xxxx)

# 3. 启用必要内核模块(Docker 依赖 overlay2 & br_netfilter)
sudo modprobe overlay
sudo modprobe br_netfilter

# 永久加载(写入配置)
echo 'overlay' | sudo tee -a /etc/modules
echo 'br_netfilter' | sudo tee -a /etc/modules

# 配置 sysctl(启用 iptables 对桥接流量的处理)
cat <<EOF | sudo tee /etc/sysctl.d/99-docker.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sudo sysctl --system

步骤 2:下载并安装 Docker 静态二进制文件(推荐 v24.0.7 或 v25.0.3 LTS)

🔍 查看最新稳定版:https://download.docker.com/linux/static/stable/x86_64/
⚠️ 注意:不要使用 docker-ce RPM 包(因 TencentOS 未被 Docker 官方 repo 支持,dnf install docker-ce 会失败或依赖错误)

# 创建临时目录
mkdir -p ~/docker-install && cd ~/docker-install

# 下载 Docker 25.0.3(2024 年推荐的长期支持版,兼容性好)
sudo curl -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-25.0.3.tgz -o docker.tgz

# 解压到 /usr/local/bin
sudo tar xzvf docker.tgz -C /usr/local/bin --strip-components=1

# 验证二进制
docker --version  # 应输出:Docker version 25.0.3, build xxxxx

步骤 3:配置 systemd 服务(关键!使 Docker 可开机自启)

# 创建 docker.service 文件
sudo tee /etc/systemd/system/docker.service <<'EOF'
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=containerd.service

[Service]
Type=notify
ExecStart=/usr/local/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
OOMScoreAdjust=-500

[Install]
WantedBy=multi-user.target
EOF

# 重载 systemd 配置
sudo systemctl daemon-reload

# 启动并设为开机自启
sudo systemctl enable --now docker

# 验证状态
sudo systemctl status docker  # 应显示 active (running)

步骤 4:验证安装(含权限与网络)

# 1. 运行 hello-world(需 root 或 docker 组权限)
sudo docker run --rm hello-world

# 2. (可选)将当前用户加入 docker 组(避免每次加 sudo)
sudo usermod -aG docker $USER
newgrp docker  # 刷新组(或重新登录)

# 3. 测试普通用户运行(退出终端重登后执行)
docker ps -a

❌ 不推荐的方案(说明原因)

方案 问题
dnf install docker-ce(从 Docker 官方 repo) TencentOS 未被 docker-ce.repo 支持,dnf 报错 No match for argument: docker-ce 或依赖解析失败(glibc、libseccomp 版本不匹配)
使用 podman 替代(TencentOS 自带) Podman 是替代方案,但非 Docker 兼容(无 docker daemon,API 不完全一致),若业务强依赖 dockerd 则不可行
编译源码安装 复杂、易出错、不适用于生产环境,且 TencentOS 的构建工具链(如 go 版本)可能不满足要求

✅ 补充建议(生产环境)

  • 镜像提速:配置国内镜像源(如腾讯云、中科大、阿里云)

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<'EOF'
    {
    "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com"
    ],
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
    "max-size": "100m",
    "max-file": "3"
    }
    }
    EOF
    sudo systemctl restart docker
  • SELinux 注意:TencentOS 默认关闭 SELinux(getenforce 返回 Disabled),如启用需额外策略,建议保持 disabled(符合多数容器部署规范)。

  • 安全加固:生产环境建议启用 --userns-remap、限制容器资源、定期更新 Docker 版本。


✅ 总结:

TencentOS Server 3.1 TK4 上,使用官方静态二进制 + 手动 systemd 服务配置 是最可靠、兼容性最佳、且符合信创环境要求的 Docker 安装方式。整个过程无需修改系统源、不引入冲突依赖,10 分钟内可完成。

如需我为你生成一键安装脚本(含错误检查/日志),或适配 ARM64 架构(如 TK4 服务器为鲲鹏),欢迎继续提问!

云服务器