如何删除损坏Docker容器内的文件以修复无法启动的Redmine容器
故障根因
- 初始启动失败是因为Redmine 4.0+版本已经废弃了
/usr/src/redmine/vendor/plugins作为插件目录,你将插件放入该目录后触发了启动拦截规则。 - 后续修改entrypoint后启动失败、日志为空,是因为你提交镜像时没有保留官方镜像默认的启动参数,仅指定了entrypoint导致启动命令不完整。
修复步骤
方案1:直接修复现有异常容器(操作最快,无需重建镜像)
- 先停止当前不断重启的Redmine容器
docker stop sad_hodgkin
- 直接调用bash进入容器删除错误目录,无需修改镜像配置
docker run --rm --volumes-from sad_hodgkin redmine:21_09_27 rm -rf /usr/src/redmine/vendor/plugins
这里用
--volumes-from挂载异常容器的存储层,直接修改对应目录,避开容器本身entrypoint异常的问题
- 重启容器即可恢复正常
docker start sad_hodgkin
方案2:重新构建正常的自定义镜像(适合需要固化修改的场景)
如果要保留你修改后的镜像,按以下步骤重新提交保证配置正确:
- 启动临时容器基于你现有的问题镜像运行,挂起避免退出
docker run -d --name temp_redmine --entrypoint sleep redmine:21_09_27 3600
- 确认错误目录已经删除,若有需要保留的插件移动到正确目录
docker exec temp_redmine mv /usr/src/redmine/vendor/plugins/* /usr/src/redmine/plugins/ 2>/dev/null docker exec temp_redmine rm -rf /usr/src/redmine/vendor/plugins
- 提交镜像时同时指定正确的entrypoint和默认启动命令,和官方镜像配置保持一致
docker commit \ -c 'ENTRYPOINT ["/docker-entrypoint.sh"]' \ -c 'CMD ["rails", "server", "-b", "0.0.0.0"]' \ temp_redmine redmine:21_09_27_fixed
- 清理临时资源,用新镜像启动容器即可
docker rm -f temp_redmine
验证方式
启动完成后执行docker logs <容器ID>,能看到Redmine初始化、启动Web服务的日志,且容器状态为Up即为修复成功。
内容的提问来源于stack exchange,提问作者zhongxiang qian
相关产品推荐
相关产品推荐

