1. 前言
- 在服务器禁止外网访问的情况下,无法通过
apt-get install
安装docker,使得docker安装变得异常曲折
- 本地下载安装包,scp到服务器
- 通过
dpkg -i
手动安装,启动docker服务失败 - … …
- 各种坑,猛男也要落泪 🤣 🤣 🤣
- apt-get install安装docker,推荐的参考文档:Debian中安装docker
2. 离线安装docker
2.1 检查系统信息,以下载对应的安装包
- 执行如下命令,查看Linux系统版本(Debian or Redhat)、64 bit or 32 bit、amd or arm架构
uname -a
# 或者使用
cat /proc/version
- 从输出信息可以看出,服务器是Debian系统、amd64(amd架构、64bit)
# uname -a的输出
Linux n37-081-113 4.19.117.bsk.12-amd64 #4.19.117.bsk.12 SMP Debian 4.19.117.bsk.12 Thu Mar 17 16:41:16 x86_64 GNU/Linux
- 不同的Debian版本使用的docker安装包有差异,因此需要了解Debian的具体版本 —— 这里是Debian 9,名字为 Stretch
# debian系统可以直接使用该命令
cat /etc/debian_version
# 或使用如下2种命令皆可
cat /etc/issue
cat /etc/issue
- Debian系统版本与code name之间的关系可以查看Debian官网:DebianReleases
- 如何查看系统信息,可以参考:详解linux下查看系统版本号信息的方法(总结)
2.2 下载docker安装包
- 综上,笔者最终可在如下地址下载docker的安装包:https://download.docker.com/linux/debian/dists/stretch/pool/stable/amd64/
- 安装docker需要下载3个安装包:containerd.io、docker-ce-cli、docker-ce,选择上述3个安装包的最新版本进行下载即可
2.3 安装docker
- 在root用户下,进行docker安装
- 依次安装上述三个安装包
dpkg -i xxx.deb
- 完成安装后,设置开机自启动、启动docker
systemctl enable docker && systemctl start docker
- 离线安装参考文档: 国产化项目Debian系Linux离线安装docker
2.4 docker服务验证
- 如未有任何报错,可以通过
systemctl status docker.service
查看是否为active(running)
状态 - 接着,通过如下命令检查docker服务是否ok
docker info
docker run hello-world
3. 错误问题集锦
3.1 A dependency job for docker.service failed. See ‘journalctl -xe’ for details.
- 启动docker时,出现如下报错信息:
A dependency job for docker.service failed. See 'journalctl -xe' for details.
- 通过如下命令,查看docker启动失败的详情:
journalctl -xeu docker.service
# 或通过如下命令,会发现docker处于inactive状态
systemctl status docker.service
- 错误信息大致如下:
systemd[1]: Job docker.service/start failed with result 'dependency'.
systemd[1]: Dependency failed for Docker Application Container Engine.
3.1.1 对自己不太ok的方式
- 查阅资料后,博客:Job docker.service/start failed with result ‘dependency’,给笔者启示:错误原因可能是还没创建docker用户组
- 使用如下命令,创建docker用户组
groupadd docker
- 重启docker,仍然出现该错误,同时通过
cat /etc/group
可以发现已经成功添加docker用户
3.1.2 完美的解决方案
- StackOverflow上的一个问答成功帮助我解决问题:Docker service fails to start due to dependency
- 执行
/usr/bin/dockerd -H unix://
后,出现下面的错误:
can't create unix socket /var/run/docker.sock: is a directory
- 确认
/var/run/docker.sock
目录存在后,删除该目录(参考问答帖:Failed to load listeners: can’t create unix socket /var/run/docker.sock: is a directory )
rm -fr /var/run/docker.sock
- 再次执行
/usr/bin/dockerd -H unix://
,通过systemctl status docker.service
查看docker状态,发现未active - ctrl + C取消执行后,就可以通过
systemctl start docker
启动docker服务了