docker run 的 -i -t -d
前言
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發佈到任何流行的 Linux或Windows 機器上,也可以實現虛擬化。
但是每次運行容器的時候都會遇到——“我是執行了docker run可是就是沒有啓動成功”,這是啥情況呢,一般都是(-i, -t, -d)這三個參數的使用問題,所以下面就詳細介紹一下這-i,-t,-d都應用在什麼情況下以及又應該怎麼組合搭配使用
這三個參數(-i, -t, -d)是啥意思
Options | Mean |
---|---|
-i | 以交互模式運行容器,通常與 -t 同時使用; |
-t | 爲容器重新分配一個僞輸入終端,通常與 -i 同時使用; |
-d | 後臺運行容器,並返回容器ID; |
該如何組合應用這三個參數
例如:”我想在後臺運行一個鏡像“,當我執行下方命令的時候
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>
更多細節在官方文檔有提到哦
分離模式 and in 前臺模式 (-t, -i or -it)
其他參數
Options | Mean |
---|---|
-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” or --cpuset=“0,1,2” | 綁定容器到指定CPU運行; |
-m | 設置容器使用內存最大值; |
–net=“bridge” | 指定容器的網絡連接類型,支持 bridge/host/none/container: 四種類型; |
–link=[] | 添加鏈接到另一個容器; |
–expose=[] | 開放一個端口或一組端口; |
–volume , -v | 綁定一個卷 |
關於作者
聯繫方式 - [email protected]
你也可以通過 github | csdn | @新浪微博 關注我的動態
如果有任何問題或者建議,歡迎大家評論點贊👍