docker容器的標(biāo)準(zhǔn)輸入輸出全過程
- AttachStdin
- AttachStdout
- AttachStderr
- OpenStdin
- StdinOnce
- Tty
一、參數(shù)介紹
1.1. “AttachStdin”
- 含義:容器啟動時是否將標(biāo)準(zhǔn)輸入(stdin)附加到 Docker 客戶端(即當(dāng)前終端)。
- 值類型:布爾值(true/false)。
作用:
- true:允許用戶通過終端向容器發(fā)送輸入(如鍵盤輸入)。
- false:容器的標(biāo)準(zhǔn)輸入不附加到終端。
典型場景:交互式容器(如 docker run -it)。
1.2. “AttachStdout”
- 含義:容器啟動時是否將標(biāo)準(zhǔn)輸出(stdout)附加到 Docker 客戶端。
- 值類型:布爾值(true/false)。
作用:
- true:容器的標(biāo)準(zhǔn)輸出會實時顯示在終端。
- false:標(biāo)準(zhǔn)輸出不會顯示在終端,但可能寫入日志文件。
典型場景:查看容器的輸出日志(如 docker run 時默認啟用)。
1.3. “AttachStderr”
- 含義:容器啟動時是否將標(biāo)準(zhǔn)錯誤(stderr)附加到 Docker 客戶端。
- 值類型:布爾值(true/false)。
作用:
- true:容器的標(biāo)準(zhǔn)錯誤會實時顯示在終端。
- false:標(biāo)準(zhǔn)錯誤不會顯示在終端,但可能寫入日志文件。
典型場景:調(diào)試容器錯誤信息(如 docker run 時默認啟用)。
1.4. “OpenStdin”
- 含義:是否保持標(biāo)準(zhǔn)輸入(stdin)打開。
- 值類型:布爾值(true/false)。
作用:
- true:即使容器未運行交互式命令,也保持 stdin 打開(允許后續(xù)輸入)。
- false:stdin 關(guān)閉(無法通過終端發(fā)送輸入)。
典型場景:需要持續(xù)輸入的容器(如 docker run -i)。
1.5. “StdinOnce”
- 含義:標(biāo)準(zhǔn)輸入(stdin)是否在第一次關(guān)閉后不再接受輸入。
- 值類型:布爾值(true/false)。
作用:
- true:容器在讀取完 stdin 后關(guān)閉輸入流(適用于一次性命令)。
- false:stdin 持續(xù)保持打開(適用于交互式命令)。
典型場景:一次性命令(如 docker run -i --rm)。
1.6. “Tty”
- 含義:是否為容器分配偽終端(Pseudo TTY)。
- 值類型:布爾值(true/false)。
作用:
- true:分配偽終端,支持交互式操作(如運行 shell)。
- false:不分配終端,適合后臺服務(wù)。
典型場景:交互式調(diào)試(docker run -it)或后臺服務(wù)(docker run -d)。
1.7. 總結(jié)
| 字段 | 作用 | 典型命令參數(shù) |
|---|---|---|
| AttachStdin | 是否附加 stdin 到終端 | -i |
| AttachStdout | 是否附加 stdout 到終端 | 默認啟用 |
| AttachStderr | 是否附加 stderr 到終端 | 默認啟用 |
| OpenStdin | 是否保持 stdin 打開 | -i |
| StdinOnce | stdin 是否在第一次關(guān)閉后終止 | –rm 或一次性命令 |
| Tty | 是否分配偽終端 | -t |
二、命令排列組合和輸入輸出對應(yīng)關(guān)系
2.1. 參數(shù)組合與命令行映射
| Docker 命令參數(shù) | 對應(yīng)字段 | 說明 |
|---|---|---|
| -i | “OpenStdin”: true | 保持 stdin 打開,允許輸入。 |
| -t | “Tty”: true | 分配偽終端(PTY),通常與 -i 聯(lián)用(如 docker run -it)。 |
| 無 -i | “OpenStdin”: false | stdin 關(guān)閉,無法輸入。 |
| 無 -t | “Tty”: false | 不分配偽終端。 |
2.2. 交互式容器
docker run -it ubuntu bash
對應(yīng)字段值:
- “AttachStdin”: true
- “OpenStdin”: true
- “Tty”: true
- “StdinOnce”: false
2.3. 后臺服務(wù)容器
docker run -d nginx
對應(yīng)字段值:
- “AttachStdin”: false
- “OpenStdin”: false
- “Tty”: false
- “StdinOnce”: false
2.4. 一次性命令容器
docker run --rm alpine echo "Hello World"
對應(yīng)字段值:
- “AttachStdin”: false
- “OpenStdin”: false
- “Tty”: false
- “StdinOnce”: true
三、-d 的作用
| 字段 | 作用 | 與 -d 的關(guān)系 |
|---|---|---|
| “AttachStdout” | 是否將 stdout 附加到終端 | 使用 -d 時通常為 false |
| “AttachStderr” | 是否將 stderr 附加到終端 | 使用 -d 時通常為 false |
| “Tty” | 是否分配偽終端(PTY) | 使用 -d 時通常為 false(除非同時使用 -t) |
| “OpenStdin” | 是否保持 stdin 打開 | 使用 -d 時通常為 false |
3.1、默認 docker run
- 不加-d
docker run centos:1.0 /bin/bash
| 字段 | 值 |
|---|---|
| “AttachStdin” | false |
| “AttachStdout” | true |
| “AttachStderr” | true |
| “Tty” | false |
| “OpenStdin” | false |
| “StdinOnce” | false |
- -d
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
- -i
docker run -i centos:1.0 /bin/bash
| 字段 | 值 |
|---|---|
| “AttachStdin” | true |
| “AttachStdout” | true |
| “AttachStderr” | true |
| “Tty” | false |
| “OpenStdin” | true |
| “StdinOnce” | true |
- -d -i
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
- -t
docker run -t centos:1.0 /bin/bash
| 字段 | 值 |
|---|---|
| “AttachStdin” | false |
| “AttachStdout” | true |
| “AttachStderr” | true |
| “Tty” | true |
| “OpenStdin” | false |
| “StdinOnce” | false |
- -t -d
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
- -it
docker run -it centos:1.0 /bin/bash
| 字段 | 值 |
|---|---|
| “AttachStdin” | true |
| “AttachStdout” | true |
| “AttachStderr” | true |
| “Tty” | true |
| “OpenStdin” | true |
| “StdinOnce” | true |
- -itd
docker run -itd centos:1.0 /bin/bash
| 字段 | 值 |
|---|---|
| “AttachStdin” | false |
| “AttachStdout” | false |
| “AttachStderr” | false |
| “Tty” | true |
| “OpenStdin” | true |
| “StdinOnce” | false |
四、常見問題
4.1. 為什么 “OpenStdin” 為 true 但無法輸入?
- 需同時啟用 “AttachStdin”: true(通過 docker run -i)。
- 示例:docker run -i ubuntu 會啟用 “OpenStdin”: true,但需配合 -t 才能交互。
4.2. “StdinOnce”: true 的作用是什么?
- 容器在讀取完 stdin 后關(guān)閉輸入流,適合一次性命令(如 echo、cat)。
- 示例:docker run --rm alpine cat 輸入后按 Ctrl+D 退出。
4.3. 如何讓容器后臺運行但仍能查看日志?
- 使用 -d(后臺運行),并依賴 “AttachStdout” 和 “AttachStderr” 的默認值(true)。
- 示例:docker run -d nginx 會輸出日志到終端(除非重定向)。
五、總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker網(wǎng)絡(luò)端口映射的實現(xiàn)步驟
本文主要介紹了docker網(wǎng)絡(luò)端口映射的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Gitlab-runner+Docker實現(xiàn)自動部署SpringBoot項目
這篇文章主要介紹了Gitlab-runner+Docker自動部署SpringBoot項目,我們的主要流程就是通過Gitlab管理代碼,然后利用Gitlab自帶的Gitlab?CI/CD功能與GitlabRunner進行注冊綁定,需要的朋友可以參考下2022-04-04
Docker網(wǎng)絡(luò)原理及自定義網(wǎng)絡(luò)詳細解析
一般使用自定義網(wǎng)絡(luò),自定義網(wǎng)絡(luò)使用network創(chuàng)建,創(chuàng)建時可以指定子網(wǎng)網(wǎng)段及網(wǎng)關(guān)等信息,在創(chuàng)建并啟動容器時指定使用的網(wǎng)絡(luò),今天通過本文給大家介紹Docker網(wǎng)絡(luò)原理及自定義網(wǎng)絡(luò)的相關(guān)知識,感興趣的朋友一起看看吧2021-05-05
Docker容器啟動報錯“permission?denied”原因分析及解決方案
Docker容器已經(jīng)成為云計算后又一個很火的技術(shù),很多人已經(jīng)開始學(xué)習(xí)docker了,這篇文章主要介紹了Docker容器啟動報錯“permission?denied”原因分析及解決方案的相關(guān)資料,需要的朋友可以參考下2025-07-07

