为何docker start默认以detached模式启动容器,docker run却直接退出?
Docker run与docker start行为差异的原因
核心差异根源:命令设计目标不同
docker run和docker start的行为差异,本质是二者的设计定位完全不同:
docker run:创建并启动新容器
执行docker run --name ubuntu ubuntu时,Docker会基于ubuntu镜像创建全新容器,并执行镜像默认的CMD(即bash)。bash作为交互式shell,必须依赖TTY(终端设备)和保持stdin(标准输入)打开才能持续运行。如果不添加-it参数:-i用于保持stdin打开,即使没有附加终端;-t用于分配虚拟TTY;
缺少这两个参数时,bash检测到没有交互环境,会立即退出,容器也就随之停止。
docker start:重启已停止的容器
docker start的核心作用是恢复之前创建并停止的容器,它会严格沿用容器创建时保存的所有配置(包括是否分配TTY、stdin是否打开等)。但它的默认行为是在后台(detached模式)运行容器,这是因为该命令的设计场景多为重启后台服务类容器,或者用户希望容器静默恢复,而非立即占用当前终端。如果需要附加终端到重启后的容器,需加上-a(attach)参数,比如docker start -a ubuntu。
相关参考说明
Docker官方文档中对两个命令的行为有明确界定:
docker run的文档指出,对于需要交互式操作的容器,必须使用-it参数来分配TTY并维持stdin连接,否则容器会立即退出;docker start的文档提到,命令默认以detached模式启动容器,使用-a参数可将当前终端附加到容器的标准输入、输出或错误流。
内容的提问来源于stack exchange,提问作者gilf0yle
相关产品推荐
相关产品推荐

