解决 docker exec 报错 Error response from daemon: Container XXXXX is not running

docker exec 报错 Error response from daemon: Container XXXXX is not running 解决思路

XXXXX 为报错容器idnginx

问题描述

废话很少说,直奔主题~~web

我出现本文讨论的这个问题的场景是:redis

使用本身手动编写的Dockerfile,构建redis4镜像,构建镜像过程无任何报错。
经过docker run基于上一步构建的redis4镜像建立容器redis4,也建立成功,无任何报错。docker

[root@iZ2ze571fco0kt6i4nui21Z redis]# docker run -itd -p 6389:6379 -v /wp/ss.redis.p/redis/conf:/usr/src/redis/conf --name redis4 redis:v4.0.11
cfe75fa3b2363049f147f42d9848d8f486e3f6bed5c36526100bda0886a22e4a

经过docker ps查询容器列表,发现没有redis4容器,结果以下bash

[root@iZ2ze571fco0kt6i4nui21Z redis]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
e04084a150f5        nginx:v1.14.1       "/usr/local/nginx/sb…"   19 hours ago        Up 19 hours         0.0.0.0:8001->80/tcp   nginx1.14.1

经过docker ps -a 查询全部容器列表,结果以下tcp

[root@iZ2ze571fco0kt6i4nui21Z redis]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                  NAMES
cfe75fa3b236        redis:v4.0.11       "/usr/local/bin/redi…"   15 seconds ago      Exited (1) 14 seconds ago                          redis4
e04084a150f5        nginx:v1.14.1       "/usr/local/nginx/sb…"   19 hours ago        Up 19 hours                 0.0.0.0:8001->80/tcp   nginx1.14.1

发现问题所在 =》 redis4容器的STATUS为Exit…

网传解决办法 docker start redis4,但依然没法启动redis4容器,问题不能解决svg

尝试运行docker exec进入redis4容器,就出现了本文出现的问题ui

[root@iZ2ze571fco0kt6i4nui21Z redis]# docker exec -it redis4 bash
Error response from daemon: Container cfe75fa3b2363049f147f42d9848d8f486e3f6bed5c36526100bda0886a22e4a is not running

解决思路

常规思路(没法解决)

  1. docker start 容器,不能解决问题
  2. docker logs 容器,也看不到报错信息

本身动脑,才是根本(真知)

从调测Dockerfile入手,先想办法执行并进入容器

1、 容器未运行,很明显容器启动后并未运行一个前台挂起的进程,对于redis而言猜想是启动redis的命令出了问题,以此为线索,继续思考
2、 如何能让容器启动后【挂起】呢?首先要保证Dockerfile的启动redis的方式为CMD,这样咱们尝试启动容器的时候,将其替换为top 或 bash(alpine为sh),果真这样我进入到了容器~~ =》 突破性进展啊
3、 很容易经过命令ps查看到redis未启动,而后查redis日志,就找到了错误缘由
[root@iZ2ze571fco0kt6i4nui21Z redis]# docker exec -it redis43 sh
/ # tail -20 /var/log/redis/redis.log 
13:C 05 Jun 12:26:20.511 # Can't chdir to '/var/lib/redis': No such file or directory
15:C 05 Jun 12:26:57.182 # Can't chdir to '/var/lib/redis': No such file or directory

最终,查到原来不是Dockerfile有问题,而是redis的配置文件有问题(配置项dir的路径配置错误致使)

总结
个人思路也许并不能解决您的问题,可是我写这边博文的目的是【授人以渔】spa