Docker环境下无法丢弃my.cnf修改、执行git pull报错设备或资源忙怎么办?
问题原因
报错error: unable to unlink old 'docker/dev/db/my.cnf': Device or resource busy的核心原因是该文件正被运行中的Docker容器挂载占用,MySQL容器进程持有文件锁,Git没有权限直接修改被占用的挂载文件。
解决步骤
- 第一步:停止占用该文件的Docker容器
可以先执行以下命令查看持有该文件锁的进程:lsof docker/dev/db/my.cnf
根据返回的进程信息找到对应的MySQL容器,执行停止命令:docker stop <容器ID/容器名>
如果是使用Docker Compose编排的项目,也可以直接在项目根目录停止所有关联容器:docker compose down
(旧版本Docker Compose请使用docker-compose down) - 第二步:丢弃文件修改
容器停止后文件锁自动释放,此时执行Git重置命令即可丢弃本地改动:git reset --hard HEAD - 第三步:拉取最新代码
git pull - 第四步:恢复容器运行
代码拉取完成后重新启动项目容器即可:docker compose up -d
临时规避方案(无需停止容器场景)
如果当前业务不允许停止运行中的容器,可以临时关闭Git对该文件的本地修改跟踪,避免后续Git操作冲突:
git update-index --assume-unchanged docker/dev/db/my.cnf
后续需要恢复对该文件的修改跟踪时执行:
git update-index --no-assume-unchanged docker/dev/db/my.cnf
内容的提问来源于stack exchange,提问作者Afsana Jamal Mumu
相关产品推荐
相关产品推荐

