📋 前置条件
| 项目 | 要求 |
|---|---|
| 操作系统 | CentOS 7 / RHEL 7(最小化或标准安装均可) |
| 安装包 | 提前下载 Docker 二进制压缩包(如 docker-19.03.3.tgz) |
| 权限 | 具备 sudo 权限或直接使用 root 用户操作 |
| 网络 | 无需外网(离线安装) |
🚀 安装步骤
📦 步骤 1:解压 Docker 二进制包
将上传的压缩包解压,生成 docker 目录,内含所有可执行文件。
tar -xzvf docker-19.03.3.tgz
解压后目录结构:
docker/
├── docker
├── docker-init
├── docker-proxy
├── dockerd
├── containerd
├── containerd-shim
├── containerd-shim-runc-v2
├── ctr
└── runc
📂 步骤 2:复制二进制文件到系统目录
将解压所得的所有二进制文件复制到 /usr/bin/ 目录,使系统可直接调用。
cd docker
cp * /usr/bin/
验证方法:
which dockerd
预期输出:/usr/bin/dockerd
⚙️ 步骤 3:注册 Docker 为系统服务
创建 systemd 服务配置文件。
vim /etc/systemd/system/docker.service
添加以下内容:
ini
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
关键参数说明:
| 参数 | 说明 |
|---|---|
ExecStart | 指定 dockerd 可执行文件的绝对路径(必须与步骤 2 路径一致) |
LimitNOFILE | 文件描述符限制设为无限,避免高并发场景下报错 |
Restart | 服务异常退出时自动重启 |
加载服务配置:
chmod +x /etc/systemd/system/docker.service
systemctl daemon-reload
🔄 步骤 4:设置开机自启动
systemctl enable docker.service
▶️ 步骤 5:启动 Docker 服务
systemctl start docker
✅ 步骤 6:验证安装是否成功
docker ps
预期结果:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
(空列表表示 Docker 正常运行,无报错)
异常结果:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
出现此提示表示 Docker 服务未正常启动,请参考下文错误处理部分。
⚠️ 常见错误处理
🔴 错误 1:dockerd 可执行文件未找到(status 203/EXEC)
错误现象:
systemctl start docker
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.
查看详细日志:
systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/etc/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: failed (Result: start-limit) since 四 2020-11-12 11:27:15 CST; 37s ago
Process: 28545 ExecStart=/usr/bin/dockerd (code=exited, status=203/EXEC)
Main PID: 28545 (code=exited, status=203/EXEC)
11月 12 11:27:15 host-90-0-0-80 systemd[1]: Failed to start Docker Application Container Engine.
11月 12 11:27:15 host-90-0-0-80 systemd[1]: Unit docker.service entered failed state.
11月 12 11:27:15 host-90-0-0-80 systemd[1]: docker.service failed.
原因分析:
status=203/EXEC 表示 systemd 无法执行 ExecStart 指定的程序,通常由以下原因导致:
| 可能原因 | 说明 |
|---|---|
| 未执行步骤 2 | 二进制文件未复制到 /usr/bin/ 目录 |
| 路径不匹配 | 服务文件中 ExecStart=/usr/bin/dockerd,但 dockerd 实际位于其他位置 |
| 文件权限不足 | dockerd 文件缺少可执行权限 |
解决方案:
# 确认 dockerd 是否存在
ls -l /usr/bin/dockerd
# 若不存在,执行步骤 2 复制文件
cd /path/to/docker && cp * /usr/bin/
# 确认文件具有可执行权限
chmod +x /usr/bin/dockerd
# 重载服务并重启
systemctl daemon-reload
systemctl start docker
🔴 错误 2:daemon. 配置错误导致启动失败(status 1/FAILURE)
错误现象:
systemctl start docker
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.
查看详细日志:
systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: failed (Result: start-limit) since Mon 2018-07-02 22:20:05 EDT; 10s ago
Process: 3706 ExecStart=/usr/bin/dockerd (code=exited, status=1/FAILURE)
Main PID: 3706 (code=exited, status=1/FAILURE)
Jul 02 22:20:05 localhost systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
Jul 02 22:20:05 localhost systemd[1]: Failed to start Docker Application Container Engine.
原因分析:
status=1/FAILURE 为通用错误码,通常与 /etc/docker/daemon. 配置文件有关。常见问题:
| 可能原因 | 示例 |
|---|---|
| 格式错误 | 多余逗号、缺少引号 |
| 目录不存在 | "data-root": "/data/docker" 但 /data/docker 不存在或被占用 |
| 路径冲突 | 指定的目录已被文件占用,无法创建所需子目录 |
解决方案:
# 检查 daemon. 是否存在及内容
cat /etc/docker/daemon.
# 若配置文件有问题,可临时移除或重命名
mv /etc/docker/daemon. /etc/docker/daemon..bak
# 重新启动 Docker
systemctl start docker
正确配置示例(/etc/docker/daemon.):
{
"data-root": "/data/docker",
"log-driver": "-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
创建数据目录:
mkdir -p /data/docker
特别注意:确保
data-root指定的目录路径未被普通文件占用,且父目录具有足够磁盘空间。
🔍 故障排查流程
systemctl start docker
↓
失败
↓
systemctl status docker.service
↓
查看 Process: ExecStart=... (code=exited, status=XXX)
↓
status=203/EXEC status=1/FAILURE
↓ ↓
检查 dockerd 路径 检查 /etc/docker/daemon.
是否存在于 /usr/bin/ 格式是否正确
↓ ↓
复制二进制文件到 /usr/bin/ 修正或移除配置文件
↓ ↓
↓←←←←←←←←←←←←←←←←←←←←←←←←←←←←←↓
↓
systemctl daemon-reload
systemctl start docker
↓
docker ps 验证
📊 操作速查表
| 操作 | 命令 |
|---|---|
| 解压安装包 | tar -xzvf docker-19.03.3.tgz |
| 复制二进制文件 | cd docker && cp * /usr/bin/ |
| 创建服务文件 | vim /etc/systemd/system/docker.service |
| 加载服务配置 | systemctl daemon-reload |
| 设置开机自启 | systemctl enable docker.service |
| 启动服务 | systemctl start docker |
| 查看服务状态 | systemctl status docker.service |
| 验证安装 | docker ps |
| 查看服务日志 | journalctl -u docker.service -n 50 |
📌 注意事项
| 项目 | 说明 |
|---|---|
| 版本一致性 | 建议与公司生产环境 Docker 版本保持一致,避免兼容性问题 |
| 路径匹配 | 服务文件中 ExecStart 路径必须与二进制文件实际存放路径一致 |
| daemon. 格式 | 格式严格要求,多余逗号将导致服务无法启动 |
| 数据目录规划 | 生产环境建议将 data-root 指向独立数据盘(如 /data/docker),避免系统盘空间不足 |
| 防火墙配置 | 如需对外暴露容器端口,请确保 firewalld/iptables 已放行相应端口 |
| 日志管理 | 建议配置 log-opts 限制日志大小,防止磁盘被占满 |
📖 延伸阅读
- Docker 官方二进制安装文档:https://docs.docker.com/engine/install/binaries/
- systemd 服务编写指南
- Docker daemon. 配置详解
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END







暂无评论内容