docker容器状态出现Exit(1)的问题及解决

  目录

  docker容器状态出现Exit(1)

  今天docker一个容器出现状态为Exited(1),为了让它运行起来,我把它重启restart或删掉重新运行,结果还是出现这个Exited(1)的问题。

  后来查找各种资料,倒腾了好久,才解决掉这个问题?

  修改exit状态的docker容器

  Linux 系统运行基础

  1.boot file system ( bootfs )

  包含 Boot Loader与Kernel文件,用户不能修改这些文件。并且在系统启动过程完成之后, 整个系统的内核都会被加载进内存。此时bootfs会被卸载, 从而释放出所占用的系统内存。

  在容器中可以运行不同版本的Linux, 说明对于同样内核版本的不同的 Linux 发行版的 bootfs 都是一致的, 否则会无法启动。因此可以推断, Docker运行是需要内核支持的。

  Linux系统中典型的bootfs目录: (核心) /boot/vmlinuz、(核心解压缩所需 RAM Disk) /boot/initramfs

  2.root file system ( rootfs )

  1) 不同的Linux发行版本, bootfs相同, rootfs不同(二进制文件)。

  2) 每个容器有自己的 rootfs, 它来自不同的 Linux 发行版的基础镜像,包括 Ubuntu, Debian 和 SUSE 等。

  3) 使用不同的rootfs 就决定了, 在构建镜像的过程中, 可以使用哪些系统的命令。

  4) 典型的rootfs 目录: /dev、/proc、/bin、/etc、 /lib、/usr

  OverlayFS 存储原理

  OverlayFS 结构分为三个层: LowerDir、Upperdir、MergedDir

  1.LowerDir (只读)

  只读的 image layer,其实就是 rootfs, 在使用 Dockfile 构建镜像的时候就定好了

  2.Upperdir (读写)

  upperdir 则是在 lowerdir 之上的一层, 为读写层。容器在启动的时候会创建, 所有对容 器的修改, 都是在这层。比如容器启动写入的日志文件,或者是应用程序写入的临时文件

  3.MergedDir (展示)

  merged 目录是容器的挂载点,在用户视角能够看到的所有文件

  修改exit状态的docker容器

  查看容器状态 ,可以看到当前容器是关闭的

  查看容器日志,查找关闭原因

  sudo docker logs <容器名 或 容器ID>

  获取容器文件存储的路径

  sudo docker inspect <容器名或容器ID> | grep -A 10 GraphDriver-A

  表示在搜索到该关键词后,打印下面 n 行

  mergedDir 是不存在的,我们需要修改的文件都存储在 UpperDir 目录下

  总结

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

  您可能感兴趣的文章: