docker exec 報錯 Error response from daemon: Container XXXXX is not running 解決思路
XXXXX 爲報錯容器id
問題描述
廢話不多說,直奔主題~~
我出現本文討論的這個問題的場景是:
使用自己手動編寫的Dockerfile,構建redis4鏡像,構建鏡像過程無任何報錯。
通過docker run基於上一步構建的redis4鏡像創建容器redis4,也創建成功,無任何報錯。
[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容器,結果如下
[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 查詢所有容器列表,結果如下
[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容器,問題不能解決
嘗試運行docker exec進入redis4容器,就出現了本文出現的問題
[root@iZ2ze571fco0kt6i4nui21Z redis]# docker exec -it redis4 bash
Error response from daemon: Container cfe75fa3b2363049f147f42d9848d8f486e3f6bed5c36526100bda0886a22e4a is not running
解決思路
常規思路(無法解決)
- docker start 容器,不能解決問題
- docker logs 容器,也看不到報錯信息
自己動腦,纔是根本(真知)
從調測Dockerfile入手,先想辦法執行並進入容器
一、 容器未運行,很明顯容器啓動後並未運行一個前臺掛起的進程,對於redis而言猜測是啓動redis的命令出了問題,以此爲線索,繼續思考
二、 如何能讓容器啓動後【掛起】呢?首先要保證Dockerfile的啓動redis的方式爲CMD,這樣我們嘗試啓動容器的時候,將其替換爲top 或 bash(alpine爲sh),果然這樣我進入到了容器~~ =》 突破性進展啊
三、 很容易通過命令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的路徑配置錯誤導致)
總結
我的思路也許並不能解決您的問題,但是我寫這邊博文的目的是【授人以漁】