前言

接上篇 《记一次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. vue + iview 怎样在vue项目下添加ESLint

    参考:https://segmentfault.com/a/1190000012019019?utm_source=tag-newest 使用iview框架的MenuGroup标签,vscode报红, ...

  2. windows编译boost

    1. https://www.boost.org 下载boost源码 boost_1_73_0.zip解压. 2.准备编译前的配置,打开vs2017 x86 CMD工具,进入目录boost_1_73_ ...

  3. 梯度下降做做优化(batch gd、sgd、adagrad )

    首先说明公式的写法 上标代表了一个样本,下标代表了一个维度: 然后梯度的维度是和定义域的维度是一样的大小: 1.batch gradient descent: 假设样本个数是m个,目标函数就是J(th ...

  4. 你不知道的echarts,前端鲍哥带你研究!

    前言 相信不少前端小伙伴刚接触 e-charts 肯定有点陌生,但是echarts咱不清楚,charts我们应该很熟悉,没错,echarts 就是我们日常可见的图表,不同的是 echarts 是用代码 ...

  5. 接上一篇安装linux问题,解决redis安装后make test错误

    (file "tests/helpers/bg_complex_data.tcl" line 10) Killing still running Redis server 3987 ...

  6. 用C++实现的增强Eratosthenes筛法程序

    运行示例 PS H:\Read\num\x64\Release> .\eSievePro Eratosthenes sieve: a method to find out all primes ...

  7. HCNP Routing&Switching之OSPF外部路由类型以及forwarding address

    前文我们了解了OSPF的4类.5类LSA,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15222969.html:今天我们来聊一聊外部路由类型和forward ...

  8. Python中的私有属性私有方法、类属性类方法以及单例设计模式

    私有属性是对象不希望公开的属性,私有方法是对象不希望公开的方法.在定义私有属性和私有方法时,在属性或者方法前,加上__(两个下划线) 公有方法可以通过对象名直接调用,私有方法不能通过对象名直接调用,只 ...

  9. 【Spring 持久层】Spring 与 Mybatis 整合

    持久层整合总述 1.Spring 框架为什么要与持久层技术进行整合? JavaEE开发需要持久层进行数据库的访问操作 JDBC.Hibernate.MyBatis 进行持久开发过程存在大量的代码冗余 ...

  10. Android kotlin http url request

    kotlin.concurrent.thread{ val url = "https://hangj.cnblogs.com/" val res = try { java.net. ...