【问题标题】:Docker commands do not respond anymoreDocker 命令不再响应
【发布时间】:2017-04-09 18:15:48
【问题描述】:

大多数 docker 命令永远不会结束。我必须用 CTRL+C 手动打断他们。即使是像docker psdocker info 这样的简单命令也不会响应。

但是,docker helpdocker version 仍然有效。

我认为特定容器存在类似死锁的情况,因此与容器相关的命令无法完成。

遇到这种情况怎么办?


我的 docker 版本是 1.12.3。我不使用 Swarm 模式。 docker logs 命令也不起作用。使用dmesg可以看到很多I/O错误,不知道是不是和我的问题有关:

[12898.121287] loop: Write error at byte offset 8882749440, length 4096.
[12898.122837] loop: Write error at byte offset 8883666944, length 4096.
[12898.124685] loop: Write error at byte offset 8882814976, length 4096.
[12898.126459] loop: Write error at byte offset 8883404800, length 4096.
[12898.128201] loop: Write error at byte offset 8883470336, length 4096.
[12898.129921] loop: Write error at byte offset 8883535872, length 4096.
[12898.131774] loop: Write error at byte offset 8883601408, length 4096.
[12898.133594] loop: Write error at byte offset 8883732480, length 4096.
[12917.269786] loop: Write error at byte offset 8883798016, length 4096.
[12917.270331] quiet_error: 632 callbacks suppressed
[12917.270334] Buffer I/O error on device dm-6, logical block 1313320
[12917.270540] lost page write due to I/O error on dm-6
[12917.270543] Buffer I/O error on device dm-6, logical block 1313321
[12917.270740] lost page write due to I/O error on dm-6
[12917.270742] Buffer I/O error on device dm-6, logical block 1313322
[12917.270957] lost page write due to I/O error on dm-6
[12917.270959] Buffer I/O error on device dm-6, logical block 1313323
[12917.271177] lost page write due to I/O error on dm-6
[12917.271179] Buffer I/O error on device dm-6, logical block 1313324
[12917.271377] lost page write due to I/O error on dm-6
[12917.271379] Buffer I/O error on device dm-6, logical block 1313325
[12917.271573] lost page write due to I/O error on dm-6
[12917.301759] loop: Write error at byte offset 8883863552, length 4096.
[12917.312038] loop: Write error at byte offset 8883929088, length 4096.
[12917.312396] Buffer I/O error on device dm-6, logical block 1313328
[12917.312635] lost page write due to I/O error on dm-6
[12917.312638] Buffer I/O error on device dm-6, logical block 1313329
[12917.312867] lost page write due to I/O error on dm-6
[12917.312869] Buffer I/O error on device dm-6, logical block 1313330
[12917.313121] lost page write due to I/O error on dm-6
[12917.313123] Buffer I/O error on device dm-6, logical block 1313331
[12917.313346] lost page write due to I/O error on dm-6
[13090.853726] INFO: task kworker/u8:0:17212 blocked for more than 120 seconds.
[13090.854055] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.

使用命令sudo systemctl status -l docker,会打印以下消息,但我无法判断它们是否相关:

dockerd[1344]: time="2016-11-24T17:49:01.184874648+01:00" level=warning msg="libcontainerd: container c9f35af1836bf856001ca6156663f713c1217a697e8d2451927c67797fb5a770 restart canceled"
dockerd[1344]: time="2016-11-24T17:49:02.627116016+01:00" level=info msg="No non-localhost DNS nameservers are left in resolv.conf. Using default external servers : [nameserver 8.8.8.8 nameserver 8.8.4.4]"
dockerd[1344]: time="2016-11-24T17:49:02.627152661+01:00" level=info msg="IPv6 enabled; Adding default IPv6 external servers : [nameserver 2001:4860:4860::8888 nameserver 2001:4860:4860::8844]"
dockerd[1344]: time="2016-11-24T18:19:51.472701647+01:00" level=warning msg="libcontainerd: container c9f35af1836bf856001ca6156663f713c1217a697e8d2451927c67797fb5a770 restart canceled"
dockerd[1344]: time="2016-11-24T18:19:56.712126199+01:00" level=info msg="No non-localhost DNS nameservers are left in resolv.conf. Using default external servers : [nameserver 8.8.8.8 nameserver 8.8.4.4]"
dockerd[1344]: time="2016-11-24T18:19:56.712159759+01:00" level=info msg="IPv6 enabled; Adding default IPv6 external servers : [nameserver 2001:4860:4860::8888 nameserver 2001:4860:4860::8844]"
dockerd[1344]: time="2016-11-24T18:34:24.301786606+01:00" level=info msg="No non-localhost DNS nameservers are left in resolv.conf. Using default external servers : [nameserver 8.8.8.8 nameserver 8.8.4.4]"
dockerd[1344]: time="2016-11-24T18:34:24.302208751+01:00" level=info msg="IPv6 enabled; Adding default IPv6 external servers : [nameserver 2001:4860:4860::8888 nameserver 2001:4860:4860::8844]"

【问题讨论】:

  • 我们不了解您的容器,因此无法为您提供帮助。
  • 你能提供更多关于你如何设置你的 docker 守护进程的细节吗?例如,您是否使用 1.12.3 运行 Swarm 模式?你运行了多少经理?如果在本地只有一个,日志在说什么?等
  • @abronan 我编辑以添加更多信息。我希望它会有所帮助。
  • 当 Docker 守护进程崩溃时,这是正常的一般情况。它应该有关于如何重新启动/终止进程的具体答案。

标签: docker


【解决方案1】:

从您出现的症状来看,我似乎也遇到了一些困难。 我做了以下,希望对您有所帮助!

检查后服务没有成功响应,使用:

system status docker.service

我使用以下命令使其工作:

sudo dockerd --debug

【讨论】:

    【解决方案2】:

    我遇到了同样的问题(命令没有响应),我通过增加分配给 Docker 的资源来解决它。

    Docker 桌面 -> 首选项 -> 高级

    就我而言,我增加了:

    • 内存从 2GB 到 8GB
    • 从 1GB 交换到 2GB

    根据您的机器尝试不同的值。

    【讨论】:

      【解决方案3】:

      我也遇到了类似的问题。重新启动服务器对我不起作用。我遇到了这个问题,因为我刚刚安装了一个带有某种错误的新容器。之后,大多数 Docker 命令都没有响应。我通过执行以下命令修复了它:

      docker system prune -a
      

      这会删除所有未使用的容器。就我而言,也是我刚刚添加的容器。更多信息:

      https://docs.docker.com/engine/reference/commandline/system_prune/

      【讨论】:

        【解决方案4】:

        删除容器后出现 Docker 命令挂起的错误。

        守护进程 dockerd 处于异常状态:在停止 (service docker stop) 后无法启动 (sudo service docker start)。

        # sudo service docker start
        Redirecting to /bin/systemctl start docker.service
        Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
        
        # journalctl -xe
        kernel: device-mapper: ioctl: unable to remove open device docker-253:0-19468577-d6f74dd67f106d6bfa483df4ee534dd9545dc8ca
        ...
        systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
        systemd[1]: Failed to start Docker Application Container Engine.
        systemd[1]: Unit docker.service entered failed state.
        systemd[1]: docker.service failed.
        polkitd[896]: Unregistered Authentication Agent for unix-process:22551:34177094 (system bus name :1.290, object path /org
        ESCESC
        kernel: dev_remove: 41 callbacks suppressed
        kernel: device-mapper: ioctl: unable to remove open device docker-253:0-19468577-fc63401af903e22d05a4518e02504527f0d7883f9d997d7d97fdfe72ba789863
        ...
        dockerd[22566]: time="2016-11-28T10:18:09.840268573+01:00" level=fatal msg="Error starting daemon: timeout"
        systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
        systemd[1]: Failed to start Docker Application Container Engine.
        

        此外,使用ps -eax | grep docker(“STAT”列中存在“Z”)可以观察到许多僵尸 Docker 进程,例如 docker-proxies。

        重新启动服务器并重新启动 Docker 后,僵尸进程消失了,Docker 命令再次运行。

        【讨论】:

        • 我碰巧遇到了同样的问题。问题是我无法重新启动服务器。我该如何进行?
        • 即使挂了我也重启了
        猜你喜欢
        • 2018-11-29
        • 2016-12-25
        • 2020-12-15
        • 2021-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多