還在用 docker run it 啟動互動容器?專家拆解5大常見操作誤區與效能陷阱

許多 Docker 初學者甚至有一定經驗的開發者,都習慣性地使用 `docker run -it` 來啟動一個互動式容器,認為這只是開啟一個可輸入指令的 Bash Shell 咁簡單。但係,呢個看似基礎嘅命令,背後其實涉及偽終端(pseudo-TTY)分配、標準輸入(stdin)串流互動、容器生命週期管理同資源控制等多個關鍵技術細節。盲目使用 `-it` 參數,可能會導致容器無法在後臺運行、日誌收集困難,甚至產生殭屍進程等問題。本文將以 2026 年最新嘅 Docker 實踐為基準,為您深入剖析 `docker run -it` 中 `-i`(互動模式)與 `-t`(分配終端)兩個標誌嘅獨立作用、合併使用時機,以及同 `-d`(後臺運行)參數嘅搭配策略。我哋會拆解五大常見操作陷阱,包括終端依賴導致自動化腳本失敗、資源未正確釋放,以及點樣更精準地使用 `docker exec -it` 進入運行中容器,助您從根本理解並優化容器操作流程,提升開發與部署效率。
docker run it - Docker

AboutDockerProfessional illustrations

Docker run -it 詳解 (2026最新)

好喇,等我哋深入淺出咁講下2026年最新嘅 Docker run -it 點用啦。呢個指令可以話係玩 Docker 嘅基本功,尤其係當你想同個容器(Container)進行即時互動嗰陣,-it 呢兩個參數就係你嘅好朋友。簡單啲講,-i 同 -t 通常會一齊用,-i 係 interactive 嘅意思,即係話保持標準輸入(stdin)打開,等你可以打指令入去;而 -t 就係 allocate 一個 pseudo-TTY,即係虛擬終端機,令到個容器嘅輸出好似你平時用緊個 Terminal 咁樣,有齊啲顏色同格式,唔會出啲亂碼。所以,docker run -it 就係用嚟啟動一個容器,並且即刻進入一個互動模式(interactive mode),同佢裏面嘅 shell(例如 bash)直接對話。

舉個最經典嘅例子,你想即刻拉一個 Ubuntu 鏡像落嚟,然後入去個容器裏面行吓指令睇吓,你就可以打「docker run -it ubuntu bash」。咁樣 Docker 就會幫你拉最新嘅 Ubuntu 鏡像(如果本地冇嘅話),然後用互動模式啟動一個容器,並且執行 bash 呢個 shell。一瞬間,你就會發現自己個終端機已經「進入咗」呢個全新嘅 Ubuntu 容器裏面,可以隨便行 ls、pwd 呢啲指令,好似用緊一部獨立嘅 Linux 主機咁。呢個對於快速測試、安裝吓套件、或者檢查鏡像內容係超級方便。記住,當你打 exit 離開呢個 bash shell 嘅時候,成個容器就會因為主進程結束而停止運行,因為佢唔係喺後臺運行(detached mode)。

咁可能你會問,如果我唔係想即刻互動,而係想個容器好似 Nginx 或者 MySQL 呢啲常駐服務咁,一開波就喺背景執行(後臺運行)呢?咁你就要用 -d 參數,即係 detached mode。例如「docker run -d -p 80:80 nginx」,咁樣個 Nginx 容器就會喺背景默默運行,唔會霸住你個終端機。但係,如果個 Nginx 容器行行下有事,你想入去睇吓個設定檔或者 log 檔,咁點算呢?呢個時候,-it 嘅兄弟指令 docker exec 就出場喇。你可以用「docker exec -it 你個容器名或ID bash」嚟附加到一個已經喺運行緊嘅容器裏面,同樣開啟一個互動式終端。呢個方法係 2026 年做容器偵錯(debug)嘅標準做法,因為佢唔會影響到原本容器主進程嘅運行,安全又靈活。

講開又講,有啲新手可能會將 docker attach 同 docker exec -it 搞亂。docker attach 係直接連接到容器最初啟動時嘅主進程,如果你當初係用 docker run -it 啟動咗個容器然後行緊 bash,咁 attach 翻上去係冇問題。但如果你個容器係行緊 Nginx 呢類服務,你 attach 上去就會睇到 Nginx 嘅輸出 log,但你打指令係冇反應嘅,因為主進程唔係 shell。所以,普遍嚟講,想同運行中嘅容器交互,用 docker exec -it 會更加穩陣同可控。好似 Will 保哥喺 The Will Will Web 都提過,互動模式係管理容器嘅利器。

另外,-it 呢個組合對於一啲輕量級工具鏡像亦都好有用。例如你想快速測試一個網絡指令,可以拉個 busybox 鏡像落嚟,用「docker run -it --rm busybox」嚟行一個即用即棄嘅容器,用完 --rm 參數會自動幫你清理,唔使驚留低一堆停止咗嘅容器。又或者,你想測試吓 SQL Server 喺 Linux 容器裏面嘅連線,都可以用 -it 模式啟動,再配合 docker exec 入去行 sqlcmd。總而言之,掌握 -it 同 -d 呢兩個命令列參數嘅分別同應用場景,係由菜鳥教程階段升級去實戰嘅關鍵一步。記住,互動模式(-it)用於需要即時輸入輸出嘅任務,而卸離模式(-d)就用於需要長期背景執行嘅服務,好似係 MySQL 或者網站伺服器咁。搞清楚呢點,你喺 Stack Overflow 或者 CSDN博客 睇人哋嘅 Docker 教學時,就會更加得心應手,知道點解人哋有時用 -it,有時又用 -d,甚至有時 -itd 一齊用(即係後臺運行但保留互動能力嘅配置)啦。

docker run it - 容器

About容器Professional illustrations

必學:-it 參數核心作用

好啦,各位Docker新手同老手,今次我哋一定要深入拆解吓 docker run -it 呢個組合拳嘅核心作用。好多朋友,尤其係啱啱睇完菜鳥教程或者係Stack Overflow上面嘅例子,都會有個疑問:點解人哋run個容器,好似Ubuntu或者busybox呢類鏡像,總係要加個 -it?唔加又會點?同埋點解我run MySQL 或者 Nginx 呢類常駐服務嘅時候,又唔見要用 -it,反而用 -d 多?呢個就係今次要搞清楚嘅重點,亦係掌握容器交互嘅關鍵第一步。

首先,我哋要拆開 -i-t 呢兩個命令列參數嚟睇。-iinteractive 嘅縮寫,意思係開啟互動模式。佢嘅核心作用,就係保持住標準輸入輸出 (stdin) 嘅通道打開。簡單啲講,即係個容器入面嘅程式,可以「聽到」你喺外面(即係宿主機嘅終端機)打嘅指令,同埋可以將輸出「講返」俾你聽。如果冇咗 -i,你個容器程式可能一啟動就自己行完,或者停咗喺度等你輸入,但係你根本冇辦法傳任何指令入去,個通道係閂咗嘅。而 -t 呢,就係 tty 嘅縮寫,佢會幫你分配一個虛擬終端機 (pseudo-terminal)。呢個參數嘅作用,係令到你同容器嘅互動,好似真係登入咗一部Linux伺服器咁,有齊終端機嘅功能,例如可以清屏、用方向鍵翻查歷史命令、甚至支援啲彩色輸出同特別格式。通常 -i-t 係一齊用,所以先會寫成 -it。呢個組合就係為咗俾你一個完整、好用嘅交互模式終端體驗。

咁實際應用係點呢?舉個最常見嘅例子。你想即時咁,喺一個乾淨嘅Ubuntu 容器入面行吓命令,探索吓或者裝啲嘢試吓。你就會用 docker run -it ubuntu bash。呢句命令嘅意思係:請Docker幫我開一個新容器,用Ubuntu鏡像,並且用互動模式同分配虛擬終端機,一開波就執行 bash 呢個Shell程式。因為有咗 -it,個容器一啟動,你就會直接進入到一個可以打命令嘅bash環境入面,好似SSH入咗部機咁。你可以行 ls, pwd, apt update 等等。呢個時候,個容器嘅生命週期,就同你呢個互動模式嘅會話綁埋一齊。如果你打 exit 或者按 Ctrl+D 離開bash,咁成個容器就會因為主要進程(bash)結束而一齊停止運行。呢個就係典型嘅互動模式用途,非常適合做臨時檢查、測試或者學習。

但係,如果你冇加 -it,直接 docker run ubuntu bash,會發生咩事?個容器會啟動,執行bash,但因為冇開啟標準輸入bash 發現冇嘢好做,亦等唔到你嘅輸入,於是就會即刻結束。結果就係,個容器會「閃退」,你喺 docker ps -a 睇返,會見到佢狀態係 Exited (0)。你根本冇機會同佢互動。同樣道理,如果你淨係加 -i 而冇 -t,個互動體驗會好奇怪,你可能可以打字入去,但個輸出格式會亂晒,冇咗終端機嘅好多便利功能。所以,當你想「進入」一個容器嘅命令列環境時,-it 呢對孖寶幾乎係必須嘅。

咁係咪所有情況都要 -it 呢?梗係唔係啦!呢度就要講到另一個常見嘅 -d 參數,即係 detached mode(卸離模式)。當你要運行一啲常駐服務,例如 MySQLNginx 或者 SQL Server 呢類容器,你嘅目的唔係要同佢嘅命令列互動,而係想佢喺背景執行,默默提供服務。呢個時候,你就會用 docker run -d mysql。個容器一啟動就會喺後臺運行,唔會霸住你而家個終端機視窗。你可以繼續用呢個視窗做其他嘢,或者直接閂咗佢都得,個容器服務會繼續運行。呢個就係 -d 嘅核心作用,同 -it 嘅用途完全相反。好似Will 保哥喺佢個網誌 The Will Will Web 都經常提,要識得分清楚咩時候用 -it 做互動測試,咩時候用 -d 做背景服務。

講開又講,好多新手會混淆 docker run -it 同 docker exec -it 同埋 docker attach。我哋順便釐清吓。docker run -it 係用嚟「創建並啟動」一個新容器,然後即刻進入互動。而 docker exec -it 就係用喺一個「已經運行緊」嘅容器身上。例如你個 MySQL 容器用 -d 模式行緊,但你想入去檢查吓入面嘅文件,你就可以用 docker exec -it [容器ID] bash 去開一個新嘅互動模式會話,連入去呢個運行中嘅容器。至於 docker attach,就係直接連接到容器「最初啟動時」嘅主進程,如果主進程唔係一個Shell(例如係MySQL服務進程),你attach入去可能只會見到一堆日誌,打命令係冇反應嘅,而且如果你按Ctrl+C,可能會直接殺死個主進程導致容器停止,所以使用要好小心。網上唔少 CSDN博客 嘅文章都會提醒呢一點。

總結返,-it 參數核心作用就係為咗畀你一個完整、順暢嘅終端機介面,去同你個容器進行即時互動。無論你係想快速試用一個新鏡像,定係要喺容器內進行除錯、安裝軟件,-it 都係你打通呢條交互模式通道嘅鎖匙。記住,當你想「入去行下命令」嘅時候,就諗起 -it;當你想「放個服務喺後台」嘅時候,就諗起 -d。掌握呢個基本概念,你對Docker容器生命週期嘅控制,就已經踏出咗非常紮實嘅一步。

docker run it - bash

AboutbashProfessional illustrations

背景執行 (-d) 實戰教學

好啦,講完互動模式,今次我哋就專注喺 背景執行,即係用 -d 參數 嘅實戰教學。呢個係 Docker 日常操作嘅核心技巧,尤其當你想運行一啲 常駐服務,好似 MySQLNginx 或者 SQL Server 呢類 容器,你總唔會想個 虛擬終端機 霸住你個主機 Terminal 掛?用 -d 參數(Detached Mode,即係 卸離模式)就可以完美解決呢個問題,令到個 容器後臺運行,唔會阻塞你而家嘅命令列,你可以繼續做其他嘢。

咁點用呢?好簡單,基本句式就係「docker run -d [鏡像名]」。我哋即刻用 busybox 呢個細鏡像做個簡單示範。如果你直接打「docker run busybox sleep 30」,你會發現個 Terminal 會卡住三十秒,因為佢係前臺運行。但如果你用「docker run -d busybox sleep 30」,命令一執行完,Docker 即刻會俾返個 容器 ID 你,然後個 容器 就已經喺背景靜靜雞執行緊個 sleep 命令啦。你可以用「docker ps」去確認佢係咪真係行緊,三十秒後再用「docker ps -a」就會見到佢完成咗任務然後停止咗。呢個就係 背景執行 嘅最基本概念:容器 自己獨立運行,同你當前嘅 標準輸入輸出 脫鉤。

當然,實戰唔會只係 run 個 sleep 咁簡單。我哋嚟 run 一啲真正有用嘅服務。例如,你想喺本地快速起個 MySQL 資料庫做測試,條命令會係類似「docker run -d --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:latest」。見到冇?我哋加咗「-d」,所以個 MySQL 容器 會喺背景啟動,仲幫佢改咗個名(--name)同設定環境變數(-e)。同樣道理,運行一個 Nginx 網頁伺服器都係一樣:「docker run -d --name my-web -p 8080:80 nginx」。呢度多咗個「-p」參數做 端口映射,將主機嘅 8080 port 對應去 容器 嘅 80 port。執行之後,你喺瀏覽器打「localhost:8080」就已經見到 Nginx 歡迎頁面,而你的 Terminal 一路都係自由身,可以繼續打其他 docker run 命令或者做任何 Linux/Ubuntu 操作。

咁問題嚟啦,個 容器 行咗喺背景,我點樣同佢互動或者睇佢嘅 Log 呢?呢度就引出

docker run it - docker

AboutdockerProfessional illustrations

常見 Docker run 錯誤解法

好啦,講到 Docker run 嘅常見錯誤,真係可以寫到一本書咁厚,尤其係啲新手,好易喺啲參數同模式之間撈亂晒,搞到個容器唔係行唔到,就係一閃即逝,或者入唔到去操作。呢度就同大家拆解幾個最常見嘅「中伏位」同埋點樣拆彈。

首先,最多人撞板嘅一定係 docker run互動模式 (interactive mode)後臺運行 (detached mode) 嘅分別。好多朋友想行一個好似 Ubuntu 或者 busybox 呢類 鏡像 嚟玩下 bash,好自然就會打 docker run ubuntu bash,但打完之後個 容器 好似冇反應,即刻就停咗,心諗「咩事呀?」。其實呢,咁樣 run 完,個容器執行完 bash 命令就會自動退出。你要同個容器保持 互動,就一定要加返 -it 參數(即係 -i 用於保持標準輸入輸出,-t 用於分配一個 虛擬終端機 (pseudo-terminal))。所以正確做法係 docker run -it ubuntu bash,咁你先可以喺入面打命令。相反,如果你係要行一個 常駐服務,例如 MySQLNginx 或者 SQL Server,你就要加 -d 參數 等佢喺 背景執行,例如 docker run -d -p 3306:3306 mysql。記住口訣:想入去玩就用 -it,想佢靜靜雞後臺服務就用 -d,兩隻模式好唔同。

跟住另一個熱門錯誤,就係點樣「進入」一個已經喺後臺運行緊嘅容器。好多新手會混淆 docker attachdocker exec 嘅用法。如果你用 docker attach 去連一個行緊 MySQL 服務嘅容器,你會發現個終端機一片空白或者卡住,因為你 attach 咗去服務本身嘅輸出,但唔係一個可以互動嘅 Shell。更慘嘅係,如果你喺呢個 attach 咗嘅視窗按 Ctrl+C,好可能會直接停埋個主要服務進程,殺死個 容器!正確做法係用 docker exec,呢個命令係喺運行中嘅容器額外開一個新進程。想入去行 bash 或者睇嘢,就應該用 docker exec -it 你的容器ID bash(如果個 鏡像 有 bash 的話)。咁樣你入去檢查完,就算你 exit 咗,個主服務都唔會受影響,安全好多。呢個技巧喺管理 Linux 容器時極之重要。

仲有,關於 端口映射 嘅錯誤都唔少。成日有人問:「點解我 run 咗個 Nginx 容器,但係用 localhost:80 訪問唔到?」十居其九都係漏咗 -p 參數。Docker run命令列參數 次序雖然有時冇所謂,但最好養成習慣。例如 docker run -d -p 8080:80 --name my-web nginx,呢度就將宿主機嘅 8080 端口映射到容器內部嘅 80 端口。記住,唔做映射,個容器服務係同外界隔絕嘅。另外,如果話端口已被佔用,就要檢查吓係咪之前 run 過嘅容器未剷乾淨,或者係其他程式用緊。

最後提一提資源問題。有時 run 一啲大型數據庫如 SQL Server,如果冇指定足夠嘅記憶體,個容器可能會啟動失敗或者好慢。雖然 docker run 本身有參數可以限記憶體同 CPU,但預設通常係用宿主機嘅資源。如果遇到性能問題,可以去 Stack OverflowCSDN博客,或者台灣 Will 保哥The Will Will Web 呢類技術博客度睇吓,好多人分享過點樣優化。當然,內地嘅 菜鳥教程 都有齊基礎嘅參數解釋,幫你打好個底。總之,玩 Docker 撞板好正常,最緊要係識得睇錯誤訊息,同埋搞清楚每個參數背後嘅概念,咁就唔使驚啦。

docker run it - docker

AboutdockerProfessional illustrations

互動模式 vs 背景模式點揀?

好啦,講到 Docker 嘅 docker run 命令,新手最常問嘅問題就係:「究竟我應該用互動模式定係背景模式嚟行個 容器 呢?」呢個問題冇絕對答案,但揀錯咗真係會好麻煩,搞到你個 Container 唔聽話。等我哋用香港人最鍾意嘅「睇餸食飯」方式,拆解吓點樣揀先至最醒目。

首先,你要搞清楚兩者嘅本質分別。互動模式 通常就係用 -it 參數(即係 -i-t 嘅組合)。-i 代表保持標準輸入(stdin)開啟,等你可以同個容器「對話」;-t 就係分配一個 虛擬終端機,令到個輸出似模似樣,好似你直接喺部 Ubuntu 或者 Linux server 度打 command 咁。例如你想即時入去個 容器 度玩吓,試吓啲命令,咁你就會打 docker run -it ubuntu bash。呢個時候,你個 terminal 就會直接連住個容器嘅 bash shell,你可以即時執行 ls、pwd 呢啲指令,好似 remote login 咁,非常直接。但問題係,你一閂咗個 terminal 視窗,或者按 Ctrl+C,成個容器過程就會跟住停埋,因為你係「黏住」咗喺個互動 session 度。所以,呢個模式最適合啲一次性嘅偵錯、測試、或者學習用途,就好似你上 菜鳥教程 或者跟 Will 保哥The Will Will Web 學嘢咁,要即時見到反應。

相反,背景模式(又叫 卸離模式,英文係 detached mode)就係用 -d 參數。呢個模式嘅精髓在於「放低佢自己行」。你打 docker run -d nginx,命令一執行完,Docker 只係俾返個 容器 ID 你,然後就返返去你本身嘅命令列,個 Nginx 容器就喺後臺運行緊,默默咁處理啲 web request。呢個就係用來行常駐服務嘅王道,例如 MySQLSQL ServerNginx 呢啲,你唔會需要成日同佢個主程序「傾偈」,你只係想佢喺背景提供服務。想同呢啲背景容器互動點算?呢個時候就要出動 docker exec 呢個神器。例如你個 MySQL 容器行緊,你想入去整啲設定或者睇吓 log,你就可以打 docker exec -it 你個容器ID bash,咁就可以開一個新嘅互動式終端機連入去,做完嘢你 exit 咗,個主容器服務完全唔會受影響,繼續行緊,呢個就係 docker exec 同直接用 docker run -it 嘅最大分別。至於 docker attach,我哋一般少用,因為佢係直接連返去個容器最初嘅主進程,如果你用佢連去一個背景行緊嘅服務,你亂按鍵盤可能會搞停佢,所以新手要小心。

咁到底「點揀」呢?我俾幾個實戰情境你諗諗: 1. 你要測試一個新嘅鏡像,或者想即時探索一個輕量系統:例如你想拉個 busybox 鏡像落嚟,睇吓入面有咩工具,毫無疑問就用 docker run -it busybox sh。玩完,直接 exit,個容器任務完成就會自動停止,乾淨俐落。 2. 你要部署一個網站或者數據庫:呢個時候一定要用 -d 參數行背景模式。例如 docker run -d -p 8080:80 nginx,個 Nginx 就會喺背景常駐,仲做埋端口映射,等你用 browser 去 access。如果你唔小心用咗 -it 嚟行 Nginx,咁你個 terminal 就會被霸住,一閂就成個網站 down 咗,大鑊! 3. 你要行一個需要長期互動嘅應用程式:呢個情況比較少,但都有。例如你個程式係一個需要持續接收用戶輸入嘅腳本,咁你可能真係要用 -it 嚟行,並且唔可以閂 terminal。但更專業嘅做法,其實係將個程式設計成服務,用 -d 行,然後需要時先用 docker exec 去互動,咁樣彈性大好多。

簡單嚟講,記住一個口訣:「服務用 -d,偵錯用 -it」。你喺 Stack Overflow 或者 CSDN博客 睇到啲教學,如果叫人行 web server 但冇用 -d,你就要打醒十二分精神,睇清楚個 context。另外,有時啲複雜情況可以合併參數,例如 docker run -itd,呢個係乜嘢玩法?其實就係用 -it 分配好互動式終端機,但同時用 -d 叫佢行背景,呢個組合可以確保個容器準備好接受互動,但同時又唔會霸住你而家個 terminal,等你之後隨時用 docker exec 或者 docker attach 連入去都得,提供咗更大嘅靈活性。不過對於新手,我建議先清晰分開兩者用途,熟習咗先玩進階參數組合。

最後提多句,無論用邊個模式,都要記住 容器 嘅生命週期。背景行嘅容器,記得用 docker ps 睇住佢哋,唔用嘅就要識得 docker stop 同 docker rm 去清理,唔好令部機留低一大堆停咗嘅 容器,食晒你啲資源。揀啱模式,管理先會得心應手,唔會一頭煙。

docker run it - docker

AboutdockerProfessional illustrations

容器保持運行嘅秘訣

好啦,講到點樣令到 Docker 容器保持運行,唔好咁快自己停咗,呢個真係好多新手(甚至係睇完菜鳥教程之後)都會遇到嘅核心問題。好多時你 run 完一個容器,佢閃一下就退出了,個狀態變咗 Exited,搞到一頭霧水。其實呢,容器保持運行嘅秘訣,好大程度取決於你點樣理解同運用 docker run 嘅參數,特別係決定容器生命週期嘅關鍵:你 run 嘅係一個「任務」定係一個「服務」

首先,你要搞清楚一個根本概念:一個 Docker 容器嘅生命,同佢裏面運行緊嘅前臺進程(foreground process)係完全掛鉤嘅。個主進程一完,個容器就會自動停止。呢個設計好合理,因為容器本身就係為咗包裝一個特定進程而生。所以,如果你想個容器長開,你就要確保裏面有個進程係「長命」嘅,唔會做完就退出。例如,你 run 一個 Ubuntu 鏡像,如果只係執行 echo "hello" 呢類瞬間完成嘅命令,個容器自然會完。但如果你 run 嘅係 Nginx 或者 MySQL 呢類常駐服務,佢哋個主進程(例如 nginx -g 'daemon off;')就會一直運行,個容器就會一直保持 Up 狀態。

咁點樣喺命令行度控制呢?關鍵就喺 docker run 後面嗰堆參數度。最經典嘅組合就係 -it 呢對孖寶。-i(interactive)同 -t(pseudo-terminal)參數一齊用,就係為咗開啟一個互動模式,等你可以同容器入面嘅標準輸入輸出進行交互。好多時,我哋用 -it 嚟運行一個 bash shell(例如 docker run -it ubuntu bash),咁樣個容器嘅主進程就係 bash 呢個交互式 shell。只要個 bash 唔退出(即係你唔打 exit),個容器就會一直運行。呢個方法對於做測試、開發或者喺容器入面執行一系列 Linux 命令好有用,因為你可以「黏住」個虛擬終端機慢慢操作。但留意,呢個模式通常係「黏住」你當前嘅終端機,你一關閉終端或者按 Ctrl+C,個進程就會收到信號,可能導致容器停止。

如果你唔想被個終端機綁住,想個容器喺後臺運行(即係 detached mode),咁就要出動 -d 參數。用 docker run -d 嚟啟動容器,佢會立即返回一個容器 ID 俾你,然後個容器就會喺背景默默執行。呢個就係運行常駐服務嘅標準做法,例如 docker run -d -p 80:80 nginx,或者 docker run -d -e MYSQL_ROOT_PASSWORD=your_password mysql。呢啲服務鏡像本身嘅 Dockerfile 已經設定咗一個長運行嘅主進程,所以用 -d 模式就可以令佢喺背景保持運行,唔會阻塞你當前嘅命令行。你可以隨時用 docker logs 嚟睇佢嘅輸出,或者用 docker exec -it 容器名 bash 進入一個已經喺後臺運行緊嘅容器,開一個新嘅 bash 進程去做維護,而完全唔會影響到原本運行緊嘅 Nginx 或 MySQL 主進程。docker exec 呢個命令對於管理運行中嘅容器真係不可或缺。

不過,有時你會遇到一啲情況,個鏡像本身唔係設計做常駐服務,但又想佢保持運行唔好退出。除咗用 -it 運行交互式 bash 之外,仲有啲小技巧。例如,你可以用一啲永遠做唔完嘅命令嚟「撐住」個主進程。經典做法係用 tail -f /dev/null 或者 sleep infinity。你可以咁樣運行:docker run -d ubuntu tail -f /dev/null。咁樣,個 tail 命令會一直監住一個空文件,理論上永遠唔會結束,於是個容器就會一直喺後臺運行,等你隨時用 docker exec 入去執行其他命令。Busybox 呢類輕量鏡像都好常用呢招。另外,對於 SQL Server 或者一啲數據庫鏡像,佢哋本身已經有完善嘅初始化同進程管理,只要你配置正確(例如環境變數、volume 掛載),用 -d 模式運行就可以穩定常駐。

仲有一個命令叫 docker attach,可以將你本地嘅標準輸入輸出連接到一個已經喺運行中(通常係用 -d 啟動)嘅容器嘅主進程。呢個要小心使用,因為如果你 attach 去一個運行緊 Nginx 嘅容器,你可能睇唔到任何輸出(因為 Nginx 嘅日誌通常去咗其他地方),而且如果你按 Ctrl+C,可能會殺死個主進程,導致容器停止。一般嚟講,對於後臺服務,用 docker exec 進入會更安全同靈活。

總結番幾個實用要點:想容器保持運行,第一,要揀啱鏡像同命令(用常駐服務進程,或者用交互式 shell);第二,識得用對參數(前臺交互用 -it,後臺服務用 -d);第三,識得用 docker exec 呢把「萬能鎖匙」進入運行中嘅容器做嘢。網上好多資源好似 Stack Overflow、CSDN博客 或者 Will 保哥 嘅 The Will Will Web 都有大量真實案例討論,例如點樣解決「容器啟動後立即退出」呢類經典問題,核心都係圍繞住檢查主進程、睇日誌、同埋理解 -it 同 -d 嘅分別。記住,容器唔係虛擬機,佢係進程嘅封裝,掌握呢個思想,你就掌握咗令容器聽話長命嘅秘訣。

docker run it - MySQL

AboutMySQLProfessional illustrations

端口映射 (-p) 設定指南

好啦,講完點樣用 docker run -it-d 去控制個 容器 點樣行,係前臺定後臺,係時候要講下點樣將個 容器 裡面嘅服務,開放俾出面世界訪問啦。呢個就係 端口映射 (-p) 嘅魔法,亦係 Docker 入面最常用、最緊要嘅設定之一。簡單嚟講,端口映射 就係將你部 Ubuntu 或者 Linux 主機上面嘅某個埠號,同你 run 緊嘅 Container 裡面嘅埠號,做一個「橋樑」連接。如果無做呢個映射,就算你個 容器 裡面行緊 Nginx(聽緊 80 埠)或者 MySQL(聽緊 3306 埠),你係冇辦法直接從你部電腦嘅瀏覽器或者數據庫客戶端連入去嘅,因為個服務收埋咗係個隔離嘅環境入面。

點解要用 -p 參數?想像下你起咗個 MySQL 容器 嚟做開發,或者用 Nginx 做 web server,你總唔會次次都入去個 容器 裡面用 bash 睇嘢掛?你係想係自己部機,用工具直接連去個數據庫,或者係瀏覽器打 localhost 就見到個網頁。呢個時候,-p 就大派用場。個基本格式好簡單:-p [主機端口]:[容器端口]。例如你好經典咁 run 一個 Nginx 鏡像,命令就係 docker run -d -p 8080:80 nginx。呢句嘢意思係,將主機嘅 8080 端口,映射去 容器 內部嘅 80 端口(即係 Nginx 默認聽緊嗰個)。跟住你係自己部電腦開瀏覽器,打 http://localhost:8080,就會見到 Nginx 個歡迎頁面啦!個流量嘅路徑就係:你瀏覽器 -> 你電腦嘅 8080 埠 -> Docker 幫你轉發 -> 容器 內部嘅 80 埠 -> Nginx 服務。係咪好直接呢?

設定 -p 嘅時候有幾個實用技巧同常見情況要留意。首先,主機端口係可以隨便你揀嘅,只要唔衝突就得。比如你部機已經有個服務用緊 80 埠,你就可以好似上面咁,映射去 8080、8888 呢啲空閒端口。相反,容器端口 就一定要跟返個 鏡像 本身設計係聽緊邊個埠,呢個資訊通常可以去 Docker Hub 睇返個 鏡像 嘅說明,或者睇下個 Dockerfile 入面有冇 EXPOSE 指令。好似 MySQL 就係 3306,SQL Server 就係 1433。所以 run MySQL 嘅命令可能係 docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your_password mysql。咁樣你部機嘅數據庫管理工具就可以用 localhost:3306 連入去個 容器 裡面嘅 MySQL 啦。

進階少少,個映射仲可以玩得更靈活。你可以指定主機嘅 IP 地址,例如 -p 127.0.0.1:3306:3306,咁樣就只有你部機自己(localhost)可以連到呢個映射,出面網絡嘅其他機器就連唔到,安全啲。另外,如果你唔想諗主機用咩埠,可以只寫容器端口,例如 -p 80,咁 Docker 就會自動幫你揀一個主機嘅高位隨機端口(例如 49153)。你用 docker ps 命令就可以睇到實際映射咗去邊個埠,對於測試或者短暫服務好方便。不過要記住,-p 參數係可以同時用多次嘅!如果你個 容器 提供多個服務端口,你可以 -p 80:80 -p 443:443 咁樣一齊映射晒。

有啲朋友可能會撈亂,docker run 入面嘅 -p 同 Dockerfile 裡面嘅 EXPOSE 有咩分別?呢個係好多 菜鳥教程Stack Overflow 都多人問。簡單講,EXPOSE 只係一個「聲明」,話俾人知呢個 鏡像 設計上會用邊個端口,同埋方便用 --link 呢類舊式通信(而家唔多提倡用)。但係 EXPOSE 本身係 唔會 自動做端口映射去主機嘅!真正將個端口開放俾外面世界用,必須要靠 docker run(或者 docker-compose.yml)裡面嘅 -p 參數。所以,你係 CSDN博客 或者 The Will Will WebWill 保哥 嘅文章,都會強調呢個實際操作上嘅分別。

最後提多個實際情況。有時你 run 咗個 容器後臺運行(用咗 -d 參數),之後先發現漏咗設定端口映射,點算好?唔使驚,Docker 係唔支援直接修改一個運行緊嘅 容器 嘅端口映射嘅。你要做嘅係,停咗舊嗰個 容器,再用正確嘅 docker run 命令,連同 -p 參數重新起過一個新嘅。呢個時候,如果你之前有將數據 volume 映射出嚟,或者 set 咗環境變數,記得要一齊加返落新命令度。所以一開始設定嗰陣諗清楚個端口規劃,可以省返唔少麻煩。總括嚟講,熟練運用 -p 呢個 命令列參數,係掌控 Docker 容器 網絡對外溝通嘅關鍵一步,無論你係行緊常駐服務定係做緊測試,都一定要掌握好。

docker run it - Nginx

AboutNginxProfessional illustrations

實例示範:Nginx 容器部署

好,等我哋即刻用一個實例示範點樣用 docker run 嚟部署一個 Nginx 容器。呢個例子非常經典,可以幫你清楚理解點樣將一個鏡像變成一個運行緊嘅服務容器。我哋會由最簡單嘅指令開始,再逐步深入,講解點樣控制容器嘅運行模式,同埋點樣同佢互動。

首先,最基本嘅做法就係直接喺終端機打指令。假設我哋想用最新版嘅 Nginx 鏡像,個指令好簡單,就係 docker run nginx。當你執行呢句,Docker 會先檢查本地有冇呢個鏡像,冇嘅話就會自動去 Docker Hub 拉落嚟,然後啟動一個容器。不過,咁樣做有個問題,就係個容器會霸住你個 虛擬終端機,而且你一按 Ctrl+C,個 Nginx 容器就會停埋,唔係好適合用來運行 常駐服務。所以,我哋通常會加返個 -d 參數,即係 detached mode(卸離模式)。完整指令係 docker run -d --name my-nginx nginx。呢個 -d 選項就係等個容器去 背景執行,唔會 block 住你個 command line,個控制權會即刻返返俾你,非常之方便。而 --name 就係幫個容器改個名,方便之後管理,唔使下下對住堆亂碼嘅 Container ID。

跟住落嚟,我哋要處理 端口映射 呢個關鍵步驟。因為容器自己有個隔離嘅網絡環境,入面嘅 Nginx 默認喺 80 埠監聽,但係外面嘅世界係訪問唔到嘅。要將佢暴露出嚟,就要用 -p 參數。例如,我想將宿主機(Host)嘅 8080 端口,映射去容器嘅 80 端口,個指令就會變成 docker run -d --name my-nginx -p 8080:80 nginx。打咗呢句之後,你就可以打開瀏覽器,輸入 localhost:8080,應該就會見到 Nginx 嘅歡迎頁面,咁就代表你成功咗啦!呢個 -p 參數嘅用法,喺 Stack Overflow 或者 CSDN博客 上面都有海量討論,係初學者必學嘅 命令列參數 之一。

部署好之後,我哋好多時都需要入去個容器裡面睇吓 Log,或者修改一啲設定檔。呢個時候,就要出動 docker exec 呢個神器。記住,對於呢啲喺 後臺運行 嘅服務容器,我哋絕對唔好用 docker attach,因為 attach 係連去個容器嘅主進程(即係 Nginx 進程)嘅 標準輸入輸出,你一但斷開(detach),有可能會搞到成個容器停咗,好危險。正確做法係用 docker exec -it。例如,想入去個容器嘅 bash shell 睇睇,就執行 docker exec -it my-nginx bash。呢度嘅 -it 其實係兩個參數嘅組合:-i(interactive)保持 標準輸入 打開,等你可以打指令;-t(tty)就係分配一個 pseudo-terminal(偽終端),令到個 交互模式 有齊正常 terminal 嘅功能,好似係睇到彩色輸出、用到上下箭頭 history 咁。入到去之後,你就可以好似操作一部 Ubuntu 或者 BusyBoxLinux 機咁,去檢查 /usr/share/nginx/html 下面嘅網頁文件,或者睇睇 /var/log/nginx 嘅日誌。

最後,我想強調一下 -it 同 -d 呢兩個 選項 嘅設計哲學。佢哋其實係應付唔同場景:-d 係俾 常駐服務 用,例如係 MySQLSQL Server 或者我哋而家講緊嘅 Nginx,等佢哋安安靜靜喺後面做嘢。而 -it 就係俾你需要同個容器進行 互動 嘅時候用,例如係做一些臨時嘅偵錯、測試,或者運行一個互動式嘅工具環境。有啲資深玩家好似 Will 保哥 喺佢個 The Will Will Web 博客都提過,理解清楚呢幾種模式,係玩轉 Docker 命令嘅基礎。好多新手喺 菜鳥教程 學完基礎後,就係喺呢啲實際操作細節上卡住,搞唔清楚點解個容器一閃就停,或者點解入到去乜都打唔到。希望透過呢個由拉取鏡像、背景執行、端口映射到進入容器檢查嘅完整 實例示範,可以幫你將 docker run 嘅核心概念牢牢掌握。

docker run it - Ubuntu

AboutUbuntuProfessional illustrations

點解我個容器即刻退出?

好多朋友喺用 docker run 嘅時候,都會遇到一個好頭痛嘅問題:點解我個容器一開即刻就退出咗?明明我打咗命令,但個容器狀態就變咗 Exited (0) 或者 Exited (1),好似乜都冇發生過咁。呢個情況真係好常見,尤其係啱啱開始玩 Docker 嘅新手。其實呢個問題嘅核心,同你點樣理解 docker run 嘅運行模式有好大關係。

首先,你一定要記住一個最基本嘅概念:一個 容器 嘅生命週期,係完全綁定喺佢裏面運行緊嗰個主進程(PID 1)上面嘅。當呢個主進程一結束,個容器就會跟住停止。呢個設計就係為咗模擬一個獨立嘅服務或者任務。所以,如果你 docker run 一個 Ubuntu 或者 busybox鏡像,但係冇指定要運行乜嘢長期任務,佢自然就會執行完預設命令(例如 /bin/bash)之後即刻退出。舉個例,如果你就咁打 docker run ubuntu,佢會啟動一個容器,運行預設嘅 shell,然後因為冇任何互動模式嘅設定,個 shell 冇嘢做就會直接關閉,連帶成個容器都退出咗。呢個就係最典型嘅「即刻退出」場景。

咁點樣解決呢?關鍵就在於點樣使用 docker run命令列參數。最常用嘅就係 -it 呢個組合拳。-i(interactive mode)同 -t(pseudo-TTY)參數一齊用,就係為咗開啟一個互動模式虛擬終端機,等你可以同容器入面嘅進程(例如 bash)進行交互。當你打 docker run -it ubuntu bash,你其實係做緊兩件事:第一,用 -it 參數分配一個交互式終端並保持標準輸入輸出打開;第二,明確指定容器啟動後要運行 bash 呢個命令。咁樣個 bash shell 就會喺前台運行,等你輸入命令,只要個 shell 唔退出,個容器就會一直運行落去。呢個方法對於調試或者想即時操作容器內部環境(例如檢查檔案、安裝套件)係非常有用嘅。

不過,如果你嘅目的唔係要同個容器「傾偈」,而係想佢好似 MySQLNginx 或者 SQL Server 呢類常駐服務咁,喺背景執行,咁你就應該用 -d 參數,即係 detached mode卸離模式)。docker run -d nginx 呢個命令會將 Nginx 服務放喺後台運行,容器啟動後就會交返個控制權俾你嘅主機終端,但個容器會繼續喺背後運行緊 Nginx 嘅主進程。呢個模式先係運行網站伺服器或者數據庫呢類服務嘅正確姿勢。好多初學者會混淆 -it 同 -d,記住:-it 係「我要入去同你互動」,-d 係「你喺後台自己乖乖做嘢」。

有時就算你加咗 -it,個容器都係會秒退,咁就可能同你指定嘅命令有關。例如,你運行一個只執行單次任務嘅腳本,佢執行完自然就會完。又或者,你個鏡像本身嘅設計就唔係為咗常駐運行。好似某啲只係用來編譯程式嘅工具鏡像,佢做完編譯工作就會自動退出,呢個係正常嘅。另外,一個常見嘅錯誤係將 -it 同 -d 一齊用,例如 docker run -itd ubuntu,咁樣做個容器確實會喺後台啟動並分配一個終端,但因為你冇指定一個長期運行嘅進程(例如冇加 bash),佢一樣會啟動後即刻退出。正確嘅做法係 docker run -itd ubuntu bash,等佢喺後台運行住個 bash。

如果你已經啟動咗一個後臺運行嘅容器,但想入去睇下裏面發生咗乜事,或者執行啲命令,你可以用 docker exec。docker exec -it <容器ID> bash 呢個命令可以讓你「附身」到一個已經運行緊嘅容器裏面,打開一個新嘅交互式終端。呢個方法比 docker attach 更安全,因為 attach 係直接連接到容器嘅主進程(例如 Nginx),如果你喺嗰度按 Ctrl+C,好可能會直接殺死個主進程令容器停止,而 exec 就係開一個新會話,唔會影響原有服務。當你發現容器無故退出,用 docker logs <容器ID> 睇下日誌,再用 docker exec 入去檢查,係基本嘅除錯步驟。

最後,都要提下配置錯誤導致嘅退出。例如,你運行一個 MySQL 容器,但冇設定必要嘅環境變數(如 root 密碼),或者掛載嘅卷(volume)權限有問題,都可能令到資料庫服務啟動失敗,跟住成個容器退出。呢個時候就要仔細睇日誌訊息。網上有好多資源可以幫手,例如 Stack Overflow 上面有無數關於容器退出的討論,CSDN博客菜鳥教程 呢類中文站亦有大量基礎教學,台灣嘅 The Will Will WebWill 保哥)嘅部落格亦經常分享深入嘅容器技術心得,遇到問題去搜尋下,好大機會已經有人遇到過同樣情況。總而言之,理解容器生命週期同進程嘅關係,靈活運用 -it、-d 等參數,再配合日誌同執行命令來檢查,就能夠解決大部分「容器即刻退出」嘅惱人問題。

docker run it - Linux

AboutLinuxProfessional illustrations

組合參數 (-dit) 應用場景

好啦,講完單獨嘅 -d 同 -it 參數,係時候將佢哋合體,睇下點樣用 docker run -dit 呢個組合技喇!呢個指令可以話係 Docker 日常操作嘅「萬能Key」之一,特別係當你想個 容器 一開波就喺後臺運行(detached mode),但同時又想保留一個可以隨時入去互動嘅門口,呢個時候 -dit 就大派用場。簡單啲講,佢結合咗 -d(背景執行)、-i(保持標準輸入開啟)同 -t(分配一個虛擬終端機)嘅優點,令個容器開機就默默做嘢,唔會霸住你個主機終端機,但你又可以隨時用 docker exec -it 跳入去個容器度行命令,好似 bash 或者檢查檔案,非常靈活。

咁實際有咩應用場景呢?我哋舉幾個貼地例子。第一個最經典就係用來運行一啲需要常駐服務,但間中又要入去管理嘅伺服器軟件。例如你想喺部 Ubuntu 主機度快速起個 MySQL 或者 SQL Server 做測試,你就可以用 docker run -dit --name my-db -p 3306:3306 mysql。咁樣個資料庫容器就會喺背景靜靜雞啟動同運行,唔會搞到你當前個 Linux 終端機。之後你想入去資料庫做啲 SQL 查詢或者設定,只需要另開一個終端機視窗,用 docker exec -it my-db bash(或者 mysql 呢類客戶端)就可以連入去互動操作,搞掂晒又可以退出,完全唔影響資料庫服務本身。同樣道理,對於 Nginx 呢類網頁伺服器都係一樣,用 -dit 行起佢,之後隨時用 exec 入去改 config 檔案或者睇 log,個服務就永遠唔使停,對於生產環境或者持續開發都好方便。

第二個場景係用來運行一個長期喺背景,但又需要保持基本互動能力嘅工具容器。例如,你可以用一個輕量級嘅 busybox 鏡像,以 -dit 模式運行,佢就會變成一個喺背景待命嘅小型工具盒。你可能會問,點解唔直接用 -d 呢?因為加上 -it 參數,就算係後臺運行,個容器內部嘅互動模式環境都已經準備好,標準輸入輸出同 pseudo-terminal 都設定妥當。當你突然需要喺呢個乾淨環境入面測試一啲網絡指令(例如 ping、wget)或者處理一啲文字檔,你就可以瞬間用 docker attach 連返上去(雖然 attach 通常用於重連返原本嘅主進程,要小心用法),或者更穩陣地用 docker exec -it 去開個新會話,效率高好多。呢個技巧喺 Stack Overflow 或者 CSDN博客 上面,好多高手都會提到,用來做快速測試好正。

第三,對於開發者嚟講,-dit 模式亦好適合用來初始化一啲需要預先設定嘅開發環境容器。假設你個應用程式需要某個特定版本嘅 Linux 發行版同埋一堆基礎工具,你可以寫個 Dockerfile 去整一個自訂鏡像,然後用 docker run -dit --name dev-env my-custom-image 將佢行起嚟。個容器就會變成一個隨時待命、獨立隔離嘅開發沙盒。你隨時可以 exec 入去,喺入面寫 code、試行腳本,甚至安裝一啲臨時套件。因為係 detached mode,你閂咗終端機或者 logout 主機,個開發環境容器都依然運行緊,下次開工直接用 exec 返入去就得,唔使重新安裝同設定所有嘢,節省大量時間。好似 The Will Will WebWill 保哥 都經常分享呢類用容器做標準化開發環境嘅心得。

最後都要提少少注意位。雖然 -dit 好方便,但都要理解清楚每個命令列參數嘅意義。記住,-i-t 通常一齊用(即係 -it)先可以模擬出完整嘅交互模式,令到你個終端機可以正常處理輸入同輸出。而加咗 -d 就係將成個容器丟去背景。所以 docker run -dit 本質上就係「請你喺背景開個有互動終端機準備好嘅容器」。另外,對於一啲本身設計成只做一件事就退出嘅容器(例如執行單次腳本),就唔適合用 -dit,因為佢哋根本唔會常駐。反而係 MySQL、Nginx、長期運行嘅應用程式伺服器,或者係你想養住嘅工具盒呢類常駐服務,先係 -dit 發揮最大威力嘅舞台。掌握好呢個組合,你管理 Docker 容器 嘅彈性就會大大提升,無論係設端口映射定係日常維護都更加得心應手。

docker run it - Container

AboutContainerProfessional illustrations

2026 年 Docker 運行最佳實踐

講到2026 年 Docker 運行最佳實踐,我哋首先要搞清楚一個核心概念:點樣聰明噉使用 docker run 嘅各種參數。好多新手(或者叫 菜鳥教程 嘅常客)一開始都會亂咁用,搞到個 容器 唔係行唔到就係控制唔到。最基本嘅原則就係,你要分清楚個容器係用來做咩嘅——係一個需要同你互動嘅工具,定係一個默默喺後臺運行嘅常駐服務。

如果你要運行好似 MySQLNginx 或者 SQL Server 呢類常駐服務,咁 -d 參數(即係 detached mode)就係你嘅好朋友。用 docker run -d 可以令個容器喺背景靜靜雞執行,唔會霸住你個虛擬終端機。例如你要起個MySQL測試,命令就係 docker run -d --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:latest。咁樣個容器就會喺後臺運行,你可以用 docker logs 去睇佢嘅輸出,或者用 docker exec 跳入去執行命令,完全唔會影響你而家個 terminal 做其他嘢。記住,呢個係 2026 年處理服務類鏡像嘅標準做法,唔好再用舊時嗰套掛住個 terminal 唔放啦。

相反,如果你要同個容器互動,例如要即時喺入面行 bash 命令、測試一啲腳本、或者用 busybox 呢類輕量工具做即時操作,咁 -it 參數-i-t 嘅組合)就必不可少。呢個 -it選項 會為你分配一個 pseudo-terminal,令到個容器嘅標準輸入輸出同你而家個 terminal 連接埋一齊,做到真正嘅交互模式。舉個例,你想喺一個 Ubuntu 容器入面探索下,命令就係 docker run -it --rm ubuntu:latest bash。個 --rm 參數係 2026 年好推崇嘅做法,用完即棄,唔會留低一堆停止咗嘅容器搞到系統亂糟糟。呢種模式非常適合開發同偵錯階段,你可以即時得到反饋。

不過,好多中級玩家都會混淆 docker run -itdocker exec -itdocker attach 呢三兄弟。簡單嚟講: docker run -it 係用嚟啟動一個新容器並立即進入互動模式docker exec -it 就係用嚟喺一個已經運行緊後臺容器入面,開一個新嘅互動會話。例如你個 MySQL 喺背景行緊,突然想入去睇睇,就用 docker exec -it some-mysql bash(如果個鏡像有 bash 嘅話)。 * 至於 docker attach,我哋 2026 年嘅建議係:除非你好清楚自己做緊咩,否則盡量少用。因為佢係直接連接到容器嘅主進程,如果你喺個 attached 嘅 terminal 打 Ctrl+C,好有可能會殺咗個主進程,令成個容器停止。所以,對於常駐服務,用 docker exec 去進入會安全得多。

另外,端口映射呢個命令列參數都係運行實踐嘅關鍵。無論你用 -d 模式定係 -it 模式,記得要透過 -p 8080:80 呢類參數將容器嘅端口暴露俾主機。咁先可以令到你喺本地用瀏覽器訪問到個 Nginx 服務,或者用客戶端連接到個 SQL Server

總括嚟講,2026 年嘅最佳實踐就係要「因材施教」:服務類用 -d 參數行背景執行;需要即時操作同偵錯就用 docker run -it 進入互動模式;而管理運行中容器就用 docker exec。呢啲心得唔單止喺 Stack Overflow 或者 CSDN博客 上經常被資深開發者討論,好似 The Will Will WebWill 保哥 呢類技術博主亦都不斷強調,靈活運用呢幾種模式,先至係高效使用 DockerContainer 技術嘅不二法門。記住,喺 Linux 環境下,理解好 標準輸入輸出虛擬終端機 嘅關係,你對 Docker 運行嘅掌握就會更上一層樓。

docker run it - Server

AboutServerProfessional illustrations

監控運行中容器 (docker ps)

好啦,講完點樣用 docker run -it 或者 -d 去啟動 容器,無論係用互動模式定係背景執行,下一步梗係要識得點樣「睇住」佢哋啦!呢個時候,docker ps 就係你個「天眼」,係監控運行中容器最基本又最重要嘅命令。你諗下,你開咗十個八個容器,有啲係 MySQL 數據庫,有啲係 Nginx Web伺服器,有啲可能係個 Ubuntu 嘅測試環境,你點知邊個打邊個、佢哋行緊定死咗、用緊咩端口映射?全靠 docker ps 一覽無遺。

簡單喺 terminal 打個 docker ps,佢就會列出所有運行中容器。你會見到每個容器都有個獨一無二嘅 CONTAINER ID(縮寫)同個成日令人頭痛嘅隨機名(好似 peaceful_mcclintock 呢啲)。好彩你可以用 --name 參數自己改個易記名。表格仲會顯示佢用緊咩鏡像(例如 mysql:latestnginx:alpine)、個容器係幾時創建嘅、而家行咗幾耐、狀態(通常係 Up 幾多分鐘)、同埋最緊要嘅端口映射資訊。例如你會見到 0.0.0.0:8080->80/tcp,即係話你將宿主機嘅 8080 端口,駁咗去呢個容器內部嘅 80 端口,咁你喺瀏覽器打 localhost:8080 就可以訪問到個 Nginx 服務。

不過,淨係 docker ps 睇到嘅係「而家進行緊」嘅容器。如果你想睇晒所有,包括已經停止咗嘅,就要加個 -a 參數,即係 docker ps -a。呢個好有用,尤其係當你試緊唔同 docker run命令列參數,整咗一堆停止咗嘅容器出嚟,你要清理嘅時候,就可以靠佢睇清楚,再用 docker rm 剷走佢哋。記住,養成定期清理嘅習慣,唔係好快就會有一大堆 鏡像同停止咗嘅容器,食晒你啲硬碟空間。

docker ps 仲可以配合其他參數做篩選,好似 docker ps --filter "status=running" 就淨係睇運行中嘅,或者 --filter "name=mysql" 搵返個名有 mysql 字眼嘅容器。對於管理一大堆容器嘅環境,呢啲過濾功能好幫到手。

知道咗個容器仲行緊,咁點樣同佢互動呢?呢度就要引出另外兩個常用命令:docker execdocker attach。兩者都可以進入個容器入面做嘢,但用法同後果好唔同,新手好易混淆。如果你個容器係用 docker run -d後臺運行嘅(例如一個 MySQL 或者 SQL Server 呢類常駐服務),你想入去行啲指令睇下 log 或者檢查設定,就應該用 docker exec -it。例如 docker exec -it my_mysql_container bash(如果個鏡像係基於 Ubuntu 之類,有 bash 嘅話),或者 docker exec -it my_mysql_container sh(如果係 alpine 或者 busybox 呢啲輕量鏡像)。呢個 -it 參數同 docker run 嗰個一樣,都係分配一個虛擬終端機同保持標準輸入輸出開啟,等你互動。最大好處係,你用 docker exec 進入呢個容器,係開一個新嘅 process,就算你之後打 exit 離開,你原本用 docker run -d 啟動嗰個主要服務 process 係唔會停嘅,個容器會繼續行,安全好多。

至於 docker attach,就真係要小心使用。佢係直接「附著」返你當初用 docker run -it 啟動嗰個主要 process(通常就係個 bash 或者 sh shell)。如果你當初係用 docker run -it ubuntu bash 啟動,之後用 docker attach 連返入去,你就會見到同一個 bash session。問題係,如果你喺呢個 attached 嘅 terminal 打 exit,咁個主要 process (bash) 就會結束,跟住成個容器都會停止!所以,一般嚟講,docker attach 比較多用喺觀察容器標準輸入輸出,而唔係用嚟執行指令。想安全地互動,絕大部分情況都係首選 docker exec

講開又講,好多香港嘅開發者同初學者,遇到 Docker 問題,除咗官方文檔,都好鍾意去 Stack OverflowCSDN博客 或者台灣技術大神 Will 保哥The Will Will Web 搵答案。而內地嘅 菜鳥教程 亦都有好多淺白嘅入門例子。睇得多你就會發現,佢哋都強調要識得用 docker ps 做監控,同埋分清 execattach 嘅應用場景。

最後提多樣,當你用 docker ps 見到個容器狀態係 Up,但係個服務(例如網站)訪問唔到,你可以點做?第一步,梗係用 docker exec 入去個容器度,檢查下個服務係咪真係有行起嚟(例如用 ps aux 睇 process),同埋檢查下內部嘅 log。好多時問題可能係配置錯誤,而唔係個容器本身死咗。學識點樣監控同埋進入運行中容器,係你掌握 Docker 日常操作嘅關鍵一步,由開發到除錯都少不了。

docker run it - busybox

AboutbusyboxProfessional illustrations

常用參數速查表

好啦,各位 DevOps 老手同埋 Docker 新手,而家就同大家整理一份常用參數速查表,等你哋下次用 docker run 或者 docker exec 嗰陣,唔使再成日去 Stack Overflow 或者 CSDN博客 度搵答案,可以自己手到拿來。呢個表唔單止係俾你睇,仲會解釋埋點解要咁用,同埋實際應用喺邊啲場景,例如係行一個 MySQL 容器 定係想同個 Ubuntu 容器bash 互動。

首先,最最最常用嘅一定係 -it 參數,呢個係進入互動模式嘅黃金組合。個 -i 係 interactive 嘅意思,即係保持標準輸入輸出打開,等你可以打指令入去。個 -t 就係 allocate 一個 pseudo-terminal,即係虛擬終端機,令到個 容器 嘅輸出有齊顏色同格式,好似真係用緊一部 Linux 主機咁。例如你想即時拉一個 busybox 鏡像 落來玩下,就會打 docker run -it busybox sh,咁你就可以即刻喺個 容器 入面行命令。冇咗個 -t,個畫面可能會亂碼或者冇提示符,體驗差好遠。Will 保哥嘅 The Will Will Web 都經常強調,開發階段用 -it 係必須嘅。

跟住就係 -d 參數,即係 detached mode,我哋通常叫後臺運行或者背景執行。當你個容器係一個常駐服務,好似 Nginx 或者 SQL Server,你唔想佢霸住你個 terminal 視窗,就要用 -d。例如 docker run -d -p 8080:80 nginx,咁個 Nginx 容器 就會靜靜雞喺後面行緊,仲做埋端口映射,將宿主機嘅 8080 port 指去容器嘅 80 port。想睇返佢嘅 log 就用 docker logs,想入返去互動就用 docker exec,呢個下面會講。

講開 docker exec,佢同 docker run 嘅參數好多時係共用嘅。當你個容器已經用 -d 模式行緊,但係突然要入去整啲設定或者睇下 log file,你就唔會再用 docker run(因為會開多個新容器),而係用 docker exec。同樣地,你想喺呢個運行緊嘅容器入面開個互動 shell,就要加返 -it,例如 docker exec -it 你個容器ID bash。呢個係管理常駐服務嘅日常操作。另外有個 docker attach 都可以連返去運行緊嘅容器,但係佢係直接連去主進程,如果主進程係 shell 就 okay,但如果係 Nginx 呢類,你打 Ctrl+C 可能會直接殺咗個容器,所以通常都係建議用 docker exec 更安全。

除咗互動同後台,仲有幾個實用到爆嘅命令列參數。例如 --name,幫你個容器改個易記嘅名,唔使次次對住堆亂碼 ID。-p 就係上面提過嘅端口映射,格式係 -p 宿主機端口:容器端口。-v 就係掛載 volume,等你可以將宿主機嘅目錄同步去容器入面,數據唔會因為容器刪除而消失,對於 database 類容器好似 MySQL 係必備。-e 就係設定環境變數,例如 set 個 MySQL root 密碼:-e MYSQL_ROOT_PASSWORD=yourpassword。

最後提多兩個特別啲但好有用嘅。一個係 --rm,呢個參數表示當個容器停止運行嘅時候,會自動刪除佢。好適合用來做一次性嘅測試任務,唔會留低一堆 stopped container 搞到部機好亂。另一個係 --restart,可以設定容器嘅重啟策略,例如 --restart=always 就係話俾 Docker 聽,無論咩原因退出咗(包括宿主機 reboot),都要重新啟動呢個容器,對於要確保服務永遠在線嘅情況非常之重要。

總之,記熟呢幾個核心參數,你操作 Docker 容器 嘅效率一定會大大提升。無論你係跟緊網上啲菜鳥教程學緊,定係已經係經驗豐富嘅工程師,手上有呢張速查表,都可以快速組合出你需要嘅 docker run 指令,輕鬆管理各種鏡像容器,唔使下下靠撞或者死背。

docker run it - 鏡像

About鏡像Professional illustrations

除錯技巧:查看容器日誌

好啦,講到用 docker run -it 或者 docker run -d 起咗個 容器 之後,無論係好似 MySQLNginx 呢類 常駐服務,定係一個簡單嘅 Ubuntu bash 會話,總有機會遇到個容器唔聽話,例如服務啟動失敗、程式出錯,或者純粹想睇下佢內部發生緊咩事。呢個時候,「查看容器日誌」就係你必須要識嘅 除錯技巧 啦。好多 Linux 背景嘅朋友,第一反應可能係想用 docker exec 或者 docker attach 接入個容器去睇 log 檔案,但其實 Docker 本身已經提供咗一套更直接、更統一嘅日誌管理機制,尤其係對於用 -d 參數後臺運行 嘅容器嚟講,呢個方法係最方便嘅。

最基本又最常用嘅指令就係 docker logs。假設你用 docker run -d 起咗個 MySQL 容器,但係用 docker ps 發現佢好快就停止咗,咁點算?你第一時間就應該用 docker logs [容器名稱或ID] 去睇下佢死前吐咗咩錯誤訊息出嚟。好多時,問題可能係配置錯誤、端口被佔用,或者係權限問題,所有呢啲錯誤都會輸出到容器的標準輸出(stdout)同標準錯誤(stderr),而 docker logs 就係捕捉呢啲訊息嘅工具。呢個方法好過你特登入去個容器裏面搵 log 檔案,因為 Docker 引擎會幫你管理同儲存呢啲輸出流,即使個容器已經停止咗,你依然可以撈到佢最後嘅日誌嚟睇,對於快速診斷 Container 啟動失敗原因真係好幫到手。

如果你想持續監睇日誌,就好似喺 Linux 用 tail -f 咁,你可以加上 -f 參數,即係 docker logs -f [容器名稱]。呢個對於監察緊 Nginx 嘅存取記錄,或者睇住個應用程式嘅即時運行狀況,真係一流。例如你個網站突然慢咗,你可以即刻開個 虛擬終端機,用呢個指令去追蹤 Nginx 容器嘅即時日誌,睇下有冇奇怪嘅請求或者錯誤。另外,docker logs 仲有 --tail 參數可以指定睇最後幾行,同埋 --since 參數睇某個時間點之後嘅日誌,呢啲選項令到日誌排查更加精準。

不過,有啲情況淨係靠 docker logs 可能唔夠。譬如話,你個應用程式係將日誌寫入到容器內部嘅檔案,而唔係輸出到標準輸出,咁 docker logs 就睇唔到啦。呢個時候,你就要出動 docker exec 呢個「進入容器」嘅神器。你可以用 docker exec -it [容器名] /bin/bash(或者 /bin/sh,好似 busybox 呢類精簡 鏡像 就常用 sh)去啟動一個 互動模式bash 會話,然後直接去相關目錄(例如 /var/log)用 cat、less 或者 tail 呢啲傳統 Linux 命令去查閱日誌檔案。呢個方法直接俾你一個 偽終端機 (pseudo-terminal),就好似你真係 SSH 入咗一部伺服器咁樣操作,對於需要深入檢查配置檔案或者特定應用日誌嘅情況,係不可或缺嘅。

講到 docker execdocker attach 嘅分別,新手好易搞亂。docker attach 係直接附加到你用 -it 參數互動模式 嘅容器嘅主進程(通常就係 bash),你會見到同控制到佢嘅 標準輸入輸出。但係如果你 attach 去一個行緊 Nginx 呢類服務嘅容器,你可能只會見到一片空白,因為 Nginx 本身唔會持續輸出嘢去終端機,而且如果你按 Ctrl+C,好可能會直接殺死個 Nginx 主進程,導致容器停止!所以,除非你好清楚自己做緊咩,否則除錯時,用 docker exec 去開一個新會話會安全同方便好多,唔會影響到主進程嘅運行。

最後都要提下,日誌嘅配置同驅動程式都好重要。默認情況下,Docker 用 json-file 驅動程式嚟儲存日誌,但對於生產環境,日誌量好大嘅時候,你可能要考慮配置日誌輪替(log rotation),避免日誌檔案食爆你主機嘅硬碟空間。你可以喺 docker run 嘅時候用 --log-opt 參數去設定 max-size 同 max-file,咁樣 Docker 就會自動幫你處理日誌檔案嘅大小同數量。呢啲進階設定,喺 菜鳥教程CSDN博客 或者 Stack Overflow 呢類技術社區都有好多討論,The Will Will Web 嘅站長 Will 保哥 亦不時會分享呢類實用嘅 Container 管理心得,好值得參考。總之,熟練運用日誌查看技巧,係管理同維護任何 Docker 容器,無論係 SQL Server 定係自訂應用,都係最基本而又最重要嘅一環。

docker run it - 菜鳥教程

About菜鳥教程Professional illustrations

進階:資源限制參數設定

講完基本嘅互動模式同背景執行,係時候深入啲,講下點樣用 docker run 嘅資源限制參數,嚟管好你啲 容器 嘅食量啦。喺真實環境,無論你係行緊 MySQLNginx 定係 SQL Server,都唔可以任由個 Container 食盡宿主機嘅資源,搞到其他服務跪低。Docker 提供咗一系列參數,等你可以好似管理實體伺服器咁,設定 CPU、記憶體(RAM)同 I/O 嘅使用上限,呢啲就係進階維運嘅必修課。

首先講最常用嘅記憶體限制。你可以用 -m 或者 --memory 參數,直接設定個容器最多可以用幾多 RAM。例如,你喺 Linux 主機度,想行一個 Ubuntu 容器專門處理某個任務,但唔想佢食多過 512MB RAM,個命令就會係 docker run -it -m 512m ubuntu bash。呢度個 -it 參數,就係之前提過,用嚟開啟一個互動式嘅 虛擬終端機,等你可以即時入去個容器嘅 bash 環境度操作。點解要咁做?因為設定完之後,你可以即時用 free -m 之類嘅命令,去驗證下個記憶體限制係咪真係生效。呢個設定對於行 常駐服務 尤其重要,例如你個 MySQL 容器,如果唔設上限,一多人連線查詢就可能會瘋狂食 RAM,拖垮成個宿主機。記住,設定記憶體時,仲可以配合 --memory-swap 參數,呢個係設定記憶體加埋交換空間(swap)嘅總和上限,玩法會複雜少少,但對於精細調控好有用。

跟住到 CPU 資源嘅限制。Docker 喺 CPU 方面嘅限制選項都幾靈活,最基本係用 --cpus 參數。假設你部宿主機有 4 個核心,你只想個容器最多用到 1.5 個核心嘅計算力,你就可以喺 docker run 嘅時候加上 --cpus="1.5"。另外一個常用方法係用 --cpuset-cpus,呢個係指定個容器可以喺邊幾個實體 CPU 核心上面運行。例如你宿主機核心 0 同 1 比較忙,你想將個新 Nginx 容器綁定去核心 2 同 3 度行,避免爭搶,命令就會係 docker run -d --cpuset-cpus="2,3" nginx。呢度我哋用咗 -d 參數,即係 detached mode 背景執行,好適合呢類唔需要即時 交互模式常駐服務。呢種精細嘅 CPU 綁定,對於高效能應用或者避免 容器 間互相干擾,效果非常顯著。

除咗記憶體同 CPU,磁碟 I/O 嘅限制都好關鍵,尤其係當你個容器需要頻繁讀寫數據庫或者日誌嘅時候。你可以用 --device-read-bps、--device-write-bps、--device-read-iops 同 --device-write-iops 呢類參數,去限制個容器對塊設備(block device)嘅讀寫速度同每秒輸入輸出操作次數。呢啲參數可以防止某個瘋狂寫 log 嘅容器,塞死成個系統嘅磁碟 I/O,影響晒其他容器嘅效能。設定嘅時候,你需要指定宿主機上嘅設備路徑,例如 /dev/sda。

最後提一提,點樣喺運行中嘅容器調整資源?其實 docker run 嘅資源參數,主要係喺創建容器時設定。如果容器已經行緊,你可以用 docker update 命令去動態調整某啲資源限制,例如即時改動記憶體上限。不過,唔係所有參數都支援熱更新,所以最好嘅做法,仲係喺規劃同編排階段(例如用 Docker Compose 或者 Kubernetes),就已經寫明資源需求同限制。好似 Will 保哥The Will Will Web 技術博客,或者 CSDN博客Stack Overflow 上面嘅深度討論,都經常強調事前規劃嘅重要性。總而言之,善用 docker run 嘅資源限制參數,唔單止可以提升系統穩定性,仲可以令你嘅宿主機資源分配得更有效率,等每個 容器 都乖乖哋,唔會變成資源怪獸。呢啲實戰經驗,對於由 菜鳥教程 階段進階嘅朋友嚟講,絕對係必學之技。

Frequently Asked Questions

喺2026年,點樣正確使用 `docker run -it` 嚟啟動一個互動式容器?

`docker run -it` 係用嚟啟動一個互動式容器嘅標準指令,結合咗 `-i`(保持標準輸入開啟)同 `-t`(分配一個虛擬終端)兩個選項。喺2026年,Docker Engine 嘅最新版本確保咗呢個指令對大多數官方映像(如Ubuntu、Alpine)都有良好支援,讓你即時同容器內嘅shell進行互動。 要點列表:

  • 基本語法為 `docker run -it `,例如 `docker run -it ubuntu:latest /bin/bash`。
  • 使用 `--name` 標籤可以為容器設定一個易記嘅名稱,方便後續管理。
  • 離開互動式shell時,記得使用 `exit` 指令,否則容器會繼續喺後臺運行。

使用 `docker run -it` 時,點樣將我本地嘅檔案或目錄掛載到容器入面?

要喺互動式容器中存取本地檔案,你需要使用 `-v` 或 `--mount` 選項嚟掛載卷(Volume)。喺2026年,推薦使用語義更清晰嘅 `--mount` 選項,因為佢提供更好嘅錯誤提示同一致性。呢個方法對於開發時測試程式碼或配置檔案非常方便,檔案改動會即時同步。 要點列表:

  • 使用指令如 `docker run -it -v $(pwd)/data:/container/data ubuntu bash` 將當前目錄嘅 `data` 資料夾掛載到容器。
  • `--mount` 嘅語法為 `type=bind,source=/host/path,target=/container/path`。
  • 為咗安全,建議掛載時設定為只讀模式,參數為 `,readonly`。

用 `docker run -it` 啟動容器,點樣設定網絡同連接埠轉發?

你可以透過 `-p` 選項嚟映射主機同容器嘅連接埠,或者用 `--network` 指定自訂網絡。2026年嘅Docker支援更先進嘅網絡驅動程式,例如用於改善多容器通訊嘅 `macvlan`。設定正確嘅網絡對於Web應用程式或資料庫服務嘅測試至關重要。 要點列表:

  • 基本連接埠映射語法:`-p 8080:80` 將主機嘅8080埠映射到容器嘅80埠。
  • 使用 `--network my_bridge_network` 將容器連接到你自己建立嘅橋接網絡。
  • 要檢視容器嘅IP地址,可以喺另一個終端執行 `docker inspect | grep IPAddress`。

點樣確保用 `docker run -it` 運行嘅容器有足夠嘅資源(CPU/記憶體)?

為避免容器耗盡系統資源,你可以使用 `--cpus` 同 `--memory` 選項嚟設定限制。喺2026年,Docker整合咗更精細嘅資源管理工具,特別係喺Kubernetes環境下。合理設定資源限制可以防止單一容器影響到主機或其他服務嘅穩定性。 要點列表:

  • 限制CPU使用:`--cpus="1.5"` 表示容器最多使用1.5個CPU核心。
  • 限制記憶體使用:`--memory="512m"` 將記憶體上限設為512 MB。
  • 可以透過 `docker stats` 指令即時監控運行中容器嘅資源消耗情況。

使用 `docker run -it` 運行一次性測試指令後,點樣自動清理容器?

為咗避免產生大量已停止嘅容器浪費空間,你可以加入 `--rm` 選項。當互動式會話結束(例如你輸入 `exit`)後,容器會自動被刪除。呢個係2026年開發者進行快速測試或除錯時嘅最佳實踐,能有效保持環境整潔。 要點列表:

  • 完整指令範例:`docker run -it --rm alpine /bin/sh`。
  • 即使使用 `--rm`,掛載嘅卷(volume)唔會自動刪除,需要手動管理。
  • 如果容器因為錯誤而異常退出,`--rm` 選項同樣會生效並清理容器。

喺安全考量上,用 `docker run -it` 運行容器有咩需要注意?

安全運行互動式容器嘅關鍵在於不以root權限運行。你應該使用 `--user` 選項指定一個非特權使用者。2026年嘅Docker映像普遍已內建非root使用者(如 `node`、`nginx`),同時建議定期掃描映像漏洞,並確保只從可信嘅Registry拉取映像。 要點列表:

  • 指定使用者指令:`docker run -it --user 1000:1000 node:latest`。
  • 避免在指令中直接傳入敏感資料(如密碼),應使用Docker Secrets或環境變數檔案。
  • 考慮使用 `--read-only` 旗標將容器的根檔案系統設為只讀,增強安全性。

點樣喺使用 `docker run -it` 時,傳遞環境變數俾容器?

傳遞環境變數有兩種主要方法:直接用 `-e` 選項,或者透過 `--env-file` 指定一個檔案。喺2026年,管理多環境配置(如開發、測試)時,使用環境變數檔案已成為標準做法,能更清晰同安全地管理設定。 要點列表:

  • 單一變數傳遞:`docker run -it -e "APP_COLOR=blue" ubuntu bash`。
  • 使用檔案傳遞:先建立一個 `.env` 檔案,然後執行 `docker run -it --env-file .env ubuntu bash`。
  • 環境變數可以在容器內嘅進程中直接存取,常用於設定應用程式配置。

如果我想用 `docker run -it` 進入一個已經運行緊嘅容器,應該點做?

`docker run -it` 係用嚟創建新容器,要進入現有容器,你需要使用 `docker exec -it` 指令。呢個係2026年進行容器內除錯或執行一次性任務嘅標準方法。`exec` 指令會喺運行中嘅容器內啟動一個新嘅互動式進程,而唔會影響原有主進程。 要點列表:

  • 基本語法:`docker exec -it /bin/bash`。
  • 如果容器嘅基礎映像沒有bash,可以嘗試使用 `/bin/sh`。
  • 你可以透過 `docker ps` 先獲取正在運行嘅容器名稱或ID。

使用 `docker run -it` 同使用 Docker Compose 有咩主要分別?適合咩場景?

`docker run -it` 適合快速啟動單一容器進行互動式測試、學習或簡單任務。而Docker Compose則用於定義同運行多容器應用程式,使用YAML檔案管理配置。喺2026年,對於複雜嘅微服務開發或需要固定網絡、卷配置嘅場景,Compose依然係首選工具。 要點列表:

  • `docker run`:指令直接、靈活,適合一次性或探索性操作。
  • Docker Compose:可重複、易於版本控制,適合開發、測試同部署完整應用堆疊。
  • 即使使用Compose,你仍可以透過 `docker-compose exec -it service_name bash` 進入特定服務容器。

喺2026年,點樣優化 `docker run -it` 嘅指令,令其更有效率同易讀?

優化方法包括使用Dockerfile定義好預設指令,減少冗長嘅 `docker run` 參數,以及善用Shell別名(alias)或製作簡單腳本。2026年嘅開發者亦經常利用 `docker run` 嘅 `--entrypoint` 選項覆寫映像預設入口點,以獲得更大靈活性。保持指令簡潔能提升工作效率並減少錯誤。 要點列表:

  • 在Dockerfile中使用 `CMD` 或 `ENTRYPOINT` 設定預設啟動行為。
  • 為常用嘅複雜指令建立Shell別名,例如 `alias drun='docker run -it --rm'`。
  • 使用 `--entrypoint=""` 可以清空預設入口點,然後直接在指令末尾指定要運行嘅程式。