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

Ива*_*рёв 10 bitnami rabbitmq docker

我启动了 Docker 容器:

VirtualBox:~$ sudo docker run --name rabbitmq -d -p 0.0.0.0:5672:5672 -p 0.0.0.0:15672:15672 bitnami/rabbitmq
Run Code Online (Sandbox Code Playgroud)

一切都很好,容器正在工作。

docker  ps

CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                                                                                NAMES
dd3d12133774        bitnami/rabbitmq:latest   "/app-entrypoint.sh …"   37 minutes ago      Up 37 minutes       0.0.0.0:4369->4369/tcp, 0.0.0.0:5672->5672/tcp, 0.0.0.0:15672->15672/tcp, 0.0.0.0:25672->25672/tcp   sad_knuth
203500ee7f1e        bitnami/rabbitmq          "/app-entrypoint.sh …"   5 hours ago         Up 5 hours          0.0.0.0:5672->5672/tcp, 4369/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp                                rabbitmq
Run Code Online (Sandbox Code Playgroud)

当我使用命令时:

docker stop 203500ee7f1e
Run Code Online (Sandbox Code Playgroud)

或者

docker stop rabbitmq
Run Code Online (Sandbox Code Playgroud)

没有任何反应(错误):

VirtualBox:~$ docker stop rabbitmq
Error response from daemon: cannot stop container: rabbitmq: Cannot kill container 203500ee7f1eb09bf0ecb2fdaf2041f4da27990a3654bca90b808a3ec36238cf: unknown error after kill: docker-runc did not terminate sucessfully: container_linux.go:393: signaling init process caused "permission denied"
: unknown
Run Code Online (Sandbox Code Playgroud)

输出 Docker 版本

VirtualBox:~$ docker version
Client:
 Version:           18.06.0-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        0ffa825
 Built:             Wed Jul 18 19:09:54 2018
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.0-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       0ffa825
  Built:            Wed Jul 18 19:07:56 2018
  OS/Arch:          linux/amd64
  Experimental:     false
Run Code Online (Sandbox Code Playgroud)

输出 Docker 信息

    VirtualBox:~$ docker info
Containers: 2
 Running: 2
 Paused: 0
 Stopped: 0
Images: 2
Server Version: 18.06.0-ce
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 logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: d64c661f1d51c48782c9cec8fda7604785f93587
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 4.15.0-29-generic
Operating System: Ubuntu 18.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 3.852GiB
Name: ivanpuzyrev-VirtualBox
ID: 2LAE:PADC:VVDH:G2OW:MWUD:IRTS:CRNU:J727:DDEV:ZYBS:GTGG:SIOI
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

WARNING: No swap limit support
Run Code Online (Sandbox Code Playgroud)

请帮忙!!!没发生什么事。也许你有什么想法?

not*_*vvy 50

更新

请注意,在找出我的情况的根本原因后,我添加了另一个答案:并发docker安装 我建议您检查是否也适合您的情况,因为如果是这样,另一个答案提供了首选解决方案。


这个答案也对我使用 docker 有所帮助:

sudo aa-remove-unknown
Run Code Online (Sandbox Code Playgroud)

问题立即消失,并且docker stop将按预期再次工作。请参阅:aa-remove-unknown - 删除未知的 AppArmor 配置文件

背景

据我了解,问题原因是 docker 软件包没有在 AppArmor 服务中安装 docker 的配置文件,因此 docker 被 AppArmor 归类为“未知”。上述命令会删除所有未知应用程序的配置文件,因此它们不再受 AppArmor 的限制。

当然,正确的方法是保留未知应用程序的配置文件并为 docker 创建 AppArmor 配置文件。根据Docker 的 AppArmor 安全配置文件上的 docker 文档,“Docker 引擎守护程序的配置文件存在,但当前尚未安装”。

  • 使用“sudo aa-remove-unknown”时要非常小心,它可以删除应用程序运行所需的一整堆东西。我发现我现在无法打开 Gimp、Blender、Firefox 或 Ubuntu 桌面软件安装。我必须以某种方式把所有这些都拿回来 (2认同)

not*_*vvy 20

注意:在我最终发现我的情况的根本原因是什么之后,我决定在之前的答案之外添加这个答案。情况可能并不总是如此,所以我也保留旧答案。

\n

并发 docker 安装

\n

该问题可能是由于同时通过aptsnap安装 docker 导致的。

\n

就我而言,我通过 apt 安装了 docker,但意外地又通过 snap 进行了安装。发生这种情况是因为,在 Ubuntu 上,apt 被配置为在后台使用 snap,除非您禁用它(请参阅此答案此问题以了解如何防止这种情况)。之后,如问题中所述,“权限被拒绝”问题开始出现。

\n

如何检查

\n

为了检查是否是这种情况,请检查快照安装,如下例所示:

\n
$ sudo snap list | grep docker\ndocker  20.10.17       2285   latest/stable  canonical\xe2\x9c\x93  -\n
Run Code Online (Sandbox Code Playgroud)\n

这里我们可以看到snap已经安装了docker 20.10.17。

\n

现在检查 apt 安装情况,如下所示:

\n
$ sudo apt list --installed | grep docker\n\nWARNING: apt does not have a stable CLI interface. Use with caution in scripts.\n\ndocker-ce-cli/focal,now 5:20.10.21~3-0~ubuntu-focal amd64 [installed]\ndocker-ce-rootless-extras/focal,now 5:20.10.21~3-0~ubuntu-focal amd64 [installed,automatic]\ndocker-ce/focal,now 5:20.10.21~3-0~ubuntu-focal amd64 [installed]\ndocker-scan-plugin/focal,now 0.21.0~ubuntu-focal amd64 [installed,automatic]\n
Run Code Online (Sandbox Code Playgroud)\n

这里我们可以看到apt已经安装了docker 20.10.21。这是被执行的那个,但不知何故,快照安装干扰了它。

\n

怎么修

\n

可以通过删除快照安装来解决该问题:

\n
$ sudo snap remove docker\n
Run Code Online (Sandbox Code Playgroud)\n

就我而言,该命令将挂起。去检查:

\n
$ snap changes\nID   Status  Spawn               Ready  Summary\n6    Doing   today at 15:19 CET  -      Remove "docker" snap\n
Run Code Online (Sandbox Code Playgroud)\n

状态应为“完成”。如果它保持“正在执行”,您可以通过以下方式中止它

\n
$ sudo snap abort 6\n
Run Code Online (Sandbox Code Playgroud)\n

其中 6 是上一个命令输出的 ID 列中的数字。

\n

然后,尝试强行删除它(应该总是有效):

\n
$ sudo snap remove --purge docker\n
Run Code Online (Sandbox Code Playgroud)\n

最后,我建议重新启动并再次检查,但在删除快照安装后,Docker 通常应该立即恢复按预期工作。

\n
\n

您可能更喜欢保留 snap 安装而不是 apt 安装,后者可能同样有效,但我还没有尝试过。

\n


Vah*_*yan 12

我遇到了同样的问题,我通过使用此命令在 docker 容器中执行 shell docker exec -it imagebase bash然后发出kill 1命令来解决它。


小智 9

尝试执行这两个命令:

$ sudo systemctl restart docker.socket docker.service
$ docker rm {container_id}
Run Code Online (Sandbox Code Playgroud)


BMi*_*tch 8

我将不同意所有建议 sudo 的人。docker 命令向守护进程发送 api 调用,如果您需要 sudo 来运行该命令,您会从连接到 docker 套接字的失败中知道。守护进程本身应该以 root 身份运行。

在我看来,权限错误可能是由 AppArmor 策略引起的,也可能只是引擎/容器/运行中的错误。您还运行 Ubuntu 18.04,该版本 docker 最近才添加了支持,因此,如果可能,请尝试运行稍旧版本的 Ubuntu LTS,或者查看其中一个 Edge/nightly build 是否修复了该问题。在短期内,您可能有幸重新启动 docker 引擎 ( systemctl restart docker) 和整个主机,以查看是否可以解决问题。

  • 这是一个有用的建议,它可以专门针对 Ubuntu 18.04。要关闭容器,我必须运行“docker exec -it <container> bash”,然后运行“kill 1” - 我在这里找到它:https://github.com/docker/for-linux/issues/254 (3认同)
  • 对于“alpine”图像,您可以运行“docker exec -it <container> Kill 1” (3认同)