在docker中,run指令用來建立一個新的容器並執行一個指令,設定參數「-t」可以為容器重新指派一個偽輸入終端,而設定參數「-d」則會在後台運行容器,並返回容器ID。
本教學操作環境:linux7.3系統、docker-1.13.1版、Dell G3電腦。
docker run :建立一個新的容器並執行一個指令
語法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# OPTIONS說明:
-a stdin: 指定標準輸入輸出內容類型,可選STDIN/STDOUT/STDERR 三項;
-d : 後台運行容器,並返回容器ID;
-i: 以交互模式運行容器,通常與-t 同時使用;
-P: 隨機連接埠映射,容器內部連接埠隨機映射到主機的連接埠
-p: 指定連接埠映射,格式為:主機(宿主)連接埠:容器連接埠
-t: 為容器重新分配一個偽輸入終端,通常與-i 同時使用;
--name="nginx-lb": 為容器指定一個名稱;
--dns 8.8.8.8: 指定容器使用的DNS伺服器,預設和宿主一致;
-- dns-search example.com: 指定容器DNS搜尋域名,預設與宿主一致;
#-h "mars": 指定容器的hostname;
#-e username="ritchie": 設定環境變數;
--env-file=[]: 從指定檔案讀入環境變數;
--cpuset="0-2" 或 --cpuset="0,1,2": 綁定容器到指定CPU運作;
-m :設定容器使用記憶體最大值;
--net="bridge": 指定容器的網路連線類型,支援bridge/host/none/container: 四種型別;
--link=[]: 新增連結到另一個容器;
#--expose=[]: 開放一個連接埠或一組連接埠;
--volume , -v: 綁定一個卷
例如:」我想在後台運行一個鏡像“,當我執行下方指令的時候
docker run -d --name server somebody:dockerfile
透過docker ps查看是否運行成功,卻發現,沒有運行成功,這是什麼情況呢? ?後台運作不就是運用-d參數嗎?其實主要原因就是這個鏡像可能最後添加了CMD就類似
CMD ["/bin/bash"]
意思就是當你在後台運行的時候,這個鏡像創建的容器會首先執行/bin/bash,這意味著,當在後台執行(-d)時,shell立即退出。所以除非指令未在前台運行,否則容器會立即停止
解決方法
透過-i或-t為-d提供一個偽」tty n「
docker run -i -d images:tags docker run -t -d images:tags docker run -itd images:tags
將tail -f /dev/null 新增至命令中
透過執行此操作,即使主命令在背景執行,容器也不會停止,因為tail會在前台繼續運行。
docker run -d centos tail -f /dev/null
另一種情況(進入容器)也是如此,Docker官方更是提倡-i 和 -t搭配使用,使其行為類似於shell。
docker run -i -t <images:tags>
推薦學習:《docker影片教學》
以上是docker中run指令的t和d的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!