吐槽
因为工作原因,公司的对接政府项目,必须使用国产服务器。那么痛苦由此产生,所谓的国产系统,就是在二次开发的时候加上各种权限限制,而他们改了包名导致在安装yum或者rpm出现了各种依赖问题。(本人被这个依赖问题,搞得苦不堪言)。例如 CentOS7 的 rpm 包标识为 el7 麒麟上面则改成了 ky10,在安装一些软件时由于依赖问题导致同名包安装不上,如果卸载系统上已有包可能会出现系统某些软件服务出现问题,如果不卸载则只能带上痛苦面具去解决冲突。
据说银河麒麟基于 CentOS7,但是通过测试最终添加 CentOS8 的源才可以用,因为他喵的 CentOS7 只有 x86_64,而 CentOS8 才有 aarch64,厂商的话都信不得哦。手动配置了 CentOS7 的源后,yum makecache 可以正常缓存,但是 yum -y update 会出现多个依赖错误问题,通过 yum -y install <package-name> 可以安装软件,但是依赖问题依然很难受。
最终在配置好 CentOS7与 Docker-ce 官方源后由于依赖问题放弃了通过 yum 在线安装,直接下载如下 rpm 包安装依然不行。
方案一 在线下载安装Docker
1. 添加阿里源
wget -O /etc/yum.repos.d/CentOS-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
2. 添加Docker源
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
在安装 docker 的时候,需要注意修改 docker-ce.repo文件
和 Centos-7.repo
文件内 $releasever
批量替换成 7,
原因是在麒麟服务器操作系统V10中 $releasever
被修改为了 10,而我们需要使用 centos 7的镜像源,如果你不替换,基本上仓库的每一个地址都是404
3. 替换$releasever
sudo sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS-7.repo
sudo sed -i 's/$releasever/7/g' /etc/yum.repos.d/docker-ce.repo
4. 建立yum缓存
yum makecache
5. 配置daemon.json
文件位置 /etc/docker/daemon.json
{
"registry-mirrors":[
"https://pee6w651.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
],
"data-root":"/data/docker",
"log-driver":"json-file",
"log-opts":{
"max-size":"200m","max-file":"3"
}
}
重新加载daemon.json文件
sudo systemctl daemon-reload
安装Docker
官网链接 https://docs.docker.com/engine/install/centos/
6. 移除Docker的历史版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
7. 安装 yum-utils
软件包
sudo yum install -y yum-utils
8. Docker CE 仓库添加到 YUM 包管理器中
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
执行时出现 以下错误
[root@localhost /]# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Traceback (most recent call last):
File "/usr/bin/yum-config-manager", line 6, in <module>
import yum
ImportError: No module named yum
如果你没有出现这个报错恭喜你了,你可以直接调到 9.启动Docker
不用再这里浪费时间。
那我们看看这个报错原因和解决办法
报错显示在导入yum时提示没有yum这个包,但是不可能没有啊,本着打破砂锅问到底的态度,去度娘了好多。
根本原因:yum是python写的,所以执行yum需要python,查看系统安装的Python,有多个版本
[root@localhost /]# whereis python
python: /usr/bin/python /usr/bin/python2.6 /usr/bin/python2.6-config /usr/lib/python2.6 /usr/lib64/python2.6 /usr/local/bin/python2.7 /usr/local/bin/python /usr/local/bin/python2.7-config /usr/local/lib/python2.7 /usr/include/python2.6 /usr/share/man/man1/python.1.gz
这我们就明白了,是因为Python的版本冲突导致。
输入Python,查看使用的版本,Python指向 2.7版本
[root@localhost /]# python
Python 2.7.16 (default, Jul 9 2020, 06:37:01)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
查看Python的软链接
[root@localhost /]# ll /usr/bin/ | grep python
-rwxr-xr-x 1 root root 20200 6月 19 2018 abrt-action-analyze-python
lrwxrwxrwx 1 root root 24 7月 12 2018 python -> /usr/local/bin/python2.7
lrwxrwxrwx 1 root root 6 7月 11 2018 python2 -> python
-rwxr-xr-x 2 root root 9032 8月 18 2016 python2.6
-rwxr-xr-x 2 root root 9032 8月 18 2016 python2.6.6
-rwxr-xr-x 1 root root 1418 8月 18 2016 python2.6-config
实际python指向了2.7版本。而yum的python版本呢?
[root@localhost /]# cat /usr/bin/yum
#!/usr/bin/python2.6
import sys
try:
import yum
except ImportError:
print >> sys.stderr, """\
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:
所以现在很清楚了,用yum执行config命令时,yum本身的python是2.6版本的,而执行的config却指向2.7,所以报错了。
怎么办?要么改yum的python版本,要么改config的,试试修改config
[root@localhost /]# vi /usr/bin/yum-config-manager
#!/usr/bin/python2.6 -tt
再次执行 执行成功
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装 Docker 引擎、CLI 和 containerd.io
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
9.启动Docker
sudo systemctl start docker
查看是否启动成功
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
到这一步恭喜你,你的Docker已经安装成功了!
已经看到这里了,点个赞在走呗
如果这种方式没有帮到你,请看下一篇文章
Docker 离线安装 !!!