docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker容器的标准输入输出

docker容器的标准输入输出全过程

作者:岳来

文章主要介绍了Docker容器的参数设置,包括AttachStdin、AttachStdout、AttachStderr、OpenStdin、StdinOnce和Tty等字段的含义和作用,并通过命令排列组合和输入输出对应关系详细说明了这些参数的使用场景

一、参数介绍

1.1. “AttachStdin”

作用:

典型场景:交互式容器(如 docker run -it)。

1.2. “AttachStdout”

作用:

典型场景:查看容器的输出日志(如 docker run 时默认启用)。

1.3. “AttachStderr”

作用:

典型场景:调试容器错误信息(如 docker run 时默认启用)。

1.4. “OpenStdin”

作用:

典型场景:需要持续输入的容器(如 docker run -i)。

1.5. “StdinOnce”

作用:

典型场景:一次性命令(如 docker run -i --rm)。

1.6. “Tty”

作用:

典型场景:交互式调试(docker run -it)或后台服务(docker run -d)。

1.7. 总结

字段作用典型命令参数
AttachStdin是否附加 stdin 到终端-i
AttachStdout是否附加 stdout 到终端默认启用
AttachStderr是否附加 stderr 到终端默认启用
OpenStdin是否保持 stdin 打开-i
StdinOncestdin 是否在第一次关闭后终止–rm 或一次性命令
Tty是否分配伪终端-t

二、命令排列组合和输入输出对应关系

2.1. 参数组合与命令行映射

Docker 命令参数对应字段说明
-i“OpenStdin”: true保持 stdin 打开,允许输入。
-t“Tty”: true分配伪终端(PTY),通常与 -i 联用(如 docker run -it)。
无 -i“OpenStdin”: falsestdin 关闭,无法输入。
无 -t“Tty”: false不分配伪终端。

2.2. 交互式容器

docker run -it ubuntu bash

对应字段值:

2.3. 后台服务容器

docker run -d nginx

对应字段值:

2.4. 一次性命令容器

docker run --rm alpine echo "Hello World"

对应字段值:

三、-d 的作用

字段作用与 -d 的关系
“AttachStdout”是否将 stdout 附加到终端使用 -d 时通常为 false
“AttachStderr”是否将 stderr 附加到终端使用 -d 时通常为 false
“Tty”是否分配伪终端(PTY)使用 -d 时通常为 false(除非同时使用 -t)
“OpenStdin”是否保持 stdin 打开使用 -d 时通常为 false

3.1、默认 docker run

docker run centos:1.0 /bin/bash
字段
“AttachStdin”false
“AttachStdout”true
“AttachStderr”true
“Tty”false
“OpenStdin”false
“StdinOnce”false
docker run -d centos:1.0 /bin/bash
字段
“AttachStdin”false
“AttachStdout”false
“AttachStderr”false
“Tty”false
“OpenStdin”false
“StdinOnce”false

3.2、默认 docker run -i

docker run -i centos:1.0 /bin/bash
字段
“AttachStdin”true
“AttachStdout”true
“AttachStderr”true
“Tty”false
“OpenStdin”true
“StdinOnce”true
docker run -i -d centos:1.0 /bin/bash
字段
“AttachStdin”false
“AttachStdout”false
“AttachStderr”false
“Tty”false
“OpenStdin”true
“StdinOnce”false

3.3、默认 docker run -t

docker run -t centos:1.0 /bin/bash
字段
“AttachStdin”false
“AttachStdout”true
“AttachStderr”true
“Tty”true
“OpenStdin”false
“StdinOnce”false
docker run -t -d centos:1.0 /bin/bash
字段
“AttachStdin”false
“AttachStdout”false
“AttachStderr”false
“Tty”true
“OpenStdin”false
“StdinOnce”false

3.4、默认 docker run -it

docker run -it  centos:1.0 /bin/bash
字段
“AttachStdin”true
“AttachStdout”true
“AttachStderr”true
“Tty”true
“OpenStdin”true
“StdinOnce”true
docker run -itd centos:1.0 /bin/bash
字段
“AttachStdin”false
“AttachStdout”false
“AttachStderr”false
“Tty”true
“OpenStdin”true
“StdinOnce”false

四、常见问题

4.1. 为什么 “OpenStdin” 为 true 但无法输入?

4.2. “StdinOnce”: true 的作用是什么?

4.3. 如何让容器后台运行但仍能查看日志?

五、总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文