docker run -itd和-d的区别
前言:
今天在通过docker-compose启动一基于ubuntu的镜像容器时,发现启动后,容器会一直停止。但是通过docker run -itd是可以正常运行的。基于这个区别,找了一位大神(师傅)问了下,他让我执行一下docker run -d ,执行后发现也是立马停止。所以立马查了下docker run -ird和docke run -d的区别。
-
-itd:
-i
:表示以交互模式运行容器,通常与-t
一起使用,分配一个伪终端 (pseudo-TTY)。-t
:分配一个伪终端 (pseudo-TTY)。-d
:表示以后台方式 (detached mode) 运行容器,即容器在后台运行并且不会占用当前终端。
使用
-itd
参数启动容器时,容器会在后台运行,并且你可以通过docker attach
命令重新连接到容器的标准输入、输出和错误流,以进行交互操作。2.-d
-d
:表示以后台方式 (detached mode) 运行容器,即容器在后台运行并且不会占用当前终端。- 运行后,会导致
bash
找不到要分配的伪终端。后台运行,其实是有前提的,如果没有前台进程,那么实际运行完docker run
命令后,会处于退出状态,即exited
docker run -d --name my-redis redis bash
# 指定命令是bash,但显然bash在容器起来后,很快就会结束,导致没有前台进程,故容器处于退出状态
解决docker-compose不能启动容器
要使 Docker Compose 中的容器保持挂起状态,即在容器启动后保持运行而不自动退出,可以通过 docker-compose.yml
文件中的 command
字段来指定容器启动后要执行的命令
version: '3'
services:web:image: nginx:latestcontainer_name: webrestart: alwaysprivileged: trueports:- "26090:26090"command: tail -f /dev/null