背景
我用docker在运行一个c++程序,由于程序有时候会奔溃,我就给容器做了个健康检查,如果发现挂了,就帮服务重新拉起。
但是由于默认的dump文件位置没有修改,dump位置也没有挂载出来导致后续想分析这个文件比较麻烦,如果想前期就挂在出来参考这个文章:https://ddanilov.me/how-to-configure-core-dump-in-docker-container
方案
将已经停止的容器commit成一个docker镜像
将这个镜像单独run起来
将镜像里面的coredump文件复制出来分析
#Commit the stopped container to a new image: test_image. docker commit $CONTAINER_ID test_image #Run the new image in a new container with a shell. docker run -ti --entrypoint=sh test_image
操作
#找到容器的id docker ps -a | grep vmangos #将容器打包成镜像 docker commit ca2561e442be test_image #运行这个镜像 docker run -ti --entrypoint=sh test_image #新起命令行 #拿到新容器的id docker ps | grep test_image #将coredump文件复制出来分析 docker cp 1873d7e3d752:core.78 .
参考资料:
https://ddanilov.me/how-to-configure-core-dump-in-docker-container
https://stackoverflow.com/questions/48833905/how-to-list-files-in-a-stopped-docker-container