我试图杀死一个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端口免费吗?
在这些情况下对我有效的方法:
sudo systemctl restart docker.socket docker.service
sudo docker image rm -f $(sudo docker image ls -q)
删除AppArmor
之前请三思。据我所知,这是应用程序安全的核心,例如在最近的主要Ubuntu版本上。
权限问题似乎是Docker版本特有的。假设您的Docker也是通过snap安装的,请尝试将Docker版本升级到至少当前的测试版,例如使用
snap refresh docker --beta
20.10.12
似乎运行良好。
(事实上,我接受了这个建议,并删除了我的AppArmor-快照消失了。然后尽快重新安装,相关快照的设置仍在我身边-之后安装了docker,出现了问题,升级了它:似乎很有魅力。(
我似乎已经安装了带有snap的docker,并使用了docker存储库:
sudo snap list
因此:
sudo snap remove docker --purge
sudo aa-remove-unknown
使用这里描述的方法重新安装Docker解决了我的问题!无需禁用或删除apparmor。
尝试以下步骤:
docker inspect
找到PID并终止该进程。
如果不起作用,请使用进行检查
dmesg
与Docker有关的一切。你可以把输出放在这里,我们可以帮助你。
好的,从你的png列表看来你对AppArmor有问题。试试这个:
sudo apt purge --auto-remove apparmor
sudo service docker restart
docker system prune --all --volumes
我从snap安装了Docker,并遇到了拒绝权限的错误响应。在阅读了许多用户对appermor建议的更多问题后,我从snap中卸载了Docker,然后使用了digitalocean的Docker安装教程。
这对我很有效,在这里发帖作为其他遇到同样问题的人的参考。
在我的情况下,它也是从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/appermor.d/docker并在开头添加以下行(但是,在"profile docker default……{"之后(:
signal,
然后重新加载设备
sudo systemctl reload apparmor
这至少在我的电脑上修复了它。
查看更多https://manpages.ubuntu.com/manpages/xenial/man5/apparmor.d.5.html区间下信号:
Example AppArmor signal rules:
# Allow all signal access
signal,