来自守护进程的错误响应:无法杀死容器:权限被拒绝,如何在 Ubuntu 20.04 上杀死 docker 容器?

问题描述 投票:0回答:7

我试图杀死一个 docker 容器,但我的权限被拒绝。我使用的是Ubuntu 20.04,我的客户端docker版本是20.10.7,服务器版本是20.10.11。

这是我得到的日志:

Error response from daemon: Cannot kill container: fastapi_server: permission denied

我读到我应该使用这个命令来重新启动 docker。

sudo systemctl restart docker.socket docker.service

但问题是,当我执行此命令时,我的所有容器和图像都会消失,但如果我尝试在 localhost:8000 上,我的端口被我想要删除的容器占用。如果我运行

sudo netstat -anp | grep 8000
,我会得到:

tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN    2493/docker-proxy   
tcp6       0      0 :::8000                 :::*                    LISTEN    2500/docker-proxy 

所以这证实了我的端口已经被docker容器占用,但是当我运行

docker ps -a
时,我没有得到任何容器。我也尝试过
docker kill
,但没成功。

我应该如何杀死这个容器并释放我的 8000 端口?

docker ubuntu kill-process
7个回答
9
投票

看来我已经使用 snap 安装了 docker,并使用了 docker 存储库:

sudo snap list

所以:

sudo snap remove docker --purge
sudo aa-remove-unknown

使用这里描述的方法重新安装 Docker 解决了我的问题!无需禁用或删除apparmor。


9
投票

在这些情况下对我有用的是:

sudo systemctl restart docker.socket docker.service
sudo docker image rm -f $(sudo docker image ls -q)

6
投票

删除之前请三思而后行

AppArmor
。据我了解,这是应用程序安全的核心,例如最近的主要 Ubuntu 版本。

看来权限问题是特定于 Docker 版本的。假设您的 Docker 版本也是通过 snap 安装的,请尝试将您的 Docker 版本至少升级到当前的测试版,例如与

snap refresh docker --beta

20.10.12
似乎工作正常。

(事实上,我接受了这个建议,并删除了我的 AppArmor - 快照消失了。然后尽快重新安装,相关快照的设置仍然在我身边 - 后来安装了 docker,出现了问题,升级了它:似乎工作得像魅力。)


1
投票

尝试以下步骤:

docker inspect

找到 PID 并终止该进程。

如果这不起作用,请检查

dmesg

与 Docker 相关的一切。您可以将输出放在这里,我们可以帮助您。

好吧,从你看来,你的 AppArmor 有问题。试试这个:

sudo apt purge --auto-remove apparmor
sudo service docker restart
docker system prune --all --volumes

0
投票

我从 snap 安装了 Docker,并遇到了权限被拒绝的错误响应。在阅读了许多用户在使用apparmor建议时遇到更多问题后,我从snap卸载了Docker,然后使用了digitalocean的Docker安装教程

它对我有用,发布在这里作为遇到同样问题的其他人的参考。


0
投票

就我而言,从 Bionic 升级后,它在 Ubuntu 20.04 上也出现了。通过运行 dmesg 我收到错误消息:

[1113458.482007] audit: type=1400 audit(1672134271.112:1718): apparmor="DENIED" operation="signal" profile="docker-default" pid=1654 comm="dockerd" requested_mask="receive" denied_mask="receive" signal=kill peer="snap.docker.dockerd

要解决此问题,请编辑 /etc/apparmor.d/docker 并将以下行添加到开头(但是,在“profile docker-default .... {”之后):

 signal,

然后重新加载apparmor

 sudo systemctl reload apparmor

这至少在我的电脑上修复了它。

查看更多 https://manpages.ubuntu.com/manpages/xenial/man5/apparmor.d.5.html 信号部分下:

Example AppArmor signal rules:

       # Allow all signal access
       signal,

0
投票

我也有类似的问题;原来我有两个docker安装。我按照 this 答案中的说明进行操作,但简而言之,docker 有两种安装,一种来自

apt
,另一种来自
snap
。您需要将
snap
中的一项删除,并保留
apt
中的一项。说明在链接中。

© www.soinside.com 2019 - 2024. All rights reserved.