Docker命令无响应,卡住不动。

21
Docker守护程序运行正常,但是当我执行docker images、docker ps等命令时,docker会无限期地挂起而没有任何输出。这种情况昨晚还没有发生,真是让我抓狂。
我已经尝试在我的AWS Linux AMI上重新安装docker,但没有成功。我还尝试了sudo service docker restart命令,但也没有解决问题。如果有人遇到过类似情况或有任何建议,请分享一下。
实例信息:
NAME="Amazon Linux AMI"
VERSION="2016.09"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2016.09"
PRETTY_NAME="Amazon Linux AMI 2016.09"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2016.09:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
Amazon Linux AMI release 2016.09

Docker版本:
Docker version 1.11.2, build b9f10c9/1.11.2

3
很可能它卡在了一个系统调用上,您可以使用 strace -f docker ps 命令查看它卡在哪里。这可以提示出问题的原因。 - MIE
@MIE,当运行该命令时,我应该注意什么?我如何识别出卡顿的原因? - cwiggo
6个回答

12

我知道这个问题有点老了,但是要解决这个问题,请尝试删除以下内容:

/var/run/docker/libcontainerd

1
太棒了!节省了很多时间!! - Kirity
在执行此操作后需要重新启动吗? - aroth
2
不是的,但希望你现在不再等待答案 :) - ishaaq
2
在我的机器上,我发现 /var/run/docker/containerd 是相同的吗? - Yogesh Jilhawar
57
这个答案可以通过解释我们将要删除什么来改进。 - glaux
1
我在 Big Sur 和 Docker 3.0.1 上没有那个文件夹 (/var/run/docker),但是暂时删除文件 /var/run/docker-cli.sock 和 /var/run/docker.sock 并将它们恢复(即删除和撤消删除)解决了我的问题。 - flygge

4

https://forums.docker.com/t/what-to-do-when-all-docker-commands-hang/28103/4

由korayhk发表:

你无需重新安装或删除容器镜像数据。只需执行以下步骤:

先停止服务

sudo service docker stop

根据Sam在上面的帖子中提到的内容,清理一些文件。

sudo rm -rf /var/run/docker
sudo rm /var/run/docker.*"

现在启动服务

sudo service docker start

启动您的Docker镜像

docker start <container-name>

第一次运行docker run将会收到错误信息:
来自守护进程的错误响应: 无效的标头字段值 "oci runtime error: container with id exists: 7a244b8f5d07081538042ff64aebfe11fac1a36731526e77be53db7d94dca44d\n" 错误:容器启动失败。
尝试再次运行docker start命令。您会神奇地看到您的容器已经顺利地启动了,没有任何错误。

此外,您可能需要卸载netns。请参考medium.com文章中的umount /var/run/docker/netns/default - DaMaxContent
还要小心删除docker.socket文件,尤其是使用类似Portainer的工具时,不要用sudo rm /var/run/docker.*命令。守护进程和API之间存在竞争条件,允许Portainer(以及其他工具)将套接字重新创建为目录而不是套接字:https://github.com/moby/moby/issues/30348 - DaMaxContent

2

我遇到了同样的问题。尝试了这里列出的所有建议。多次重新安装docker,删除不同的文件夹。

有趣的是,以root用户身份运行命令可以正常工作:

sudo docker version

所以我决定这可能与我Linux账户的本地设置有关。重命名或删除文件夹~/.docker 对我有所帮助。

该文件夹包含一些与docker context相关的配置。可能设置了远程上下文。


对我来说,这是一个无法在没有VPN的情况下访问的远程环境。一旦断开VPN连接,甚至docker --help都无法运行! - evod
...而且我刚刚意识到,只有在问题出现的远程上下文被设置为默认时才会发生这种情况。 - evod

1
我尝试了Garreth和steamfood提供的两个答案,但不想像Invincible建议的那样重新安装docker。我没有在系统上做任何更改,所以认为问题必须与我的配置/容器设置有关,而不是docker本身的安装问题。
当运行systemctl start docker或任何其他启动或停止docker服务的命令时,在我的日志中会出现以下内容(在另一个终端中运行systemctl status docker):
Loading containers: start.
Container ef06fbb157169332c453f503bb2543ce914daf54600f8fa44699fa5833d9eb90 failed to exit
此后它会挂起。
为了解决这个问题,我首先使用sudo kill -9 $PID杀死了systemctl status docker中识别出的进程。
然后,我使用sudo rm -rf /var/lib/docker/containers/*删除了/var/lib/docker/containers中的所有内容。
这清除了有问题的容器,从那时起一切正常。

1

我将我的Ubuntu更新到5.8.0-34-generic后,遇到了类似的问题。在尝试了各种解决方法后,我最终的解决方案是将docker降级到之前的工作版本。步骤如下:

  1. 杀死docker进程
root@LT01:~# killall dockerd
root@LT01:~# ps -aux | grep dockerd
root@LT01:~# kill -9 your docker pid
  1. 卸载 Docker CE、CLI 和 container.io。
root@LT01:/home/xyz# apt remove docker-ce docker-ce-cli containerd.io
  1. 可选步骤:我的 dockerd 不断重启,所以我不得不禁用它。如果你也遇到同样的问题,重新安装后需要启用它:
systemctl disable docker
检查以前的版本:
root@LT01:/home/xyz# apt-cache madison docker-ce
  1. 从上面的列表中安装旧版本,对我来说是docker-ce 5:19.03.13~3-0~ubuntu-focal
root@LT01:/home/xyz# apt install docker-ce=5:19.03.13~3-0~ubuntu-focal
  1. 可选:如果您需要降级 containerd.io 和 cli,则执行以下操作:
apt install docker-ce=5:19.03.13~3-0~ubuntu-focal containerd.io=1.3.9-1 docker-ce-cli=5:19.03.13~3-0~ubuntu-focal
检查您的安装:
whereis docker

systemctl status docker
我已经将我的Docker标记为不会在apt升级命令中进行升级。

我在 Fedora 上遇到了相同的问题,不得不降级到 docker-ce-3:19.03.13-3.fc32.x86_64。 - Headchopperz

0

在我的情况下,问题是由于子进程仍在运行或父进程正在监视其子进程而引起的。

  • 检查是否有僵尸进程 -> ps -ef | grep defunct
  • 现在需要杀死这些进程 -> kill -9 PID PPID
  • 然后刷新或重新启动终端。这对我解决了问题。

还要检查 -> https://dev.to/jeden/killing-a-defunct-process-7od


你能修正这个错别字吗 - grept - x4444

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接