脚本版本 1.0.0 | 默认安装 Docker 27.5.0 | 最后更新 2026-02-16
这个脚本是在管理多台服务器时写的,目的是把每次安装 Docker 都要重复的操作自动化——选版本、配镜像加速、改 daemon.json、设开机自启,一次配好,以后所有机器都用同一套。

系统要求与兼容性
支持的 Linux 发行版
| | | |
|---|
| Ubuntu | | | |
| Debian | 11 (Bullseye) / 12 (Bookworm) | | |
| CentOS | | | |
| RHEL | | | |
| Rocky Linux | | | |
| AlmaLinux | | | |
| Fedora | | | |
Ubuntu、Debian 和 CentosOS 的测试最充分,如果没有特殊原因,新机器优先用这三个发行版。
支持的系统架构
- x86_64 (AMD64)
- ARM64 (aarch64)
- ARMv7
脚本会自动检测架构并下载对应版本,不需要手动指定。
硬件最低要求
- CPU:1 核心
- 内存:1GB(推荐 2GB 以上)
- 磁盘:5GB 可用空间(推荐 20GB 以上,用于存镜像)
- 网络:需要能访问外网
权限要求
必须以 root 权限运行,没有例外:
sudo bash install-docker-linux.sh
直接用普通用户跑会在第一步就报错退出,脚本不会做任何修改。
功能特性
智能环境检测
脚本启动后先做一轮环境检查,通不过就停下来告诉你哪里有问题:
- 自动识别 Linux 发行版(Ubuntu/CentOS/Debian 等)和版本号
- 检测 CPU 架构,选对应的安装包
- 测试国内外网络连通性
- 检查磁盘剩余空间(要求至少 5GB)
- 检测是否已安装 Docker,有的话让你选处理方式
版本管理
- 默认安装 Docker 27.5.0(当前最新稳定版)
- 交互式选择时会列出常用版本供参考
- 可以查询当前系统的所有可用版本
检测到系统已有 Docker 时,脚本提供 4 种选择:
- 卸载并重新安装
- 保持现有版本
- 升级到指定版本
- 退出脚本
选择卸载时还会问要不要保留 /var/lib/docker 里的镜像和容器数据。
自动配置优化
安装完成后脚本会生成一份调优过的 daemon.json,包括:
- 配置 5 个国内镜像加速源(拉镜像速度差异巨大,这个必须配)
- 日志文件大小限制(不配的话日志文件会无限涨)
- overlay2 存储驱动
- live-restore 开启(Docker 重启时容器不中断)
- 关闭 userland-proxy(用 iptables 转发,性能更好)
- 文件描述符限制调到 64000
具体配置内容见下文 daemon.json 配置说明。
用户权限
脚本会自动把当前用户加入 docker 组,装完之后执行一次 newgrp docker 或重新登录,就不需要每次加 sudo 了。
安装日志
所有操作都会写入 /var/log/docker-install/ 目录,出问题了可以去那里找详细的安装过程记录。
错误处理
脚本开了 set -e,任何步骤失败都会立即停止执行,不会让一半安装的状态留在系统里。失败时会显示出错的行号和建议的修复方法。
安装验证
安装完成后执行 6 项验证:
docker- 版本信息是否正确
- Docker 服务是否正在运行
docker info- Docker Compose 是否可用
使用方法
推荐方式(下载后运行)
# 下载脚本(github仓库地址和gitee仓库地址分别如下)wget https://raw.githubusercontent.com/itinstall1024/itinstall-script/refs/heads/main/install-docker-linux.shwget https://gitee.com/haonuli/itinstall-script/raw/main/install-docker-linux.sh# 加执行权限chmod +x install-docker-linux.sh# 运行(交互式,可以选版本)sudo bash install-docker-linux.sh
命令行参数
sudo bash install-docker-linux.sh [选项]
| | |
|---|
--version <版本号> | | --version 24.0.7 |
--no-compose | | |
--no-mirror | | |
--no-autostart | | |
--help | | |
常用安装示例
# Ubuntu 默认安装(交互式选版本)sudo bash install-docker-linux.sh# CentOS 安装指定版本sudo bash install-docker-linux.sh --version 24.0.7# 海外服务器,不用国内镜像sudo bash install-docker-linux.sh --no-mirror# 只装 Docker Engine,不装 Composesudo bash install-docker-linux.sh --no-compose# 多参数组合sudo bash install-docker-linux.sh --version 26.1.0 --no-autostart# 内网通过代理安装export http_proxy=http://proxy.example.com:8080export https_proxy=http://proxy.example.com:8080sudo -E bash install-docker-linux.sh
安装流程详解
16 个安装步骤
脚本按以下顺序自动执行:
步骤 1 检查 root 权限步骤 2 检查网络连接(分别测试国内和国际网络)步骤 3 检查磁盘空间(需要至少 5GB)步骤 4 检测系统信息(发行版、版本号、CPU 架构)步骤 5 检测是否已安装 Docker步骤 6 选择 Docker 版本步骤 7 更新软件包索引步骤 8 安装系统依赖(curl、gnupg 等)步骤 9 添加 Docker 官方 GPG 密钥步骤 10 添加 Docker 软件仓库步骤 11 安装 DockerEngine 和 Containerd步骤 12 写入 daemon.json 配置步骤 13 配置用户权限(加入 docker 组)步骤 14 启动 Docker 服务并设置开机自启步骤 15 执行 6 项安装验证步骤 16 显示安装总结
交互式选择说明
处理已有 Docker
==========================================检测到系统已安装Docker==========================================当前版本: 24.0.7Docker路径: /usr/bin/docker已安装的包: - docker-ce - docker-ce-cli - containerd.io请选择操作: 1) 卸载现有Docker并重新安装 (推荐) 2) 跳过安装,保持现有版本 3) 仅升级到指定版本 4) 退出脚本请输入选项 [1-4]:
数据保留确认
选择卸载时会出现:
是否保留Docker镜像和容器数据? [y/N]:
输入 y 保留 /var/lib/docker 中的数据,输入 n 或直接回车则完全清理(配置文件会自动备份到 /etc/docker/daemon.json.backup.YYYYMMDD_HHMMSS)。
版本选择
当前默认版本: 27.5.0常用Docker版本:- 27.5.0 (推荐,最新稳定版)- 26.1.0 (长期支持版)- 25.0.0- 24.0.9- 23.0.6是否使用默认版本 27.5.0? [Y/n]:
不确定选哪个:
daemon.json 配置说明
脚本安装完成后会在 /etc/docker/daemon.json 写入以下配置:
{"registry-mirrors": ["https://docker.rainbond.cc","https://docker.1ms.run","https://docker.m.daocloud.io","https://dockerhub.icu","https://docker.chenby.cn" ],"log-driver": "json-file","log-opts": {"max-size": "100m","max-file": "3" },"storage-driver": "overlay2","default-ulimits": {"nofile": {"Name": "nofile","Hard": 64000,"Soft": 64000 } },"live-restore": true,"userland-proxy": false,"experimental": false,"metrics-addr": "127.0.0.1:9323","max-concurrent-downloads": 10}
各配置项说明
| | |
|---|
registry-mirrors | | |
log-driver | | |
log-opts.max-size | | |
log-opts.max-file | | |
storage-driver | | |
default-ulimits.nofile | | |
live-restore | | |
userland-proxy | | |
metrics-addr | | |
max-concurrent-downloads | | |
关于镜像加速源
配置了 5 个而不是 1 个,是因为公开镜像源的可用性不稳定。Docker 会依次尝试,前面的失败了自动切到下一个:
- docker.rainbond.cc(Rainbond 社区)
- docker.1ms.run(1ms)
- docker.m.daocloud.io(DaoCloud)
- dockerhub.icu
- docker.chenby.cn
验证镜像加速是否生效:
docker info | grep -A 10 "Registry Mirrors"
修改配置
如果需要调整,直接编辑配置文件然后重启:
sudo nano /etc/docker/daemon.jsonsudo systemctl restart dockerdocker info
常见问题 FAQ
Q1:必须用 sudo 运行吗?
是的,安装 Docker 需要修改系统配置,必须有 root 权限:
sudo bash install-docker-linux.sh
Q2:装完之后运行 docker 命令还要加 sudo,怎么解决?
用户加入 docker 组需要重新登录才能生效,两种方式任选:
# 不退出当前会话,立即生效newgrp docker# 或直接退出终端重新登录
Q3:怎么安装指定版本?
sudo bash install-docker-linux.sh --version 24.0.7
不确定有哪些版本可以装时,先查一下:
# Ubuntu/Debianapt-cache madison docker-ce# CentOS/RHELyum list docker-ce --showduplicates
Q4:内网环境、访问不了外网怎么办?
通过 HTTP 代理安装:
export http_proxy=http://proxy.example.com:8080export https_proxy=http://proxy.example.com:8080sudo -E bash install-docker-linux.sh
目前脚本不支持纯离线安装,如有需求可提 Issue。
Q5:安装失败了怎么查原因?
# 脚本安装日志sudo cat /var/log/docker-install/install_*.log# Docker 服务日志sudo journalctl -xeu docker.service
Q6:ARM 服务器能用吗?
支持,脚本自动检测 ARM64 或 ARMv7 并安装对应版本,不需要额外处理。
Q7:安装后想换镜像加速源怎么改?
编辑 /etc/docker/daemon.json,修改 registry-mirrors 数组,保存后执行:
sudo systemctl restart docker
故障排查
错误1:权限不足
报错:
[ERROR] 此脚本必须以root权限运行
解决:
sudo bash install-docker-linux.sh
错误2:网络连接失败
报错:
[ERROR] 网络连接失败,无法访问外部网络
排查步骤:
# 测试基础网络ping -c 3 8.8.8.8# 测试 DNSnslookup download.docker.com# 如果在内网,配置代理export http_proxy=http://proxy.example.com:8080export https_proxy=http://proxy.example.com:8080sudo -E bash install-docker-linux.sh
错误3:磁盘空间不足
报错:
[ERROR] 磁盘空间不足可用空间: 2.5GB / 所需空间: 至少 5GB
解决:
# 清理 APT 缓存(Ubuntu/Debian)sudo apt-get clean# 清理 YUM 缓存(CentOS/RHEL)sudo yum clean all# 如果已有 Docker 残留,清理镜像和容器sudo docker system prune -a# 找出占用最多的目录du -sh /* 2>/dev/null | sort -rh | head -10
错误4:GPG 密钥下载失败
报错:
[ERROR] GPG密钥下载失败
解决:
先试 --no-mirror 参数(走官方源):
sudo bash install-docker-linux.sh --no-mirror
或手动添加 GPG 密钥后重跑:
# Ubuntu/Debiancurl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpgsudo bash install-docker-linux.sh
错误5:Docker 服务启动失败
报错:
[ERROR] Docker服务启动失败
排查步骤:
# 1. 看详细日志(最有用)sudo journalctl -xeu docker.service --no-pager | tail -50# 2. 检查 daemon.json 格式cat /etc/docker/daemon.json | python3 -m json.tool# 3. 让 Docker 自己验证配置sudo dockerd --validate# 4. 如果是配置文件问题,先用最小配置测试echo'{}' | sudo tee /etc/docker/daemon.jsonsudo systemctl start docker
错误6:测试容器运行失败
报错:
[ERROR] Docker容器运行测试失败
排查步骤:
# 确认 Docker 服务在跑sudo systemctl status docker# 手动拉取测试镜像sudo docker pull hello-world# 手动运行测试容器sudo docker run --rm hello-world# 检查镜像加速配置docker info | grep -A5 "Registry Mirrors"
错误7:找不到指定版本
报错:
[WARN] 未找到精确版本 24.0.7
解决:
# 查看当前仓库里有哪些版本# Ubuntu/Debianapt-cache madison docker-ce | head -20# CentOS/RHELyum list docker-ce --showduplicates | sort -r | head -20
找一个存在的版本号重新安装:
sudo bash install-docker-linux.sh --version 24.0.9
完全卸载 Docker
Ubuntu / Debian
# 1. 停止服务sudo systemctl stop docker docker.socket containerd# 2. 卸载软件包sudo apt-get purge -y docker-ce docker-ce-cli containerd.io \ docker-buildx-plugin docker-compose-plugin# 3. 删除数据和配置sudo rm -rf /var/lib/dockersudo rm -rf /var/lib/containerdsudo rm -rf /etc/docker# 4. 删除 docker 用户组sudo groupdel docker# 5. 清理残留sudo apt-get autoremove -y && sudo apt-get autoclean
CentOS / RHEL / Rocky Linux
# 1. 停止服务sudo systemctl stop docker docker.socket containerd# 2. 卸载软件包sudo yum remove -y docker-ce docker-ce-cli containerd.io \ docker-buildx-plugin docker-compose-plugin# 3. 删除数据和配置sudo rm -rf /var/lib/dockersudo rm -rf /var/lib/containerdsudo rm -rf /etc/docker# 4. 删除 docker 用户组sudo groupdel docker
Fedora
# 1. 停止服务sudo systemctl stop docker docker.socket containerd# 2. 卸载软件包sudo dnf remove -y docker-ce docker-ce-cli containerd.io \ docker-buildx-plugin docker-compose-plugin# 3. 删除数据和配置sudo rm -rf /var/lib/dockersudo rm -rf /var/lib/containerdsudo rm -rf /etc/docker# 4. 删除 docker 用户组sudo groupdel docker
只卸载软件包、保留数据
如果想保留镜像和容器数据,不删 /var/lib/docker:
# Ubuntu/Debiansudo apt-get remove docker-ce docker-ce-cli containerd.io# CentOS/RHELsudo yum remove docker-ce docker-ce-cli containerd.io# Fedorasudo dnf remove docker-ce docker-ce-cli containerd.io
重新安装 Docker 后,/var/lib/docker 里的数据可以继续用。
附录
日志文件位置
| |
|---|
| /var/log/docker-install/install_YYYYMMDD_HHMMSS.log |
| journalctl -u docker.service |
| /var/lib/docker/containers/<container-id>/ |
重要文件路径
| |
|---|
/etc/docker/daemon.json | |
/var/lib/docker/ | |
/var/run/docker.sock | |
/etc/apt/sources.list.d/docker.list | |
/etc/yum.repos.d/docker-ce.repo | |
常用 Docker 命令速查
# 版本和状态docker --versiondocker compose versiondocker info# 容器操作docker ps # 查看运行中的容器docker ps -a # 查看所有容器(含已停止)docker start <ID或名称> # 启动容器docker stop <ID或名称> # 停止容器docker restart <ID或名称> # 重启容器docker rm <ID或名称> # 删除容器# 镜像操作docker images # 查看本地镜像docker pull <镜像名:tag> # 拉取镜像docker rmi <ID或名称> # 删除镜像docker image prune # 清理悬空镜像# 服务管理sudo systemctl start docker # 启动sudo systemctl stop docker # 停止sudo systemctl restart docker # 重启sudo systemctl status docker # 查看状态sudo systemctl enable docker # 设置开机自启# 清理docker system prune # 清理停止的容器、悬空镜像等docker system prune -a # 清理所有未使用的资源(谨慎)docker system df # 查看磁盘占用
参考资源
- Docker 官方文档:https://docs.docker.com
- Docker Hub:https://hub.docker.com
- Docker Release Notes:https://docs.docker.com/engine/release-notes/
- GitHub docker-ce:https://github.com/docker/docker-ce