docker run -d和docker run -it的区别详解

 更新时间:2023年05月31日 09:15:38   作者:RedCong  
记得第一次接触docker的时候,教程中写着docker run -it之类的命令,当时对这个-it选项是一知半解,下面这篇文章主要给大家介绍了关于docker run -d和docker run -it的区别的相关资料,需要的朋友可以参考下

docker run -it

  • i : interactive 代表交互
  • -t : tty 分配伪 TTY

测试不带前台进程的,例如centos/ubuntu

> docker run -it ubuntu
root@a30a87e0e065:/# exit
exit
> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

我们发现容器已经退出了

> docker run -it ubuntu
root@a30a87e0e065:/# 输入Ctrl + P + Q
> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS          PORTS     NAMES
e51e423ac575   ubuntu    "bash"    10 seconds ago   Up 10 seconds             romantic_franklin

发现容器不会退出

测试带前台进程的,例如redis

> docker run -it redis
1:C 26 Nov 2022 15:15:37.357 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 26 Nov 2022 15:15:37.357 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=1, just started
 a config file use redis-server /path/to/redis.conf
1:M 26 Nov 2022 15:15:37.358 * monotonic clock: POSIX clock_gettime
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 6.2.6 (00000000/0) 64 bit
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 1
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           https://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

1:M 26 Nov 2022 15:15:37.358 # Server initialized
1:M 26 Nov 2022 15:15:37.358 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1:M 26 Nov 2022 15:15:37.358 * Ready to accept connections

# 输入Ctrl + P + Q
> docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
14cef5be594b   redis     "docker-entrypoint.s…"   15 seconds ago   Up 14 seconds   6379/tcp   silly_wright
> docker run -it redis
1:C 26 Nov 2022 15:22:49.890 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 26 Nov 2022 15:22:49.890 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 26 Nov 2022 15:22:49.891 * monotonic clock: POSIX clock_gettime
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 6.2.6 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 1
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           https://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

1:M 26 Nov 2022 15:22:49.891 # Server initialized
1:M 26 Nov 2022 15:22:49.891 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1:M 26 Nov 2022 15:22:49.891 * Ready to accept connections
exit #这里没有反应,我们继续Ctrl + C
^C1:signal-handler (1669476186) Received SIGINT scheduling shutdown...
1:M 26 Nov 2022 15:23:06.123 # User requested shutdown...
1:M 26 Nov 2022 15:23:06.123 * Saving the final RDB snapshot before exiting.
1:M 26 Nov 2022 15:23:06.130 * DB saved on disk
1:M 26 Nov 2022 15:23:06.130 # Redis is now ready to exit, bye bye...
> docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                     PORTS     NAMES
8668b2bf13b1   redis     "docker-entrypoint.s…"   24 seconds ago   Exited (0) 7 seconds ago             ecstatic_lehmann

总结:

-it 使用交互方式运行,进入容器查看内容

1.当运行的镜像没有前台进程。

exit #run进去容器,exit退出,容器停止

Ctrl+P+Q # run进去容器,ctrl+p+q退出,容器不停止

1.当运行的镜像有前台进程。

exit #用exit无效,使用Ctrl + C ,容器会停止

Ctrl+P+Q # run进去容器,ctrl+p+q退出,容器不停止

docker run -d

-d : detach 表示后台运行

测试不带前台进程的,例如centos/ubuntu

> docker run -d ubuntu
> docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS                      PORTS     NAMES
0210648ee10f   ubuntu    "bash"    34 seconds ago   Exited (0) 32 seconds ago             jolly_wright

我们发现容器启动后会立马退出

测试带前台进程的,例如redis

> docker run -d redis
> docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS      NAMES
3adf2698b224   redis     "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds   6379/tcp   vigilant_agnesi

我们发现容器不会退出

总结:

Docker容器后台运行,就必须有一个前台进程.

容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。

docker run -d ubuntu tail -f /dev/null # 这种情况就不会退出了

总结

到此这篇关于docker run -d和docker run -it的区别详解的文章就介绍到这了,更多相关docker run -d和docker run -it区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用docker部署java项目运行环境的实现步骤

    使用docker部署java项目运行环境的实现步骤

    本文主要介绍了使用docker部署java项目运行环境的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Docker系列之使用Docker Compose编排容器

    Docker系列之使用Docker Compose编排容器

    Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,这篇文章主要介绍了Docker系列之使用Docker Compose编排容器,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • docker自定义网络从入门到实践

    docker自定义网络从入门到实践

    Docker 网络模式决定了容器之间、容器与宿主机之间的通信方式,掌握网络机制是理解容器互联互通的关键,本文给大家介绍docker自定义网络从入门到实践,感兴趣的朋友跟随小编一起看看吧
    2025-10-10
  • 解决Docker镜像拉取超时及优化网络配置的方法(failed to do request: Head “https://registry-1.docker.io/v2/*)

    解决Docker镜像拉取超时及优化网络配置的方法(failed to do request

    在使用 Docker 构建和部署应用时,拉取镜像是一个关键的步骤,然而,在一些网络环境中,特别是企业内部网或受限网络环境中,可能会遇到 Docker 镜像拉取失败或超时的问题,这篇博客将详细探讨如何应对 Docker 镜像拉取超时的问题,需要的朋友可以参考下
    2024-11-11
  • docker容器的四种端口映射演示分析

    docker容器的四种端口映射演示分析

    这篇文章主要为大家介绍了docker容器的四种端口映射演示分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • docker容器设置本地时间和本地时区的实现方法

    docker容器设置本地时间和本地时区的实现方法

    Docker容器通过-eTZ设置时区,但部分程序如cron依赖本地时间文件,需手动修改/etc/localtime软链接指向正确时区,下面就来具体介绍一下,感兴趣的可以了解一下
    2025-07-07
  • 对Docker-java项目进行jvm调优-内存方式

    对Docker-java项目进行jvm调优-内存方式

    本文详细介绍了如何进入Docker容器并分析Java进程的内存使用情况,通过使用jps和jstat工具,可以查看java进程列表及内存池容量,讨论了设置JVM参数-Xmx和-Xms相等的重要性,以避免堆内存的频繁调整,此外,还探讨了FullGC触发条件和元空间的配置
    2024-09-09
  • 通过Docker为本地DeepSeek-r1部署WebUI界面的完整教程

    通过Docker为本地DeepSeek-r1部署WebUI界面的完整教程

    本文详细介绍了如何通过Docker安装并配置OpenWebUI,一个功能丰富的自托管Web用户界面,用于与大型语言模型交互,文章步骤包括安装Docker、配置WSL2、使用dockerrun命令部署OpenWebUI,并提供了详细的命令解释和部署结果,需要的朋友可以参考下
    2025-02-02
  • Docker之redis安装全过程

    Docker之redis安装全过程

    本文简述了Redis部署流程,涵盖网络创建、安装配置(含远程访问、验证及持久化设置)、容器启动命令(需添加--privileged=true参数)及测试方法,提供实践参考
    2025-08-08
  • Docker环境运行Vue项目全过程

    Docker环境运行Vue项目全过程

    这篇文章主要介绍了Docker环境运行Vue项目全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06

最新评论