docker - 通过 bash 连接到容器时避免 docker exec 僵尸进程

标签 docker docker-engine

像大多数 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 optiondocker run应该这样做。这使用 tini运行 init也可以在以前的版本中使用。

另一个选项类似于 phusion-baseimage提供具有此功能和许多其他功能的基本 docker 镜像的项目(可能是矫枉过正)。

关于docker - 通过 bash 连接到容器时避免 docker exec 僵尸进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45953229/

相关文章:

node.js - ENV 变量未正确添加到容器环境中

android - 无法在 docker 中获取 gradle build-tools - Apple M1

docker - 如何将 docker 图像链接到它们在磁盘上的组成层?

docker - 使用gcloud推送Docker镜像失败

docker - 通过 http 连接到正在运行的容器

docker - 如何在Azure Machine Learning Workbench中使用Pyodbc

docker - Docker-套接字文件的卷映射是否是覆盖行为?

docker - 如何使用 Docker 引擎 SDK 和 Golang 运行 docker 安装卷

Docker:找不到 Alpine linux 社区包

docker - 使用buildroot发行版作为docker * host *