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

13

我想杀掉一个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 组中?你是如何启动容器的? - tripleee
@tripleee,是的,我的用户在docker组中。我使用docker-compose启动了容器。docker-compose down也无法正常工作,我得到了权限被拒绝的错误提示。 - 0x55b1E06FF
6个回答

9

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

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

9
似乎我既使用了Docker仓库,也用Snap安装了Docker。
sudo snap list

因此:

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

按照此处描述的方法重新安装Docker解决了我的问题!不需要禁用或删除apparmor。


6

在删除AppArmor之前,请三思而后行。据我所知,这对于最近的Ubuntu版本中的应用程序安全至关重要。

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

snap refresh docker --beta

20.10.12 看起来正常工作。

(事实上,我听从建议并删除了我的 AppArmor - snaps 消失了。然后尽快重新安装,相关 snaps 的设置仍然保留 - 之后重新安装了 docker,遇到了问题,升级它:看起来像魔法一样运行良好。)


2
我将Docker引擎版本升级到20.10.12,一切都很顺利,直到在杀死容器时出现了相同的拒绝权限。我想知道下一个解决方案是否也很危险,在这种情况下,不会删除AppArmor,只会卸载未存储在/ etc / apparmor.d中的所有配置文件。sudo aa-remove-unknown docker container kill $(docker ps -q) - 0x55b1E06FF
1
这是我收到的信息:“我知道这个话题不是关于Docker安装的,但我不建议从snap存储库安装Docker。我知道这似乎更容易,但你以后可能会遇到更多问题(但不一定)。根据你使用的发行版,使用文档中推荐的方式进行安装。”也许这是对你最好的建议? - brezniczky
1
对于#1:我想在Snapcraft论坛上提出这个问题 - 也许他们会更快地发布beta版本。https://forum.snapcraft.io/t/docker-snap-problem-with-stopping-containers-20-10-11/29204不幸的是,我不确定如何评论您提出的解决方案。(我会尝试考虑一下,但现在手头没有太多时间。) - brezniczky
1
快速更新:与此同时,我在Snapcraft论坛上收到了回复,指向https://github.com/docker-snap/docker-snap/issues/36,我在那里看到的解决方法是`sudo rm /var/snap/docker/common/profile_reloaded`,我不知道你是如何决定的,这可能是你的方法之一,甚至可能有所帮助或解除阻塞,我喜欢它的原因是它明确地针对了某些时候的“docker”。必须说,如果没有这个,我有点担心会点头 :)。 - brezniczky
1
不确定这是否对你有所帮助,但是最终(就我而言) - 我只是太傻了 :) 我的问题也回来了。docker --version(顺便问一下,你试过了吗?)一直对我说20.10.7,但我无法删除docker(sudo apt remove docker),因此我认为这只是与快照或类似物的故障。结果我错了!sudo apt list --installed | grep docker揭示了我同时安装了一个从apt获取的版本。我将其删除后,所有问题都解决了。(对我来说,它是来自某个PPA的docker.io课程...在某个时候...) - brezniczky
显示剩余3条评论

1
尝试以下步骤:
docker inspect

找到 PID 并终止该进程。

如果无效,请检查:

dmesg

本文涉及Docker相关内容。您可以在此处提供输出,以便我们帮助您。

好的,从您的png文件来看,似乎您遇到了AppArmor问题。请尝试以下操作:

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

1
这是我在运行 dmesg 时与 Docker 相关的所有内容:https://drive.google.com/file/d/1XI_P0TgpTZ2_GEX-LdEPo9FhylYdpzzo/view?usp=sharing(很抱歉我用图像展示了控制台日志,但我认为在评论中这样展示更好)。由于根据 docker 的说法我没有运行任何进程,因此 docker inspect 没有起作用。 - 0x55b1E06FF
2
它能够工作,但我想知道删除 apparmor 安全模块是否会适得其反或损坏某些东西?最终我还是重新安装了这个模块。 - 0x55b1E06FF
1
请更新您的答案并警告读者注意这个注意事项,这样我也可以少些负面情绪。您尝试过降级吗?听起来像是一个新问题或重新出现的问题。 - brezniczky
1
大家请不要在Ubuntu上删除AppArmor,特别是在使用Snap时,因为这样会导致所有的Snap都被删除。 - brezniczky
2
好问题,我知道并同意AppArmor会给Snap开发者带来问题。据我了解,Snaps现在是整个Ubuntu软件中心的基础...所以如果人们删除AppArmor可能会出现问题;) )虽然我不是专家(在这方面已经拔光了太多头发: )),但尽管我的理解很肤浅,我仍然有一些希望这可以帮助:https://snapcraft.io/docs/snap-confinement - brezniczky
显示剩余4条评论

0
在我的情况下,这也是在从Bionic升级到Ubuntu 20.04后出现的apparmor问题。通过运行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

这至少在我的电脑上解决了问题。

在signal:下面查看更多https://manpages.ubuntu.com/manpages/xenial/man5/apparmor.d.5.html

Example AppArmor signal rules:

       # Allow all signal access
       signal,

0

我从 snap 安装了 Docker,但却遇到了“权限被拒绝”的错误响应。在阅读了许多用户经历了更多问题后,我卸载了 snap 中的 Docker,然后使用了 digitalocean 的 Docker 安装教程

这对我来说很有效,我将其发布在这里,供其他遇到同样问题的人参考。


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