docker run 命令的 -i -t -d选项的作用
记得第一次接触 docker 的时候,教程中写着 docker run -it
之类的命令,当时对这个 -it
选项是一知半解,本文就来分析一下这三个选项,尽量做到通俗易懂,这也是我写博客的目的。
一、选项说明
官方文档:https://docs.docker.com/engine/reference/commandline/run/
选项 | 选项简写 | 说明 |
---|---|---|
–detach | -d | 在后台运行容器,并且打印容器id。 |
–interactive | -i | 即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用。 |
–tty | -t | 分配一个伪tty,一般与 -i 连用。 |
“-”与“–”的区别请参考:Linux编程:命令行选项单横线“-”与双横线“–”的区别
二、-it 选项
使用 ubuntu:19.10
镜像创建并运行一个名称为 ubuntu1910
的容器,-i
选项指示 docker 要在容器上打开一个标准的输入接口,-t
指示 docker 要创建一个伪 tty 终端,连接容器的标准输入接口,之后用户就可以通过终端进行输入。由于 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
命令的默认 COMMAND
为 /bin/bash
,因此用户的输入是基于 bash shell
执行的。
示例中,在终端上输入了 exit 13
,回车执行该命令,退出终端。该命令被传递到 docker run
的调用方,并且被记录到容器的 metadata
中。
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]# docker run --name ubuntu1910 -it ubuntu:19.10
root@cd83bc3b0d3b:/# exit 13
exit
通过 docker ps -a
命令查看容器,Exited (13) 35 seconds ago
就是被回写的内容。
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]# docker ps -a | grep ubuntu1910
cd83bc3b0d3b ubuntu:19.10 "/bin/bash" 46 seconds ago Exited (13) 35 seconds ago ubuntu1910
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]#
容器的 metadata
在 /var/lib/docker/containers/containerId/ 目录下,其中 containerId-json.log
文件中记录了回写的内容。
[root@iZ2ze6ogddtzz4dzyy00xwZ cd83bc3b0d3bb76fc9fc5df326235b3554c15455891d3b3aa0921fb16796322d]# cat cd83bc3b0d3bb76fc9fc5df326235b3554c15455891d3b3aa0921fb16796322d-json.log
{"log":"\u001b]0;root@cd83bc3b0d3b: /\u0007root@cd83bc3b0d3b:/# exit 13\r\n","stream":"stdout","time":"2020-02-08T14:35:22.509224333Z"}
{"log":"exit\r\n","stream":"stdout","time":"2020-02-08T14:35:22.509286061Z"}
[root@iZ2ze6ogddtzz4dzyy00xwZ cd83bc3b0d3bb76fc9fc5df326235b3554c15455891d3b3aa0921fb16796322d]#
三、-d 选项
使用 docker run -d
在后台创建并启动名称为 ubuntu1
的容器,通过 docker ps
命令没有查找到处于运行状态的容器,通过 docker ps -a
命令查找到已经停止运行的 ubuntu1
容器。
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]# docker run -d --name ubuntu1 ubuntu:19.10
315cc38afc2f06abb5a2fbb075ebca16455367b2de685cf0c5ba828ab62dd5a1
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c04afe750081 mysql:5.7 "docker-entrypoint.s…" 26 hours ago Up 26 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql5.7
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]# docker ps -a | grep ubuntu1
315cc38afc2f ubuntu:19.10 "/bin/bash" 35 seconds ago Exited (0) 34 seconds ago ubuntu1
cd83bc3b0d3b ubuntu:19.10 "/bin/bash" 18 minutes ago Exited (13) 18 minutes ago ubuntu1910
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]#
于是疑惑产生了, -d
是保证容器在后台运行,为什么我的容器停止运行了呢?
前面提到过, docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
中有一个 COMMAND
参数,容器启动后会执行 COMMAND
命令,它的默认值为 /bin/bash
。也就是说容器在后台启动成功后,执行了 COMMAND
命令后直接关闭了。
docker命令请参考:https://blog.csdn.net/claram/article/details/103301942
了解到该原理后,我们可以通过在 docker run -d
后增加一个驻留在进程中长期运行的命令就可以保证容器不关闭了。
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]# docker run -d --name ubuntu2 ubuntu:19.10 tail -f /dev/null
a0d3c58fc68b139f63355594dd91c2d047b84a3d56880418eedcd8fedb6307b6
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a0d3c58fc68b ubuntu:19.10 "tail -f /dev/null" 5 seconds ago Up 4 seconds ubuntu2
c04afe750081 mysql:5.7 "docker-entrypoint.s…" 26 hours ago Up 26 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql5.7
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]#
文章内容仅代表个人观点,如有不正之处,欢迎批评指正,谢谢大家。
docker run 命令的 -i -t -d选项的作用相关推荐
- 【docker】docker run命令详解
Docker run命令用于运行一个新容器,而启动一个容器需要非常多的信息,所以该命令的参数非常多,今天就详细分析下该命令支持的参数. 首先看一下该命令的格式: [html] view plain c ...
- 《 第一本Docker书 》读书笔记 --- Docker 各项操作命令及参数说明(docker run 命令各个参数说明)
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. PS :个人所有读书笔记只记录个人想要的内容,很可能原书大量内容没有纳入笔记中... ... 1. ...
- Docker run 命令
Docker run 命令 docker run :创建一个新的容器并运行一个命令 语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG-] OPTIONS说明: ...
- docker run 命令详解
命令格式 Docker run命令用于运行一个新容器,而启动一个容器需要非常多的信息,所以该命令的参数非常多,今天就详细分析下该命令支持的参数. 首先看一下该命令的格式: Usage: docker ...
- Docker run 命令【转】
原文地址:https://www.runoob.com/docker/docker-run-command.html docker run :创建一个新的容器并运行一个命令 语法 docker run ...
- Docker run 命令 参数说明
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. docker run :创建一个新的容器并运行一个命令 语法 docker run [OPTIONS ...
- Docker run 命令常用参数
docker run :创建一个新的容器并运行一个命令 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS说明: -it: 以交互模式运行容器: ...
- docker run命令详解
撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]-a, ...
- (一)docker run 命令参数
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] -d, --detach=false 指定容器运行于前台还是后台,默认为false -i, - ...
- docker run命令_CVE-2019-14271:Docker cp命令漏洞分析
0x00 前言 在过去几年中,研究人员在各种容器平台的copy(cp)命令中发现了几个漏洞,这些平台包括Docker.Podman及Kubernetes,其中最严重的漏洞直到今年7月份才被发现和披露. ...
最新文章
- 一个函数两个return
- JZOJ 4673. 4504. 5635. 【NOI2018模拟4.7】LCS
- 设置char变量指定位为0或1
- 浏览器渲染机制面试_面试官不讲码德,问我Chrome浏览器的渲染原理(6000字长文)...
- 【CF566#D】 Restructuring Company (并查集---合并区间操作)
- switch c语言讲解,C语言switch使用之诡异用法详解
- android一格一格向上的进度条,如何 使用 ProgressBar 进度条
- Jenkins多环境持续集成架构实践
- liunx 之 redHat 下 java 环境的配置和安装
- mysql 日期 明天_mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间...
- 用程序关闭、注销、重启计算机
- matlab 2020b linux版本 下载
- Virtualbox安装Windows7虚拟机
- 再生核希尔伯特空间:Hilbert Space与RKHS基础
- 冰点下载器的使用方法
- Android仿微信语音录制和播放
- android 自定义太阳,第一个AOSP安卓10自定义ROM已经可用,并且非常稳定
- CSS布局:多种方案实现固定页脚(sticky footer)
- 计算机菜单的作用是,菜单
- 华为鸿蒙系统的技术特性,华为鸿蒙系统来了,还有这四大技术特性
热门文章
- IP-Guard准入控制网关实现机制
- DTL(Django templeate language)
- 一年级课程表(4月18日-4月22日)
- IPX 、 IPEX 、 UFL连接器
- At least one JAR was scanned for TLDs解决办法
- coolnbsp;sensor/image/videonbsp;technbsp;cou…
- Spark大数据分与实践笔记(第二章 Spark基础-03)
- 有个程序媛上司是什么体验
- Python.json.常见两个错误处理(Expecting , delimiter)(Invalid control character at)
- was expecting double-quote to start field name错误