docker离线安装部署 linux_docker 离线安装

docker离线安装部署 linux_docker 离线安装

📋 前置条件

项目要求
操作系统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 限制日志大小,防止磁盘被占满

📖 延伸阅读

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容