docker run和docker exec报错context deadline exceeded

现象描述
docker run -d centos:v1 /bin/bash创建容器或者docker exec -it container_name bash进入容器,都会报错“usrbindocker-current Error response from daemon:shim error.context deadline exceeded.”,docker ps、docker stats、docker info等命令均可用
基础环境
物理机操作系统:CentOS Linux release 7.3.1611 (Core)
内核版本:3.10.0-693.el7.x86_64;该内核版本已修复单机最多跑100个容器(否则触发xfs文件系统bug导致机器自动重启)的bug
Docker version:
Client:
Version: 1.12.6
API version: 1.24
Package version: docker-common-1.12.6-16.el7.centos.x86_64
Go version: go1.7.4
Git commit: 3a094bd/1.12.6
Built: Fri Apr 14 13:46:13 2017
OS/Arch: linux/amd64

Server:
Version: 1.12.6
API version: 1.24
Package version: docker-common-1.12.6-16.el7.centos.x86_64
Go version: go1.7.4
Git commit: 3a094bd/1.12.6
Built: Fri Apr 14 13:46:13 2017
OS/Arch: linux/amd64
Docker info:
Containers: 68
Running: 39
Paused: 0
Stopped: 0
Images: 38
Server Version: 1.12.6
Storage Driver: devicemapper
Pool Name: docker-253:0-3222085682-pool
Pool Blocksize: 65.54 kB
Base Device Size: 10.74 GB
Backing Filesystem: xfs
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 23.86 GB
Data Space Total: 107.4 GB
Data Space Available: 83.51 GB
Metadata Space Used: 48.09 MB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.099 GB
Thin Pool Minimum Free Space: 10.74 GB
Udev Sync Supported: true
Deferred Removal Enabled: false
Deferred Deletion Enabled: false
Deferred Deleted Device Count: 0
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
WARNING: Usage of loopback devices is strongly discouraged for production use. Use --storage-opt dm.thinpooldev to specify a custom block storage device.
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Library Version: 1.02.135-RHEL7 (2016-09-28)
Logging Driver: json-file
Cgroup Driver: systemd
Plugins:
Volume: local
Network: bridge host null overlay
Swarm: inactive
Runtimes: docker-runc runc
Default Runtime: docker-runc
Security Options: seccomp
Kernel Version: 3.10.0-693.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
Number of Docker Hooks: 2
CPUs: 48
Total Memory: 251.1 GiB
Name: t-docker-02-12
ID: 4OTZ:QXM3:XSQW:ZPQK:2XEF:W25W:R5DN:QL6X:RMXV:63WP:BHAB:NGPK
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Insecure Registries:
registry.sfbest.com
127.0.0.0/8
Registries: docker.io (secure)
问题分析
1.1 日志内容
docker的日志里包含大量的error,见下,
Jan 9 11:00:32 t-docker-02-12 dockerd-current: time="2018-01-09T11:00:32.482494003+08:00" level=error msg="Error running exec in container: rpc error: code = 2 desc = shim error: context deadline exceeded"
Jan 9 11:00:47 t-docker-02-12 dockerd-current: time="2018-01-09T11:00:47.540579791+08:00" level=error msg="Error running exec in container: rpc error: code = 2 desc = shim error: context deadline exceeded"
Jan 9 11:01:02 t-docker-02-12 dockerd-current: time="2018-01-09T11:01:02.581747742+08:00" level=error msg="Error running exec in container: rpc error: code = 2 desc = shim error: context deadline exceeded"
Jan 9 11:01:17 t-docker-02-12 dockerd-current: time="2018-01-09T11:01:17.614305903+08:00" level=error msg="Error running exec in container: rpc error: code = 2 desc = shim error: context deadline exceeded"
Jan 9 11:01:32 t-docker-02-12 dockerd-current: time="2018-01-09T11:01:32.658808780+08:00" level=error msg="Error running exec in container: rpc error: code = 2 desc = shim error: context deadline exceeded"
Jan 9 11:01:47 t-docker-02-12 dockerd-current: time="2018-01-09T11:01:47.702526455+08:00" level=error msg="Error running exec in container: rpc error: code = 2 desc = shim error: context deadline exceeded"
1.2 谷歌搜索
谷歌搜索“shim error: context deadline exceeded”,查到有人遇到相关问题,但是原因和解决办法没有找到,有的说是docker 1.12版本的一个bug,但是看样子文中的这个bug跟当前遇到的问题没啥关系,https://bugzilla.redhat.com/show_bug.cgi?format=multiple&id=1443103
1.3 尝试解决
1.3.1 docker exec进程
怀疑使用了大量的“docker exec -it containerid bash”命令后没有正确的退出容器,导致过多的“docker exec”进程影响了docker run和docker exec命令的使用,所以kill掉了所有的“docker exec”进程。问题没有解决。
1.3.2 docker info看到异常
Docker info:
Containers: 68
Running: 39
Paused: 0
Stopped: 0
Images: 38
一共有68个容器,但是只有39个是运行状态,其余的都是Exited状态。
然后把这些Exited状态的容器删掉,docker run和docker exec命令恢复,问题解决。
现怀疑是过多的“Exited状态”的容器导致问题的出现。
因为是测试的宿主机,所以难免会试验性的建一些可能根本起不来的容器,起不来的话就变成“Exited”状态了。
亡羊补牢
定期执行docker rm docker ps -a | grep Exited | awk ‘{print $1}‘清理一下垃圾容器;
将docker及系统日志加到elk里,检测日志内容,如果每分钟内的包含“error”的条目超过10条,就邮件报警。

原文地址:http://blog.51cto.com/10546390/2058985

时间: 2024-08-16 03:28:26

docker run和docker exec报错context deadline exceeded的相关文章

docker run VS docker exec 的区别

“docker run”和“docker exec”都是 Docker 容器中用于执行的命令.然而,在不同的情况下,它们的使用有着本质上的区别. “docker run”命令 “docker run”通常是在新创建的容器中所使用的命令. 它适用于在没有其他容器运行的情况下,您想要创建一个容器,并且要启动它,然后在其上运行一个进程.它的格式如下所示: docker run [OPTIONS] IMAGE COMMAND [ARG...] 在“docker run”命令之后,您必须通过指定镜像来创建

docker run 和 docker exec 的差异

docker run 和 docker exec 的差异 docker run :根据镜像创建一个容器并运行一个命令,操作的对象是 镜像: docker exec :在运行的容器中执行命令,操作的对象是 容器. docker run 命令 语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS说明: -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项: -d: 后台运行容器,并返回容器ID:

当使用npm run build的时候报错:TypeError: Cannot read property 'thisCompilation' of undefined

最近接手公司前端外包出去的的项目,然后在npm run build的时候遇到了两个问题. 第一点是  A complete log of this run can be found in:npm ERR!     C:\Users\90422\AppData\Roaming\npm-cache\_logs\2018-04-28T09_26_42_435Z-debug.log 这个问题很简单,主要是npm自己报错了,更新npm 即可.(奇怪的只是这个项目需要这样,其他项目并没有这个问题,所以还需要

解决CentOS7下运行docker容器时出现的报错Error resolving syscall name...

最近在研究docker!在虚拟机centos7中运行docker经常会有: [[email protected] docker]$ docker run -it lin/centos6 /bin/bash 2016/11/08 19:38:53 Error resolving syscall name execveat: could not resolve name to syscall - ignoring syscall. 2016/11/08 19:38:53 Error resolvin

window7下docker toolbox 启用数据卷报错: Error response from daemon: invalid mode:

场景:希望把d:\dockerShare文件夹作为数据卷 ,和docker中的centos镜像生成的容器关联. 原来的命令: docker run -d -it --name=edc-centos7 -v edc-centos7-vol:D:\dockershare centos:latest 报错: d:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: invalid mode: \dockershare

docker中pip install/uninstall报错

docker中pip install or uninstall报错 事件起因 今天开发同学咨询了一个问题,他说在docker的一个运行容器中执行如下命令: cd /usr/lib/python2.7/site-packages/ 该目录下有两个目录,分别是:smart_open 和 samrt_open-1.5.5-py2.7.egg-info rm -rf samrt_open-1.5.5-py2.7.egg-info/ 这时出现报错,报错信息如下: rm: cannot remove 'sm

docker删除镜像的时候报错--image has dependent child images

背景 偶然间发现服务器上有很多镜像占用不少空间,想清理一下.结果直接进行删除报错: docker rmi 8f5116cbc201 Error response from daemon: conflict: unable to delete 8f5116cbc201 (cannot be forced) - image has dependent child images 然后上网需求方法,主流的方法有两种 方法一:强制删除镜像 docker rmi -f 8f5116cbc201 Error

Docker Hello World容器运行报错的解决办法

费了好大力气从Docker官网下载了Docker Community Editor的安装镜像,Docker.dmg, 总共将近500MB,双击进行安装: 命令行里使用docker version查看版本: 然后使用命令行docker run hello-world,遇到错误信息:Error response from daemon: unauthorized: incorrect username or password: 解决方案 使用命令docker login首先进行登录: 然后hello

docker run 与docker start的区别

docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可. docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start). 而docker start的作用是,重新启动已存在的镜像.也就是说,如果使用这个命令,我们必须事先知道这个容器的ID,或者这个容器的名字,我们可以使用docker ps找到这个容器的信息. 因为容器的ID是随机