docker run中的-itd参数正确使用

Dockerrun用于通过镜像创建容器,-idt参数用于交互式后台运行。-i保持终端激活,-t分配伪终端,-d使容器在后台运行。dockerexec则是在运行容器中执行命令。-it常一起使用,提供交互式终端。容器执行的命令结束,容器会自动关闭。文章还提到了其他常用命令如-a,-p,-v等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. docker run 命令

docker run 命令的作用是通过镜像(image)创建一个docker容器。如果本地没有相关镜像会自动从远程仓库拉取(镜像)到本地,再进行创建容器。

2. -idt参数说明

简写的参数一般都是英文单词的简写,理解了单词的意思会加强记忆。使用的过程

  • -i,--interactive,以交互模式运行容器,并保持终端激活。
    注:交互就是用户输入命令,机器执行命令,并提供返回结果。那么在哪里输入命令呢?得有一个终端吧,所以这个命令必须与 -a 或 -t 命令配合使用。-a 选项用于指定将容器的标准输出连接到终端。使用 -t 选项创建的容器会分配一个伪终端,并将容器的标准输入、输出和错误连接到该终端。

  • -t,--tty:为容器分配一个伪终端。

  • -d,--detach:以后台模式运行容器,并返回容器ID
    如果在 docker run -it 不使用 -d 那么启动容器后如果你使用 ctrl+c 或 exit 退出交互模式,docker容器会停止运行。

3. docker run 什么情况下使用-itd

-d 使用场景

一般创建的docker容器都需要使用 -d ,除非你想创建一个前台运行的容器,操作完成后就想让它停止。但停止运行的docker容器并不会销毁。一般情况下你想使用一个一次性的容器,也就是使用完让它自己销毁,你可以使用 --rm命令,如:docker run --rm 显然,--rm 选项不能与 -d 同时使用(或者说同时使用没有意义)。一般 --rm 会用在自动部署,使用完自动销毁。

即使使用了-d命令,一旦容器执行的命令执行结束,容器也会自己关闭,停止运行

-it 使用场景

根据上面的解释,-it 一般会同时使用。

  • 有启动命令:有些镜像在制作时指定了容器启动的命令 [cmd] ,即:docker容器运行时需要执行的命令,这样的镜像使用 docker run 生成容器时不需要再指定容器初始运行的命令。
    如: 使用nginx的(未指定版本默认为latest版本,即 nginx:latest ,如果指定版本:nginx:1.19 )镜像生成一个docker容器:docker run -d nginx

  • 没有启动命令:有些未指定容器启动命令的需要在生成容器时指定命令,如果不指定则会报错:Error response from daemon: No command specified. ,是说没有指定执行命令。需要指定,如:docker run -d test_image:2.0 /bin/bash,这种情况因为启动命令是/bin/bash。这个容器启动后会立马退出,这是因为/bin/bash命令是一个交互式命令,它需要与用户进行交互并等待用户输入命令。在后台运行时,没有用户与容器进行交互,因此bash进程在启动后立即退出。这种情况可以修改为 docker run -id test_image:2.0 /bin/bash 或 docker run -td test_image:2.0 /bin/bash 或 docker run -itd test_image:2.0 /bin/bash

4. docker exec 中 -it

docker exec 命令用于在运行中的容器中执行命令,必须在容器启动的情况下执行。
有时不需要使用交互式执行命令就直接不使用 -it ,一般这种是自动部署或更新容器内程序时直接在宿主机操作的命令。如删除容器内的文件:docker exec nginx rm -rf /var/logs/nginx.log 

docker exec 中的 -it 参数和 docker run 中相同。==docker exec中的 -it 不会受 docker run的参数影响。他们是两个工具,只要 docker run 把容器启动了,docker exec 执行什么命令是它的事 ==

5. docker run 的其他常用命令

  • -a, --attach: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项。
  • -p, --publish:发布容器端口到主机端口。常用:端口映射到宿主机
  • -v, --volume:绑定容器挂载点到主机目录。常用:文件(夹)映射到宿主机
  • -e, --env:设置环境变量。
  • -w, --workdir:设置容器的工作目录。docker exec -it进入容器后的默认目录
  • --name:为容器指定一个名称。
  • --net:指定容器的网络连接类型。
  • --link:将容器链接到另一个容器。
  • --expose:开放一个端口或一组端口。
  • --dns:指定容器使用的DNS服务器。
  • --rm:容器停止后自动删除。自动打包、编译部署,或自动测试时很常用

点击查看公众号更多文章

更新精彩文章请关注公众号:大胡几哥哥

### Docker 命令中 `-d` 和 `-it` 参数的区别及使用场景 #### 1. **`-d` 参数详解** `-d` 参数表示以分离模式(detached mode)运行容器。这意味着容器将在后台运行,而不会绑定到当前终端。这种模式下,用户的终端不会被阻塞,可以继续执行其他命令。 - 当指定 `-d` 参数时,Docker 启动容器后立即返回容器 ID,并将容器置于后台运行[^1]。 - 如果未使用 `-d` 参数,则容器将以前台模式运行,其输出会直接显示在当前终端上。此时,如果用户按 `Ctrl+C` 或退出交互模式,容器可能会停止运行[^1]。 示例: ```bash docker run -d nginx ``` 这条命令启动了一个 Nginx 容器,并使其以后台模式运行。用户可以通过 `docker ps` 查看正在运行的容器状态。 --- #### 2. **`-it` 参数详解** `-it` 是 `-i` 和 `-t` 的组合参数,具有以下功能: - **`-i`(或 `--interactive`)**:保持容器的标准输入始终打开,即使没有附加终端。这使得可以在容器内实时输入命令并与之交互[^3]。 - **`-t`(或 `--tty`)**:为容器分配一个伪终端(pseudo-TTY),从而提供类似本地终端的操作体验。它主要用于支持交互式应用程序,例如 Shell 环境。 综合来看,`-it` 参数的作用是创建一个带有交互式终端的环境,适合需要手动操作容器内的场景。 示例: ```bash docker run -it ubuntu /bin/bash ``` 这条命令启动了一个基于 Ubuntu 镜像的容器,并进入其交互式 Bash 终端。用户可以直接在容器内执行命令。 --- #### 3. **两者的区别与适用场景** | 参数 | 功能描述 | 使用场景 | |---------|----------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------| | `-d` | 让容器以后台模式运行,释放当前终端 | 适用于不需要与容器交互的任务,例如 Web 服务器、数据库服务等长期运行的服务 | | `-it` | 创建一个交互式终端,允许用户向容器发送命令并查看输出 | 适用于需要与容器交互的场景,例如调试应用、测试镜像、运行交互式工具 | --- #### 4. **结合使用的案例分析** 有时可以根据需求同时使用 `-d` 和 `-it` 参数。例如,在某些情况下,可能希望容器以后台模式运行,但仍保留交互能力以便稍后进入容器进行排查或其他操作。 示例: ```bash docker run -itd --name my_container ubuntu ``` 这条命令启动了一个名为 `my_container` 的 Ubuntu 容器容器以后台模式运行,但仍然具备交互式终端的功能。随后可通过以下命令重新连接到该容器: ```bash docker exec -it my_container /bin/bash ``` --- #### 5. **注意事项** - 如果仅使用 `-d` 参数而不加 `-it`,则无法通过默认方式进入容器的交互式终端。在这种情况下,需借助 `docker attach` 或 `docker exec` 来实现交互。 - 对于长时间运行的服务型容器(如 MySQL、Nginx),建议优先使用 `-d` 参数;而对于临时性的调试或实验性任务,可以选择 `-it` 参数--- ### 示例代码对比 以下是单独使用 `-d` 和 `-it` 参数的效果对比: ```bash # 单独使用 -d 参数 docker run -d --name web_server nginx # 单独使用 -it 参数 docker run -it --name test_env ubuntu /bin/bash # 结合使用 -itd 参数 docker run -itd --name background_interactive ubuntu ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值