前言

接上篇 《记一次centos挂载ceph存储的坑》 服务器重做了centos7.5版本的操作系统,剩下就是安装docker,考虑yum安装耗时较长,我一般都是直接安装二进制版本docker包,下面我们看下如何离线部署docker

安装步骤

国际惯例,看说明书选版本

说明书传送门:https://docs.docker.com/engine/install/binaries/

里面有一项比较重要的说明:

Version 3.10 or higher of the Linux kernel. The latest version of the kernel available for your platform is recommended.

不过我们已经升级了centos7.5, 看了一下内核版本

uname -r
3.10.0-862.el7.x86_64

看着没有什么问题,docker二进制包下载地址:https://download.docker.com/linux/static/stable/x86_64/ ,挑来挑去,准备装前个版本最后的stable版本:docker-19.03.9.tgz,这个版本我们用的也比较多

安装步骤

解压压缩包

建个目录,我的是/home/docker,把压缩文件放在目录里,执行 tar zxvf docker-19.03.9.tgz

生成docker服务文件

cat > /etc/systemd/system/docker.service <<"EOF"
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.io [Service]
Environment="PATH=/home/docker/docker:/bin:/sbin:/usr/bin:/usr/sbin"
ExecStart=/home/docker/docker/dockerd --log-level=error -H unix:///var/run/docker.sock
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure
RestartSec=5
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Delegate=yes
KillMode=process [Install]
WantedBy=multi-user.target
EOF

生成docker配置文件

sudo iptables -P FORWARD ACCEPT
mkdir -p /etc/docker/
cat > /etc/docker/docker-daemon.json <<EOF
{
"insecure-registries":["192.xx.xx.8:5000","registry.xxx.com"],
"registry-mirrors": ["https://jk4bb75a.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn"],
"max-concurrent-downloads": 20
}
EOF

启动docker

systemctl stop firewalld && systemctl disable firewalld
/usr/sbin/iptables -F && /usr/sbin/iptables -X && /usr/sbin/iptables -F -t nat && /usr/sbin/iptables -X -t nat
/usr/sbin/iptables -P FORWARD ACCEPT
systemctl daemon-reload && systemctl enable docker && systemctl restart docker
for intf in /sys/devices/virtual/net/docker0/brif/*; do echo 1 > $intf/hairpin_mode; done
export PATH=/home/docker/docker/:$PATH

PS: export PATH=/home/docker/docker/:$PATH 可以写到/etc/profile文件中

确认docker是否正常

systemctl status docker.service 查看docker状态,确保是running。

如果有问题,修改service文件,然后重启

systemctl daemon-reload && systemctl restart docker.service

一切看起来是十分的完美,国际惯例,没病走两步,运行hello-world试下:

docker run hello-world
docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:430: container init caused \"write /proc/self/attr/keycreate: permission denied\"": unknown.
ERRO[0000] error waiting for container: context canceled

First WTF!

OCI runtime create failed 问题定位与解决

官网文档里搜一把

传送门:https://docs.docker.com/

随便点开几个看了一下,系统版本不一样,但是说的都是一个事,操作系统内核版本和docker版本不对应,升级内核或降低版本,不是说好的 3.10 内核版本是可以的吗?都正常启动了

降版本至docker-18.09.9,仍然失败

下载docker-18.09.9.tgz,解压覆盖docker文件夹,直接重启即可

一切看起来是十分的完美,没病走两步,运行hello-world试下:

docker run hello-world
docker: Error response from daemon: OCI runtime create failed: container_linux.go:xxx: starting container process caused "process_linux.go:xxx: container init caused \"write /proc/self/attr/keycreate: permission denied\"": unknown.
ERRO[0000] error waiting for container: context canceled

Double WTF!

降版本至docker-18.06.3

下载docker-18.06.3-ce.tgz,解压覆盖docker文件夹,直接重启即可

docker run --rm hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal. To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/ For more examples and ideas, visit:
https://docs.docker.com/get-started/

令人亲切的hello-world终于出来了

总结

Centos7 的内核版本默认都是3.10系列,我这边两个3.10.0-862内核版本的系统安装18.09和19.03都能正常启动,但是就是无法正常运行容器,不升级内核只能安装18.06版本,这边还有一台机器是centos7.7,内核版本是3.10.0-1062.18.1.el7.x86_6,是可以正常跑docker 19.03版本的,仅供参考,如果运行容器出现 OCI runtime create failed 优先考虑系统内核版本兼容性问题,早期的Ubuntu安装新版本的docker也有这样的问题,一般也是将版本或升级内核解决

centos7.5离线安装Docker及容器运行报OCI runtime create failed 问题定位与解决的更多相关文章

  1. [解决方案]docker: Error response from daemon: OCI runtime create failed

    错误原因 在新服务器上安装好docker后,发现无法运行,经常一顿搜索后,发现是docker安装的版本过高,最新版本docker-18.06 的核心好像没有经过充分的测试就发布了. 导致一运行,就提示 ...

  2. docker启动报错 docker: Error response from daemon: OCI runtime create failed: container_linux.go:348

    问题描述 doker启动时,报错:docker: Error response from daemon: OCI runtime create failed: container_linux.go:3 ...

  3. docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"ping\": executable file not found in $PATH": unknown.

    docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting cont ...

  4. 【Docker】runtime create failed: container_linux.go:345: 解决

    ------------------------------------------------------------------------------------------------- | ...

  5. CentOS7.6离线安装docker

    2019/10/24,docker 摘要:CentOS 7.6中离线安装docker 18.06.3以及docker-compose 1.24.1 在线安装可参照 文档 所需环境 1.CentOS 7 ...

  6. 【从零开始搭建K8S】【第一篇】CentOS7.6离线安装Docker(手动安装以及基于yum本地源安装)

    下载CentOS7.6以及最小化安装CentOS7.6版本.由于CentOS属于开源软件,在国内也有很多的mirror站点可供下载,我选择的是华为站点进行下载:http://mirrors.huawe ...

  7. ubuntu16.04 离线安装docker ce

    ubuntu离线安装 docker17.05.0-ce 离线安装 不想自己下载的小伙伴可以从以下地址下载几个软件包: 链接: https://pan.baidu.com/s/1lF7t7ciMhUnW ...

  8. Ubuntu18.04 离线安装 docker

    Ubuntu18.04 离线安装 dockerhttps://blog.csdn.net/u012814856/article/details/804231851. 将下载下来的文件夹中的 4 个文件 ...

  9. Linux下离线安装docker与fastDFS

    一.Linux下离线安装Docker 基础环境 1.操作系统:CentOS 7 2.Docker版本:docker-19.03.9.tgz 官方下载地址(打不开可能需要科学-上网) 3.官方参考文档: ...

随机推荐

  1. sql查询第10条到第20条数据

    select top(10) * from T1 where Id >= (select MAX(Id) from (select top(20) * from T1 order by Id) ...

  2. Commons-Collections(一)之list

    Bag Bag继承自Collection接口,定义了一个集合,该集合会记录对象在集合中出现的次数. 假设你有一个包,包含{a, a, b, c}.调用getCount(a)方法将返回2,调用uniqu ...

  3. 三 MongoDB进阶

    1 Limit方法 概念:查询指定数量的数据,该方法接受一个数字参数作为查询记录数的数量 举个例子:查询集合col中最多2条记录数 2 Skip方法 概念:查询到的结果集中,跳过指定数量的数据,该方法 ...

  4. [题解] P4556 [Vani有约会]雨天的尾巴

    [题解] P4556 [Vani有约会]雨天的尾巴 ·题目大意 给定一棵树,有m次修改操作,每次修改 \(( x\) \(y\) \(z )\) 表示 \((x,y)\) 之间的路径上数值 \(z\) ...

  5. vue+vant实现购物车的全选和反选业务,带你研究购物车的那些细节!

    前言 喜欢购物的小伙伴看过来,你们期待已久的购物车来啦!相信小伙伴逛淘宝时最擅长的就是加入购物车了,那购物车是如何实现商品全选反选的呢?今天就带你们研究购物车的源码,以vue+vant为例. 正文 首 ...

  6. Linux下修改mysql默认最大连接数

    liunx下修改mysql最大连接数(Centos下测试通过)1.查看当前系统下mysql设置的最大连接数方式一.mysqladmin -uroot -p variables |grep max_co ...

  7. shell脚本 批量添加删除用户

    2021-07-26 1.批量添加用户 # 编写脚本 vi add_student_50.sh # 添加用户组 student groupadd student # 添加用户 student1-stu ...

  8. 虚拟数字存储表——SQLServer2012可高用

    窗口函数之虚拟数字辅助表 数字辅助表是一个整数序列,可以用它来完成多种不同的查询任务.数字表有很多任务,如生成日期和时间值序列,及分裂值列表.通常,建议在数据库中保存这样一个永久表,并填充尽可能多的数 ...

  9. 从需求去理解 Linux dbus与基于dbus协议的无agent软件管理

    What is IPC IPC [Inter-Process Communication] 进程间通信,指至少两个进程或线程间传送数据或信号的一些技术或方法.在Linux/Unix中,提供了许多IPC ...

  10. 学习Tomcat(一)之容器概览

    Tomcat是Apache软件基金会的一个顶级项目,由Apache.Sun和其它一些公司及个人共同开发,是目前比较流行的Web服务器之一.Tomcat是一个开源的.小型的轻量级应用服务器,具有占用系统 ...