Error response from daemon: removal of container XXX is already in progress

本文讲述了如何处理Docker容器删除失败的问题,涉及检查docker安装路径、清理日志、设置日志大小限制等步骤,并介绍了全局和容器级的日志配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在删除容器的时候发现是拥有一个容器无法删除

[root@master ~]# docker rm -f $(docker ps -aq)
9e94bb15009e
255061e3b03a
Error response from daemon: removal of container 7480f7b75d90 is already in progress

解决办法:
1、查看docker安装路径

[root@master ~]# docker info | grep Root
 Docker Root Dir: /opt/kube-install/k8s/docker/containerd

2、切换到containers目录下
Docker在不重建容器的情况下,日志文件默认会一直追加,时间一长会逐渐占满服务器的硬盘的空间,内存消耗也会一直增加。Docker 的日志文件存在 /var/lib/docker/containers 目录中!

cd /opt/kube-install/k8s/docker/containerd/containers

ls发现有以下目录
0659e131bc28176946e3202012dfa48b0f27022df6aa654d00247e4131d415e9 86254808b4d146c40749eed628e70b81bcf1ba671168a7bce799f8d8a3f0d17a
3、关闭容器

systemctl stop docker

4、删除所有文件

rm -rf /opt/kube-install/k8s/docker/containerd/containers/*

5、启动docker问题解决

[root@master containers]# systemctl start docker
[root@master containers]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

清理日志
如果docker容器正在运行,那么使用rm -rf方式删除日志后,通过df -h会发现磁盘空间并没有释放。原因是在Linux或者Unix系统中,通过rm -rf或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。正确姿势是cat /dev/null > *-json.log,当然你也可以通过rm -rf删除后重启docker。

#!/bin/sh 
echo "======== start clean docker containers logs ========"  
logs=$(find /var/lib/docker/containers/ -name *-json.log)  
for log in $logs  
        do  
                echo "clean logs : $log"  
                cat /dev/null > $log  
        done  
echo "======== end clean docker containers logs ========"  

设置Docker容器日志大小(治本)

  • 设置一个容器服务的日志大小上限
# docker-compose.yml
nginx: 
  image: nginx:1.12.1 
  restart: always 
  logging: 
    driver: “json-file” 
    options: 
      max-size: “5g” 

重启nginx容器之后,其日志文件的大小就被限制在5GB,再也不用担心了。

  • 全局设置
# 新建/etc/docker/daemon.json,若有就不用新建了。添加log-dirver和log-opts参数,样例如下:
# vim /etc/docker/daemon.json
{
  "registry-mirrors": ["*"],
  "log-driver":"json-file",
  "log-opts": {"max-size":"500m", "max-file":"3"}
}

max-size=500m:意味着一个容器日志大小上限是500M,
max-file=3:意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。

systemctl daemon-reload systemctl restart docker

注意:设置的日志大小,只对新建的容器有效。

In this competitive society, I hope you will not be like most people!

### 解决 Docker 容器名称冲突问题 当遇到 `error response from daemon: container name already in use` 错误时,这通常是因为尝试创建的新容器使用的名称已经存在于当前运行的或停止的其他容器上。以下是几种方法来解决此问题。 #### 方法一:删除已存在的同名容器 如果确认不再需要旧的同名容器,则可以直接将其移除: ```bash docker rm <container_name> ``` 上述命令会永久删除指定名称的容器[^1]。执行该操作前,请确保目标容器中的数据已被妥善备份或者无需保留。 #### 方法二:强制覆盖已有容器的名字 另一种方式是在启动新容器的时候通过参数设置新的名字并自动清理掉之前的同名实例: ```yaml - name: Force recreate MongoDB container if exists with same name docker_container: name: mongo-primary-dc image: debian:wheezy state: started restart_policy: always cleanup: yes ``` 这里利用 Ansible 的模块实现自动化处理流程的一部分展示。实际应用中可以根据具体环境调整配置文件内容。 #### 方法三:修改服务定义避免硬编码命名 对于持续集成/部署场景下频繁更新的服务而言,可以考虑采用动态生成唯一标识符作为替代方案之一。例如,在 GitLab Runner 配置文件 `.gitlab-ci.yml` 中定义任务级别的独立工作区路径从而间接规避潜在冲突风险: ```toml [[runners]] [runners.docker] disable_cache = false privileged = true [[runners.cache]] Type="s3" Path="/path/to/cache/" environment = [ "CI_PROJECT_NAME", "CI_COMMIT_REF_SLUG" ] ``` 以上片段展示了如何自定义构建上下文中涉及资源分配逻辑的部分细节[^2]。适当扩展这些选项有助于增强系统的灵活性与可维护性。 #### 方法四:检查系统级依赖关系 某些情况下,即使按照常规手段解决了表面上看起来像是简单的重复命名引发的问题后仍然无法正常运作的话,可能还需要进一步排查是否存在更深层次的原因干扰到了整个生命周期管理过程。比如 SELinux 策略限制、防火墙规则不当等因素都可能导致异常行为发生。针对基于 RedHat/CentOS 平台的情况来说特别需要注意以下几点事项[^3]: - **Firewalld 和 Docker 启动顺序** 如果发现即便重装软件包也无法彻底修复状况,那么很可能是由于两者初始化时间差所引起连锁反应所致。此时建议先关闭相关守护进程后再重新加载最新版本镜像试试看效果怎样变化。 - **存储驱动程序兼容性** 最后别忘了核查 `/etc/docker/daemon.json` 文件里是否有正确指定了合适的 backend 类型以匹配宿主机硬件条件需求[^4]: ```json { "storage-driver": "overlay2" } ``` 这样做的好处是可以有效减少磁盘 I/O 开销的同时提高整体性能表现水平。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星光落入你灰蒙蒙的眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值