自建脚本安装docker
注:
因为用的都是编译安装后的脚本,因此该方法需要在一台 服务器上 先安装好docker ,之后的服务器 只需将编译后的 脚本 拷贝过去即可。
我安装的docker 版本是
[root@localhost mybuilddocker]# docker -v
Docker version 20.10.16, build aa7e414
1、docker 的版本不同 可能需要的依赖不同 ,这个依赖可以在 已安装 docker 的主机 查看 /usr/lib/systemd/system/docker.service ,
下面是我在一台虚拟机上安装docker,看到的 需要的依赖组件
2、将需要的文件 拷贝到需要安装的其他主机上。
其中被红色圈出来的文件 在 /usr/lib/systemd/system/ 这个目录下 , 其他的 在 /usr/bin 目录下。
3、将上面的文件 从已安装 docker的主机上,拷贝到需要安装的主机上的指定目录。
执行 systemctl daemon-reload 重载 服务的配置文件,之后启动 docker 服务即可(systemctl start docker)。
错误处理:
a) 若是在启动的过程中遇到如下报错 ,且start 命令 遇到了docker.service: Unit not found
这种情况多数是 因为docker.service 文件中的某些依赖没有导入过来,按照 1 说的 都检查一下,有没有的 从 已安装docker的主机拷贝过来。
http://www.zzvips.com/article/134193.html 这里有详解。
b) 启动还是失败 同时提示 通过 journalctl -xe 这个命令获取详细信息。同时可以看到 docker.socker 启动失败。
解决办法:
方法1.添加docker用户组(groupadd docker,如果/etc/group用统一配置管理的话记得在源group文件中添加docker组信息)
方法2. 修改/usr/lib/systemd/system/docker.socket文件: 之后别忘了 systemctl daemon-reload 重载 服务的配置文件
[Unit]
Description=Docker Socket for the API
PartOf=docker.service
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker 这里改成:SocketGroup=root 或其他存在的组
[Install]
WantedBy=sockets.target
https://blog.csdn.net/zdx1515888659/article/details/100103373 这里有详解
c) doker 还是启动失败 同时看到 code=exited, status=1/FAILURE 的错误,这个错误 是 linux 的selinux 导致的
解决办法 1、 关闭 selinux
解决办法 2、
不过我的/etc/sysconfig/ 下没有 docker这个文件 我就 使用 办法1 解决了。
附上 安装脚本如下
其中 docker-20.10.16.tgz 是自己将 2 中在 /usr/bin 下需要的文件打的包 目录名是 docker , 其他的 这个目录下需要的文件 /usr/lib/systemd/system/,和 docker-20.10.16.tgz
这个文件放在同一级目录,可以看到脚本还有 docker.socker 文件以及其他没有拷贝的文件,可以自己 先添加到脚本里。
cd $(dirname $0) currentscript="$0" currentdir="`pwd`" docker --version if [ $? = 0 ];then echo "docker 已安装,本次安装忽略....." else tar -zxvf docker-20.10.16.tgz && cp docker/* /usr/bin/ && mkdir -p /etc/docker && cp daemon.json /etc/docker/ && cp docker.service /usr/lib/systemd/system/ fi deadCount=$(systemctl status docker | grep Active | grep dead |wc -l) #启动 if [ $deadCount -gt 0 ];then echo "启动 docker" systemctl daemon-reload && systemctl start docker && systemctl status docker.service && chkconfig docker on newdeadCount=$(systemctl status docker | grep Active | grep running |wc -l) if [ $newdeadCount -gt 0 ];then echo "docker 安装成功,已启动" else echo "docker 安装失败,启动失败" fi else echo "docker 服务已启动过,本次安装忽略....." fi #结束