像大多数 docker 用户一样,我需要定期连接到正在运行的容器并通过 bash 执行各种任意命令。
我正在使用带有 ubuntu 16.04 镜像的 17.06-CE,据我了解,在不将 ssh 安装到容器中的情况下执行此操作的唯一方法是通过 docker exec -it <container_name> bash
但是,as is well-documented ,对于您生成的每个 bash shell 进程,当您的连接中断时,您会留下一个僵尸进程。如果你经常连接到你的容器,你最终会得到 1000 个空闲的 shell——这是最不受欢迎的结果!
如何确保这些僵尸 shell 进程在断开连接时被杀死 - 因为它们会通过 ssh?
最佳答案
一种方法是确保 linux init
进程在您的容器中运行。
在最新版本的 docker 中有一个 --init
option至docker run
应该这样做。这使用 tini运行 init
也可以在以前的版本中使用。
另一个选项类似于 phusion-baseimage提供具有此功能和许多其他功能的基本 docker 镜像的项目(可能是矫枉过正)。
关于docker - 通过 bash 连接到容器时避免 docker exec 僵尸进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45953229/