在docker中,run命令用于創(chuàng)建一個(gè)新的容器并運(yùn)行一個(gè)命令,設(shè)置參數(shù)“-t”可以為容器重新分配一個(gè)偽輸入終端,而設(shè)置參數(shù)“-d”則會(huì)在后臺(tái)運(yùn)行容器,并返回容器ID。
本教程操作環(huán)境:linux7.3系統(tǒng)、docker-1.13.1版、Dell G3電腦。
docker中run命令的t和d的區(qū)別是什么
docker run :創(chuàng)建一個(gè)新的容器并運(yùn)行一個(gè)命令
語(yǔ)法
docker?run?[OPTIONS]?IMAGE?[COMMAND]?[ARG...]
OPTIONS說(shuō)明:
-
-a stdin: 指定標(biāo)準(zhǔn)輸入輸出內(nèi)容類型,可選 STDIN/STDOUT/STDERR 三項(xiàng);
-
-d: 后臺(tái)運(yùn)行容器,并返回容器ID;
-
-i: 以交互模式運(yùn)行容器,通常與 -t 同時(shí)使用;
-
-P: 隨機(jī)端口映射,容器內(nèi)部端口隨機(jī)映射到主機(jī)的端口
-
-p: 指定端口映射,格式為:主機(jī)(宿主)端口:容器端口
-
-t: 為容器重新分配一個(gè)偽輸入終端,通常與 -i 同時(shí)使用;
-
–name=”nginx-lb”: 為容器指定一個(gè)名稱;
-
–dns 8.8.8.8: 指定容器使用的DNS服務(wù)器,默認(rèn)和宿主一致;
-
–dns-search example.com: 指定容器DNS搜索域名,默認(rèn)和宿主一致;
-
-h “mars”: 指定容器的hostname;
-
-e username=”ritchie”: 設(shè)置環(huán)境變量;
-
–env-file=[]: 從指定文件讀入環(huán)境變量;
-
–cpuset=”0-2″ or –cpuset=”0,1,2″: 綁定容器到指定CPU運(yùn)行;
-
-m :設(shè)置容器使用內(nèi)存最大值;
-
–net=”bridge”: 指定容器的網(wǎng)絡(luò)連接類型,支持 bridge/host/none/container: 四種類型;
-
–link=[]: 添加鏈接到另一個(gè)容器;
-
–expose=[]: 開(kāi)放一個(gè)端口或一組端口;
-
–volume , -v: 綁定一個(gè)卷
例如:”我想在后臺(tái)運(yùn)行一個(gè)鏡像“,當(dāng)我執(zhí)行下方命令的時(shí)候
docker?run?-d?--name?server?somebody:dockerfile
通過(guò)docker ps查看是否運(yùn)行成功,卻發(fā)現(xiàn),沒(méi)有運(yùn)行成功,這是什么情況呢??后臺(tái)運(yùn)行不就是運(yùn)用-d參數(shù)嗎?其實(shí)主要原因就是這個(gè)鏡像可能最后添加了CMD就類似
CMD?["/bin/bash"]
意思就是當(dāng)你在后臺(tái)運(yùn)行的時(shí)候,這個(gè)鏡像創(chuàng)建的容器會(huì)首先執(zhí)行/bin/bash,這意味著,當(dāng)在后臺(tái)運(yùn)行(-d)時(shí),shell立即退出。所以除非命令未在前臺(tái)運(yùn)行,否則容器會(huì)立即停止
解決方法
通過(guò)-i或者-t為-d提供一個(gè)偽”tty n“
docker?run?-i?-d?images:tags docker?run?-t?-d?images:tags docker?run?-itd?images:tags
將 tail -f /dev/NULL 添加到命令中
通過(guò)執(zhí)行此操作,即使主命令在后臺(tái)運(yùn)行,容器也不會(huì)停止,因?yàn)閠ail會(huì)在前臺(tái)繼續(xù)運(yùn)行。
docker?run?-d?centos?tail?-f?/dev/null
另外一種情況(進(jìn)入容器)也是如此,Docker官方更是提倡-i 和 -t搭配使用,使其行為類似于shell。
docker?run?-i?-t?<tags></tags>
推薦學(xué)習(xí):《docker視頻教程》