如果来自守护进程的错误响应是:Cannot Kill Container [...] 权限被拒绝,如何停止运行容器?

Posted

技术标签:

【中文标题】如果来自守护进程的错误响应是:Cannot Kill Container [...] 权限被拒绝,如何停止运行容器?【英文标题】:How to stop running Container, if error response from daemon is: Cannot Kill Container [...] permission denied? 【发布时间】:2019-06-14 05:25:29 【问题描述】:

艰巨的任务: 每次我尝试停止或终止正在运行的容器时,我都会收到来自 Daemon 的错误响应,即权限被拒绝。

我刚开始通过 Ubuntu18.04 虚拟机学习如何使用 docker。我第一次运行容器。我无法阻止它,但至少它正在运行。现在,在我尝试运行另一个图像“furtuas/daisitory:image_available_first_ms”之后,一切都变得更糟了。 两个容器正在运行,我无法停止它们。 我尝试重新启动 docker,但容器仍在运行,不同之处在于 localhost 不再工作。 也许它发生在我之前在同一个主机上运行之前发生的事情

我不熟悉 docker、ubuntu、终端等。希望为初学者详细解答

$ docker info
Containers: 2
 Running: 2
 Paused: 0
 Stopped: 0
Images: 8
Server Version: 18.09.1
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9754871865f7fe2f4e74d43e2fc7ccd237edcbce
runc version: 96ec2177ae841256168fcf76954f7177af9446eb
init version: fec3683
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 4.15.0-43-generic
Operating System: Ubuntu 18.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 3.83GiB
Name: dai-2
ID: ULKT:IYPB:L6GI:VQWG:FZQX:J6G6:OWOU:DP5M:KQFC:PWBJ:HEMA:VDIT
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Username: icoe
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine

WARNING: No swap limit support




$ docker version
Client:
 Version:           18.09.1
 API version:       1.39
 Go version:        go1.10.6
 Git commit:        4c52b90
 Built:             Wed Jan  9 19:35:31 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.1
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       4c52b90
  Built:            Wed Jan  9 19:02:44 2019
  OS/Arch:          linux/amd64
  Experimental:     false





$ docker images
REPOSITORY                      TAG                        IMAGE ID            CREATED             SIZE
furtuas/daisitory     image_available_first_ms   64b3943856a0        6 days ago          660MB
icoe/dockerimageavailable   first_ms                   64b3943856a0        6 days ago          660MB
dockerimageavailable            latest                     64b3943856a0        6 days ago          660MB
my-maven                        latest                     704b027074fb        6 days ago          660MB
dockerimagedetails              latest                     2da0a7987c2a        6 days ago          643MB
dockerimage                     latest                     af97e6623a8c        6 days ago          643MB
maven                           latest                     3bc97dc2e7ba        3 weeks ago         832MB
java                            8                          d23bdf5b1b1b        2 years ago         643MB





$ docker ps
CONTAINER ID        IMAGE                                                  COMMAND                  CREATED             STATUS              PORTS                    NAMES
66c6c49a95f4        furtuas/daisitory:image_available_first_ms   "java -jar /car-pool…"   3 hours ago         Up 3 hours                                   first_ms_test
8e0646cc95f8        704b027074fb                                           "java -jar /car-pool…"   6 days ago          Up 6 days           0.0.0.0:8080->8080/tcp   container_available





$ docker stop first_ms_test 
Error response from daemon: cannot stop container: first_ms_test: Cannot kill container 66c6c49a95f499abeb62b1c02e7e9b8ce1739709bb2140ba7b1a61094a9d16f7: unknown error after kill: runc did not terminate sucessfully: container_linux.go:387: signaling init process caused "permission denied"
: unknown




$ docker container rm -f first_ms_test 
Error response from daemon: Could not kill running container 66c6c49a95f499abeb62b1c02e7e9b8ce1739709bb2140ba7b1a61094a9d16f7, cannot remove - Cannot kill container 66c6c49a95f499abeb62b1c02e7e9b8ce1739709bb2140ba7b1a61094a9d16f7: unknown error after kill: runc did not terminate sucessfully: container_linux.go:387: signaling init process caused "permission denied"
: unknown

请帮忙。

$ docker ps -a
CONTAINER ID        IMAGE                                                  COMMAND                  CREATED             STATUS              PORTS                    NAMES
66c6c49a95f4        furtuas/daisitory:image_available_first_ms   "java -jar /car-pool…"   3 hours ago         Up 3 hours                                   first_ms_test
8e0646cc95f8        704b027074fb                                           "java -jar /car-pool…"   6 days ago          Up 6 days           0.0.0.0:8080->8080/tcp   container_available

注销VM后,还是一样的响应:

$ docker stop 66c6c49a95f4
Error response from daemon: cannot stop container: 66c6c49a95f4: Cannot kill container 66c6c49a95f499abeb62b1c02e7e9b8ce1739709bb2140ba7b1a61094a9d16f7: unknown error after kill: runc did not terminate sucessfully: container_linux.go:387: signaling init process caused "permission denied"
: unknown

【问题讨论】:

大多数报告此问题的都是在 CentOS/RHEL 上使用阻止 docker 的 SELinux 策略。与 Ubuntu 中的等价物是 AppArmor。我建议使用 AppArmor 重新标记问题,以引起可能能够协助调试该方面的人的注意。 谢谢@BMitch 的提示 【参考方案1】:

您尝试过docker stop <container-id>docker kill <container-id> 吗?

注意:使用docker ps -a 获取容器ID

另外,您使用的是sudo 还是登录为root

【讨论】:

@icoe 你登录为root吗? 如果通过systemctl restart docker重新启动docker不起作用,请尝试重新启动主机操作系统。如果这仍然不起作用,您可能有一个特殊情况,或者它可能与我不太熟悉的 AppAmor 有关。 我再次登录虚拟机并收到相同的错误消息。需要关机吗? @icoe 好吧,在这一点上,我会重新启动主机,但如果重新启动对您来说不是一个可行的选择,您可能需要等待其他答案。【参考方案2】:

我解决了,但我不知道为什么。我想我通过重新启动 VM 并使用这些命令重新启动 docker 解决了这个问题

刷新更改:$ sudo systemctl daemon-reload 重启 Docker:$ sudo systemctl restart docker

【讨论】:

我遇到了同样的问题。这些命令都没有为我解决它。 @wsams 重新启动 docker 后,您必须删除旧容器并创建新容器。它对我有用。【参考方案3】:

我遇到了同样的问题。与 apparmor 服务存在一些冲突。在 Ubuntu 上,我可以通过重新安装 apparmor 来解决这个问题:

- sudo apt-get purge apparmor
- sudo apt-get install apparmor
- sudo /etc/init.d/apparmor start

【讨论】:

警告:sudo apt-get purge apparmor 删除了我所有的 snap 包 当心!!在 2 个地方看到此建议后,我也设法删除了所有 myh snap 包。【参考方案4】:

如here 所述,检查入口点脚本是否有shebang 开头:

#!/bin/bash -xe

系统会阻止容器停止。为了解决这个问题,你的入口点脚本不带“e”

#!/bin/bash -x

【讨论】:

【参考方案5】:

使用技巧:

sudo killall docker-containerd-shim

docker从像这样卡住的停止容器中释放出来

【讨论】:

【参考方案6】:

这可能是由 Ubuntu 的安全性引起的,尤其是 apparmor

在这种情况下,您应该添加到 docker run --security-opt apparmor:unconfined。这似乎比移除 Apparmor 更可取。

例如试试:

docker run --security-opt apparmor:unconfined -ti ubuntu bash

然后尝试docker stop 看看它是否有效!

【讨论】:

以上是关于如果来自守护进程的错误响应是:Cannot Kill Container [...] 权限被拒绝,如何停止运行容器?的主要内容,如果未能解决你的问题,请参考以下文章

docker:来自守护进程的错误响应:grpc:连接不可用

来自守护进程的错误响应:无法停止容器 - 信号 init 进程导致“权限被拒绝”

Docker 抛出 FATA [0000] 来自守护进程的错误响应

Gitlab管道失败:错误:准备失败:来自守护进程的错误响应:toomanyrequests

来自守护进程的 Docker 错误响应:“冲突……容器已在使用”

docker:来自守护进程的错误响应:无法选择设备驱动程序“”具有功能:[[gpu]]