Docker持续复用已删除容器旧配置问题排查求助
问题根源:本地挂载的配置目录没清理干净
嘿,我一眼就看出你卡在哪了——你用--volume参数把宿主机的本地文件夹挂载到容器里了,这些宿主机上的配置文件夹是独立于Docker容器存在的,你之前删容器、清理Docker系统资源的操作根本碰不到它们,所以新容器一挂载,自然还是用旧配置。
你的操作哪里错了?
咱们挨个捋一遍你做的操作:
sudo docker container rm -f xxxx:只干掉了容器本身,对挂载的本地文件夹半毛钱影响没有sudo docker system prune --volumes:这个命令清理的是Docker自己管理的命名卷,但你用的是绑定挂载(bind mount)——直接挂载宿主机的普通文件夹,它管不着这些- 重启Docker、换容器名/镜像:这些操作都绕不开你挂载的本地目录,旧配置就在那摆着,新容器肯定会读
怎么解决?
按这几步来,保证搞定:
- 定位并清理挂载的本地目录
- 先回忆你
docker run里--volume xxxxx的具体路径,比如如果是--volume /opt/nginx/config:/etc/nginx,那/opt/nginx/config就是宿主机上存旧配置的地方 - 先停掉并删了当前容器:
sudo docker container rm -f 你的容器名 - (可选但建议)先备份旧配置,以防万一:
sudo cp -r /你的挂载路径 /你的挂载路径_backup - 清空目录里的旧配置:
sudo rm -rf /你的挂载路径/*,或者直接删掉整个目录:sudo rm -rf /你的挂载路径
- 先回忆你
- 重新启动容器
- 用你原来的
docker run命令重新启动,这时候挂载的目录是空的,容器会自动生成默认配置(只要镜像支持的话),或者你可以手动把新配置放进去
- 用你原来的
- 验证一下
- 进容器看看:
sudo docker exec -it 你的容器名 /bin/bash - 检查配置文件,确认已经是新的默认配置或者你放的新配置了
- 进容器看看:
额外提醒
- 别搞混绑定挂载和命名卷:绑定挂载是直接用宿主机路径,完全由你自己管;命名卷是Docker创建的,
prune --volumes能清理这类卷 - 以后改配置,要么直接改宿主机挂载目录里的文件(改完重启容器),要么先备份旧目录再替换,省得又踩坑
内容的提问来源于stack exchange,提问作者Moe




