docker如何进入启动容器查看内部目录结构
作者:Quincy379
这篇文章主要介绍了docker如何进入启动容器查看内部目录结构问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
docker进入启动容器查看内部目录结构
[root@localhost docker]# docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 806c175229ce original:1.0 "/tomcat/bin/catal..." 20 hours ago Up 5 seconds 8080/tcp origin-debug f04275ad9896 newtomcat:1.0 "/root/run.sh" 26 hours ago Exited (137) 21 hours ago newtomcat_3 [root@localhost docker]# docker exec -it 806c /bin/bash
docker exec -it containerID /bin/bash
[root@localhost docker]# docker exec -it 806c /bin/bash
然后:ls
解决docker容器因报错无法启动的问题,检查、修复容器错误并重启
问题复现
使用:
sudo docker ps -a
查看当前的docker容器:
我们想启动name为【docker-mongo】的这个容器,因此要执行
sudo docker start docker-mongo
但是执行后仍旧没有重启,大概率是重启的时候报错了,查看日志:
sudo docker logs -f docker-mongo
可以看到其中有这样的日志:
{"t":{"$date":"2022-12-29T00:35:32.551+00:00"},"s":"E", "c":"NETWORK", "id":23024, "ctx":"initandlisten", "msg":"Failed to unlink socket file", "attr": {"path":"/tmp/mongodb-27017.sock", "error":"Operation not permitted" } }
查到的解决方法是删除 /tmp/mongodb-27017.sock
文件即可。但是问题是我们无法启动docker,也无法进入到容器内部,
所以就有两种解决方案:
- 在不启动容器的情况下,进入到容器的目录中,然后对文件做操作
- 在启动容器且不启动应用的情况下,把容器“夯住”,进入容器内部调试
这里我们使用第一种解决方案
解决方法
首先查看docker的这个容器在硬盘上的目录结构
sudo docker inspect docker-mongo
可以找到一段配置项:
"MergedDir": "/var/lib/docker/overlay2/457e851851b8ef6e1b56ebd89aaefab3133e8e1013adc59a98af72e6e5b93a51/merged", "UpperDir": "/var/lib/docker/overlay2/457e851851b8ef6e1b56ebd89aaefab3133e8e1013adc59a98af72e6e5b93a51/diff", "WorkDir": "/var/lib/docker/overlay2/457e851851b8ef6e1b56ebd89aaefab3133e8e1013adc59a98af72e6e5b93a51/work"
这便是容器与本地的地址映射(注意这个目录大概率不会与ID类似,即不会包含“32f8a297fb99”这个字段,因此需要手动查看目录与容器ID的对应关系),所以我们进入这个目录:
cd /var/lib/docker/overlay2/457e851851b8ef6e1b56ebd89aaefab3133e8e1013adc59a98af72e6e5b93a51
然后就可以找到与容器内文件相似的目录结构了,比如我想删除碍事的 /tmp/mongodb-27017.sock
文件,可以使用:
su # 变为管理员权限 cd /var/lib/docker/overlay2/457e851851b8ef6e1b56ebd89aaefab3133e8e1013adc59a98af72e6e5b93a51/diff rm mongodb-27017.sock exit # 退出root用户
这里根据自己的情况对文件进行操作,一般是配置错误导致的docker重启失败
然后就可以重启了:
sudo docker start docker-mongo sudo docker ps
重启成功!
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。