停止并删除一个自启动的Docker容器

4

我有几个容器需要删除。但是当我停止它们时,它们会重新启动,所以我无法删除它们。我尝试使用命令 sudo docker update --restart=no [docker name] 对它们进行更新,但它们仍然在重新启动。

这是我的 docker ps 输出:

    ~$ sudo docker ps
CONTAINER ID        IMAGE                                            COMMAND                  CREATED              STATUS                PORTS                  NAMES
8482a3ba7a1c        homeassistant/amd64-hassio-dns:2021.01.0         "/init"                  About a minute ago   Up About a minute                            hassio_dns
bf6edaa5add5        homeassistant/amd64-hassio-multicast:2021.04.0   "/init"                  8 minutes ago        Up 8 minutes                                 hassio_multicast
f53752b4920f        homeassistant/amd64-hassio-audio:2021.02.1       "/init"                  8 minutes ago        Up 8 minutes                                 hassio_audio
2b5ed16c305d        homeassistant/amd64-hassio-cli:2021.03.1         "/init /bin/bash -c …"   9 minutes ago        Up 9 minutes                                 hassio_cli
27fdf9452c85        homeassistant/amd64-hassio-observer:2020.10.1    "/init"                  9 minutes ago        Up 9 minutes          0.0.0.0:4357->80/tcp   hassio_observer
612417c38db1        homeassistant/amd64-hassio-supervisor            "/init"                  6 days ago           Up 16 minutes                                hassio_supervisor

它们在Synology NAS上运行


1
你是否在docker update命令中提供了_container id_或_container name_? 例如,使用docker update --restart=no 8482a3ba7a1c命令来更新正在运行的homeassistant/amd64-hassio-dns容器的重启策略。 - Jeroen van der Laan
docker rm -f <container_name> 可能会解决问题。如果仍然无法解决,由于您在 Synology 上,您可能只想使用 GUI。 - Zeitounator
它们是如何启动的? - BMitch
这些都不起作用:(我是通过ssh按照一个我没有保存的教程来安装它们的。我在图形界面中找不到它们。使用所有描述的方法容器都会不停地重启。 - Nidupb
也许,你的容器是由 Docker Swarm 管理的,它确保服务运行。 - huytmb
@huytmb 那是我的第一反应,但容器名称没有被Swarm模式添加的扩展名。 - BMitch
2个回答

2
通过搜索您正在运行的图像,看起来您可能已经安装了这个监控工具

此系统将运行Home Assistant Supervisor。Supervisor不仅是一个应用程序,而且还是一个完整的设备,可以管理整个系统。如果设置不再符合预期值,它会清理、修复或重置为默认值。

我的理解是,如果您删除一个容器,此工具可能会重新创建它。

通过安装程序脚本,我们可以看到它运行了:

systemctl enable hassio-apparmor.service > /dev/null 2>&1;
systemctl start hassio-apparmor.service

要禁用,请尝试以下操作:

systemctl disable hassio-apparmor.service
systemctl stop hassio-apparmor.service

然后你可以删除容器 (使用-f选项运行初始的docker kill,这可能会导致由这些容器挂载的任何文件的数据损坏):

docker container rm -f \
  hassio_dns \
  hassio_multicast \
  hassio_audio \
  hassio_cli \
  hassio_observer \
  hassio_supervisor

不幸的是,Synology 上 systemctl 命令的输出为:~$ systemctl disable hassio-apparmor.service -sh: systemctl: command not found - Nidupb
@Nidupb 你是root用户吗?如果这不能帮助你,你需要找出如何安装这些容器来解决如何卸载它们的问题,因为某些外部因素正在重新创建它们。从描述来看,这不是docker本身的问题。你自己去搜索会比我们更好。 - BMitch
尝试使用以下命令作为systemctl的替代方案,"service hassio-apparmor stop"。 - KumailR

1

如果您想删除一个无论何种原因都未停止的容器,您可以简单地使用

docker rm <container_id> -f 

这将强制停止并删除您的容器。


这在 Docker 版本 24 中不起作用: -f 中的未知速记标志:'f'。 - beep_check
1
谢谢提醒!我已经修正了答案,正确的命令是 docker rm 而不是 docker stop - EdwardKirk

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