Docker容器处于STOP状态时如何访问查看其内部的指定文件?
停止状态的Docker容器完全可以访问内部文件,常用3种可靠方案,按操作复杂度从低到高排列如下:
方案1:直接使用
docker cp命令拷贝目标文件 这是故障排查的首选方案,docker cp本身支持对停止状态的容器执行文件拷贝操作,不需要容器处于运行状态,也不会改动容器原有的文件数据。
- 操作命令格式:
docker cp <容器ID或容器名>:<容器内的文件绝对路径> <宿主机本地存放路径> - 操作示例:要拷贝ID为
a1b2c3d的容器内的/var/log/nginx/error.log到当前目录,直接执行docker cp a1b2c3d:/var/log/nginx/error.log ./即可,拷贝完成后直接在宿主机打开文件排查即可。
方案2:将停止容器提交为临时镜像,启动临时容器访问
如果需要批量查看多个文件、或者需要遍历目录结构,可使用该方案:
- 先把停止的容器提交为一个临时镜像:
docker commit <停止的容器ID/名称> tmp-debug-image - 启动一个临时容器直接进入shell查看文件:
docker run --rm -it --entrypoint sh tmp-debug-image - 排查完成后退出临时容器,临时容器会自动删除,后续可手动删除临时镜像释放存储空间。
方案3:直接访问宿主机上的容器文件系统存储目录
如果前两种方案都无法执行(比如容器元数据损坏无法通过docker命令识别),可以直接到宿主机的Docker存储目录查找对应文件,该操作需要root权限:
- 先获取容器的可写层存储路径:
docker inspect <停止的容器ID/名称> | grep UpperDir,返回的路径就是容器可写层的实际存储路径 - 直接进入返回的路径,即可看到和容器内完全一致的目录结构,可直接打开目标文件查看。
注意事项
- 以上操作均不需要启动原故障容器,不会修改容器原有状态,不影响后续故障定位
- 如果目标文件存放在容器挂载的volume中,需要通过
docker volume inspect <volume名>获取volume在宿主机的存储路径,再到对应路径查看文件。
内容的提问来源于stack exchange,提问作者Fperuso
相关产品推荐
相关产品推荐

