Linux离线(zip方式)安装docker
目录
- 基础信息
- 操作系统信息
- docker信息
- 安装实例
- 安装步骤
- 示例
- 遇到的问题
- 问题1:修改默认工作路径启动失败
- 问题2 找不到对应组
基础信息
操作系统信息
OS版本:CentOS 7 64位
内核版本:3.10.0
相关命令:
- uname -r
- cat /etc/os-release
docker信息
版本:28.1.1
安装方式:zip包离线安装
下载地址:https://download.docker.com/linux/static/stable/x86_64/
额外配置:修改默认工作路径
安装实例
安装步骤
- 下载安装包
- 解压
- 创建相关路径
- 添加环境变量
- 启动
示例
- 把下载的安装上传到自己的路径
- 解压
cd 安装包所在位置
tar -xvf ./docker-28.1.1.tgz
- 创建相关路径
这一步是因为要修改docker的默认工作路径才需要,如果不修改可以跳过这一步。这里主要有两个需要创建的路径,一个是修改默认工作路径的文件,一个是默认工作路径,我们把修改的配置文件放在:/etc/docker/daemon.json,工作路径配置为:/mnt/data/dockerexec,可以选择右键方式也可以选择命令方式。
sudo mkdir -p /etc/docker
cd /etc/docker
sudo echo '{"data-root": "/mnt/data/dockerexec"}' > /etc/docker/daemon.json
- 在/etc/profile中添加以下内容,zip方式如果不配置这个会出现问题1。其中/home/soft/docker需要改成自己的docker安装路径
export PATH=$PATH:/home/soft/docker
- 启动
1) 使用自带dockerd 启动
nohup dockerd &
2)可以添加docker.service,通过systemctl命令启动
文件位置:/etc/systemd/system/docker.service
文件内容:
[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=/home/soft/docker/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
Delegate=yes
KillMode=process[Install]
WantedBy=multi-user.target
遇到的问题
问题1:修改默认工作路径启动失败
报错信息
unable to configure the Docker daemon with file /etc/docker/daemon.json: merged configuration validation from file and command line flags failed: invalid userland-proxy-path: userland-proxy is enabled, but userland-proxy-path is not set
前置操作
新增daemon.json文件,配置内容{“data-root”: “/mnt/data/dockerexec”}已经新建data/dockerexec路径,权限755
解决方法:通过临时禁用解决上面问题
{"data-root": "/mnt/data/dockerexec","userland-proxy": false
}
问题:临时禁用有什么风险吗?如果不禁用应该怎么解决?
潜在风险:
- 可能导致容器端口映射功能失效,影响容器与外部网络的通信
- 可能导致 IPv6 环境下的容器无法被外部访问
- 在低版本内核(如 2.6.x)中,容器内部通过 Hairpin 方式访问自己暴露的服务时,可能需要依赖 userland-proxy。如果禁用它,可能影响容器内部的网络通信
- 在禁用 userland-proxy 时,容器可能无法接收 UDP 流量。这是因为 userland-proxy 在处理某些网络协议(如 UDP)时具有特定作用,禁用后可能导致相关流量无法正确到达容器。
上面的问题都只是可能性,也就是说不一定会发生,但是在生产中一般不建议这么做。
问题2 找不到对应组
临时禁用解决问题1,启动之后发现新问题:
time="2025-06-03T10:17:47.982346236+08:00" level=info msg="Starting up"
time="2025-06-03T10:17:47.983972390+08:00" level=warning msg="could not change group /var/run/docker.sock to docker: group docker not found"
time="2025-06-03T10:17:47.984112724+08:00" level=info msg="containerd not running, starting managed containerd"
failed to start containerd: exec: "containerd": executable file not found in $PATH
原因:未添加docker到path中,类似于Windows下的环境变量中的path,没有配置时会提示找不到路径
解决方法:把docker路径添加到path中
- 一次性添加
export PATH=$PATH:/home/soft/docker
- 持久化
文件:/etc/profile
添加内容:
export PATH=$PATH:/home/soft/docker
添加路径之后第一个问题也解决了,所以可以去掉临时禁用的配置,优先使用默认配置。