docker - docker 容器重启是如何工作的?
问题描述
例如,当 docker 容器有 100 个进程正在运行并且我们使用重新启动容器docker restart container-name
时,docker 如何重新启动所有这 100 个进程?
它会存储所有流程详细信息并重新启动它们吗?
编辑:
以下可以被认为是我想要回答的具体问题:
启动容器后,我使用登录到容器docker exec -it container-name bash
并启动一些后台进程。然后我退出容器并执行 adocker restart
或 astop
后跟 a start
。我会让那些手动启动的进程自动再次运行吗?
解决方案
一个 Docker 容器有一个主要进程。 docker restart
做两件事:
- 它相当于
docker stop
. 它将 SIGTERM 发送到其主进程(仅);如果在 10 秒内没有终止,它会发送 SIGKILL。如果主进程还有子进程,它们也会被强制终止。 - 它相当于
docker start
. 在已经存在的容器中,它运行容器的命令,通过连接其入口点和命令列表构建。
请注意,这两个都集中在一个过程上。如果该进程是像 supervisord 这样的专用进程管理器,则该docker stop
序列有望使主管优雅地停止它正在管理的每个进程,并且您会没事的。如果它是一个启动一堆后台进程并忽略它们的 shell 脚本,它们就会在没有任何警告的情况下被杀死。类似地,如果主容器进程知道如何启动它的子进程,那么docker start
就会导致这种情况再次发生,但如果它是一个交互式 shell 并且你手动启动了后台进程,它们就会丢失。
Docker 没有任何类型的“快照”机制。一般模型是容器总是从一个干净且已知的状态开始,并且可以从那里重建他们需要的任何东西。它更适合这个模型到docker rm
一个停止的容器和docker run
一个新的容器,而不是再次尝试docker start
它。
推荐阅读
- nginx - nginx 根据主机名中的索引反向代理到不同的应用程序
- teradata - Teradata TPT 的数据加载失败
- python - 无法解析剩余部分:来自“forloop .counter”的“.counter”
- python - 单元测试设计和模拟
- material-ui - 在 Material-UI Datepicker 中停用当前和过去几天
- c# - 无法在 c# linq 中将可空长转换为不可空长
- azure - Azure 搜索返回不正确的结果
- validation - 是否可以在 Keras fit_generator() 的验证部分显示进度条或 ETA
- python - 当每行仅包含一个稀疏向量时,平均大量 pyspark 数据帧的所有行
- google-chrome-extension - 根据浅色或深色模式浏览器切换 Chrome 扩展图标?