【问题标题】:Error response from daemon: Cannot kill container: permission denied, how to kill docker containers on Ubuntu 20.04?来自守护进程的错误响应:无法杀死容器:权限被拒绝,如何在 Ubuntu 20.04 上杀死 docker 容器?
【发布时间】:2022-11-03 16:57:27
【问题描述】:

我试图杀死一个 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,是的,我的用户在 docker 组中。我用 docker-compose 启动了容器。 docker-compose down 也不起作用,我的权限被拒绝。

标签: docker ubuntu kill-process


【解决方案1】:

在删除 AppArmor 之前请三思。据我了解,这是应用程序安全的核心,例如最近的主要 Ubuntu 版本。

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

snap refresh docker --beta

20.10.12 似乎工作正常。

(事实上​​,我接受了这个建议并且确实删除了我的 AppArmor - snaps 消失了。然后尽快重新安装,相关 snap 包的设置仍然存在 - 之后安装了 docker,有问题,升级它:似乎像一个魅力.)

【讨论】:

  • 我将 docker 引擎版本升级到 20.10.12,一切都很顺利,直到我在杀死容器时获得了相同的拒绝权限。我想知道下一个解决方案是否也很危险,在这个 apparmor 中没有被删除,只是所有未存储在 /etc/apparmor.d 中的配置文件都被卸载。 sudo aa-remove-unknowndocker container kill $(docker ps -q)
  • 我什至可以检查将要使用sudo aa-remove-unknown -n 卸载的配置文件。有了这个,我想知道是否可以只卸载与 docker 相关的配置文件,只是为了保持加载其余的配置文件。
  • 恕我直言,有(至少)两种截然不同的方法。 #1 是坚持使用快照的 Docker。我认为必须遵循特定于发行版的说明、howtos 等是 Linux 采用的主要障碍。更加努力或避免 - 我会更加努力(将跟进)。或者:#2 安装绝对最新的 Docker ,这意味着你可以卸载 snap。 forums.docker.com/t/… 也许你应该选择#2?我不再遇到这个问题,但无论您选择哪种方式,我都渴望收到您的回音。
  • 对于#2:这是我收到的“我知道这个主题不是关于 Docker 安装,但我不建议从 snap 存储库安装 Docker。我知道这看起来更容易,但你可以(但不一定会)有更多问题稍后。根据您使用的发行版,使用文档推荐的方式。也许对你最好的建议?
  • 对于#1:我想我会在 Snapcraft 论坛上提出这个问题——也许他们会更快地通过 beta 发布路径。 forum.snapcraft.io/t/…不幸的是,我不确定对您提出的解决方案该说些什么。 (会试着考虑一下,我现在没有太多时间在手上。)
【解决方案2】:

尝试以下步骤:

docker inspect

找到 PID 并终止该进程。

如果这不起作用,请检查

dmesg

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

好的,从您看来,您似乎对 AppArmor 有疑问。尝试这个:

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

【讨论】:

  • 这都与我在运行dmesg:drive.google.com/file/d/1XI_P0TgpTZ2_GEX-LdEPo9FhylYdpzzo/… 时得到的 docker 相关(很抱歉显示控制台日志的图像,但我认为在评论中显示这样会更好)。 docker insepct 没有工作,因为根据docker 我没有进程在运行。
  • 它有效,但我想知道删除 apparmor 安全模块是否最终不会适得其反或损坏某些东西?虽然我最终重新安装了这个模块
  • 请更新您的答案并警告读者有关此警告,这样我也可以减少消极情绪。您是否尝试过降级?听起来像是一个新问题或正在重新出现的问题。
  • (大家:请不要删除 AppArmor,尤其是在 Ubuntu 上 - 作为删除 Snap 的一部分,它会删除您的所有快照。)
  • 好问题,我知道并同意 AppArmor 作为 snap 开发人员会引起问题。据我了解,Snaps 现在是整个 Ubuntu 软件中心的基础......所以如果人们删除 AppArmor 可能会出现问题;))我不是专家(我什至没有的头发在去那里的路上被拔掉了) :) ),但尽管我的理解很浅,我还是希望这会有所帮助:snapcraft.io/docs/snap-confinement
【解决方案3】:

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

sudo snap list

所以:

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-08-07
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 2020-06-30
      • 2019-06-03
      • 2014-04-20
      相关资源
      最近更新 更多