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服务了