?
This document uses PHP Chinese website manual Release
在新容器中運(yùn)行命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
名字,簡(jiǎn)寫 | 默認(rèn) | 描述 |
---|---|---|
--add-host | 添加自定義的主機(jī)到IP映射(主機(jī):IP) | |
--attach, -a | 附加到STDIN,STDOUT或STDERR | |
--blkio-weight | 0 | 阻止IO(相對(duì)權(quán)重),介于10和1000之間,或0禁用(默認(rèn)值為0) |
--blkio-weight-device | 塊IO重量(相對(duì)設(shè)備重量) | |
--cap-add | 添加Linux功能 | |
--cap-drop | 刪除Linux功能 | |
--cgroup-parent | 容器的可選父cgroup | |
--cidfile | 將容器ID寫入文件 | |
--cpu-count | 0 | CPU數(shù)量(僅限Windows) |
--cpu-percent | 0 | CPU百分比(僅限Windows) |
--cpu-period | 0 | 限制CPU CFS(完全公平調(diào)度程序)期間 |
--cpu-quota | 0 | 限制CPU CFS(完全公平調(diào)度程序)配額 |
--cpu-rt-period | 0 | 限制CPU實(shí)時(shí)周期(以微秒為單位) |
--cpu-rt-runtime | 0 | 以微秒為單位限制CPU實(shí)時(shí)運(yùn)行時(shí)間 |
--cpu-shares,-c | 0 | CPU份額(相對(duì)重量) |
--cpus | CPU數(shù)量 | |
--cpuset-cpus | 允許執(zhí)行的CPU(0-3,0,1) | |
--cpuset-MEMS | 允許執(zhí)行的MEM(0-3,0,1) | |
--detach,-d | false | 在后臺(tái)運(yùn)行容器并打印容器ID |
--detach-keys | 覆蓋分離容器的鍵序列 | |
--device | 將主機(jī)設(shè)備添加到容器 | |
--device-cgroup-rule | 將規(guī)則添加到cgroup允許的設(shè)備列表 | |
--device-read-bps | 限制設(shè)備的讀取速率(每秒字節(jié)數(shù)) | |
--device-read-iops | 限制設(shè)備的讀取速率(每秒IO) | |
-device-write-bps | 限制寫入速率(每秒字節(jié)數(shù))到設(shè)備 | |
--device-write-iops | 限制寫入速率(每秒IO)到設(shè)備 | |
--disable-content-trust | true | 跳過圖像驗(yàn)證 |
--dns | 設(shè)置自定義DNS服務(wù)器 | |
--dns-OPT | 設(shè)置DNS選項(xiàng) | |
--dns-option | 設(shè)置DNS選項(xiàng) | |
--dns-search | 設(shè)置自定義DNS搜索域 | |
--entrypoint | 覆蓋圖像的默認(rèn)入口點(diǎn) | |
--env,-e | 設(shè)置環(huán)境變量 | |
--env-file | 讀入環(huán)境變量文件 | |
--expose | 公開一個(gè)端口或一系列端口 | |
--group-add | 添加其他群組加入 | |
--health-cmd | 運(yùn)行以檢查運(yùn)行狀況的命令 | |
--health-interval | 0 | 運(yùn)行檢查之間的時(shí)間(ms | s | m | h)(默認(rèn)為0) |
--health-retries | 0 | 需要報(bào)告不健康的連續(xù)失敗 |
--health-start-period | 0 | 啟動(dòng)健康重試倒數(shù)前,容器初始化的開始時(shí)間段(ms | s | m | h)(默認(rèn)為0) |
--health-timeout | 0 | 允許一次檢查運(yùn)行的最長(zhǎng)時(shí)間(ms | s | m | h)(默認(rèn)值為0) |
--help | false | 打印用法 |
--hostname,-h | 容器主機(jī)名稱 | |
--init | false | 在容器中運(yùn)行一個(gè)轉(zhuǎn)發(fā)信號(hào)并收集進(jìn)程的init |
---interactive, -i | false | 即使沒有連接,也要保持STDIN打開 |
--io-MaxBandwidth | 0 | 系統(tǒng)驅(qū)動(dòng)器的最大IO帶寬限制(僅限Windows) |
--io-maxiops | 0 | 系統(tǒng)驅(qū)動(dòng)器的最大IOps限制(僅限Windows) |
--ip | IPv4地址(例如172.30.100.104) | |
--ip6 | IPv6地址(例如,2001:db8 :: 33) | |
--ipc | IPC命名空間使用 | |
--isolation | 容器隔離技術(shù) | |
--kernel-memory | 0 | 內(nèi)核內(nèi)存限制 |
--label, -l | 在容器上設(shè)置元數(shù)據(jù) | |
--label-file | 閱讀標(biāo)簽的行分隔文件 | |
--link | 將鏈接添加到其他容器 | |
--link-local-ip | Container IPv4 / IPv6鏈路本地地址 | |
--log-driver | 記錄容器的驅(qū)動(dòng)程序 | |
--log-OPT | 日志驅(qū)動(dòng)選項(xiàng) | |
- MAC地址 | 容器MAC地址(例如,92:d0:c6:0a:29:33) | |
--memory, -m | 0 | 內(nèi)存限制 |
--memory-reservation | 0 | 內(nèi)存軟限制 |
--memory-swap | 0 | 交換限制等于內(nèi)存加交換:'-1'以啟用無限交換 |
--memory-swappiness | -1 | 調(diào)整容器內(nèi)存swappiness(0到100) |
--mount | 將文件系統(tǒng)掛載附加到容器 | |
--name | 為容器分配一個(gè)名稱 | |
--net | 默認(rèn) | 將容器連接到網(wǎng)絡(luò) |
--net-alias | 為容器添加網(wǎng)絡(luò)范圍的別名 | |
--network | 默認(rèn) | 將容器連接到網(wǎng)絡(luò) |
--network-alias | 為容器添加網(wǎng)絡(luò)范圍的別名 | |
--no-healthcheck | false | 禁用任何容器指定的HEALTHCHECK |
--oom-kill-disable | false | 禁用OOM殺手 |
--oom-score-adj | 0 | 調(diào)整主機(jī)的OOM首選項(xiàng)(從-1000到1000) |
--pid | 要使用的PID名稱空間 | |
--pids-limit | 0 | 調(diào)整容器匹配限制(無限制地設(shè)置-1) |
--privileged | false | 給這個(gè)容器賦予擴(kuò)展權(quán)限 |
--publish,-p | 將容器的端口發(fā)布到主機(jī) | |
--publish-all,-P | false | 將所有暴露的端口發(fā)布到隨機(jī)端口 |
--read-only | false | 將容器的根文件系統(tǒng)掛載為只讀 |
--read-only | no | 重新啟動(dòng)策略以在容器退出時(shí)應(yīng)用 |
--restart | false | 當(dāng)容器退出時(shí)自動(dòng)移除容器 |
--rm | 運(yùn)行時(shí)用于此容器 | |
--security-OPT | 安全選項(xiàng) | |
--shm-size | 0 | / dev / shm的大小 |
--sig-proxy | true | 代理接收到進(jìn)程的信號(hào) |
--stop-signal | SIGTERM | 停止容器的信號(hào) |
--stop-timeout | 0 | 超時(shí)(以秒為單位)停止容器 |
--storage-OPT | 容器的存儲(chǔ)驅(qū)動(dòng)程序選項(xiàng) | |
--sysctl | map[] | Sysctl選項(xiàng) |
--tmpfs | 掛載一個(gè)tmpfs目錄 | |
--tty, -t | false | 分配一個(gè)偽TTY |
--ulimit | Ulimit選項(xiàng) | |
--user,-u | 用戶名或UID(格式:<名稱| uid>:<組| gid>) | |
--userns | 要使用的用戶名稱空間 | |
--uts | UTS命名空間使用 | |
--volume, -v | 綁定安裝一個(gè)卷 | |
--volume-driver | 容器的可選卷驅(qū)動(dòng)程序 | |
--volumes-from | 從指定容器裝載卷 | |
--workdir,-w | 容器內(nèi)的工作目錄 |
命令 | 描述 |
---|---|
docker | Docker CLI的基本命令。 |
docker run命令首先在指定的映像上創(chuàng)建一個(gè)可寫容器層,然后使用指定的命令啟動(dòng)它。 也就是說,碼頭運(yùn)行等同于API / containers / create then / containers /(id)/ start。 使用docker start可以重新啟動(dòng)已停止的容器,并保持原來的所有更改不變。 請(qǐng)參閱docker ps -a查看所有容器的列表。
該docker run
命令可以在組合使用docker commit
,以改變一個(gè)容器中運(yùn)行的命令。docker run
在Docker運(yùn)行參考中還有其他詳細(xì)信息。
有關(guān)將容器連接到網(wǎng)絡(luò)的信息,請(qǐng)參閱“ Docker網(wǎng)絡(luò)概述 ”。
$ docker run --name test -it debian root@d6c0fe130dba:/# exit 13$ echo $?13$ docker ps -a | grep test d6c0fe130dba debian:7 "/bin/bash" 26 seconds ago Exited (13) 17 seconds ago test
這個(gè)例子使用debian:latest image運(yùn)行一個(gè)名為test的容器。 -it指示Docker分配連接到容器stdin的偽TTY; 在容器中創(chuàng)建一個(gè)交互式bash shell。 在該示例中,通過輸入exit 13退出bash shell。此退出代碼被傳遞給docker run的調(diào)用者,并記錄在測(cè)試容器的元數(shù)據(jù)中。
$ docker run --cidfile /tmp/docker_test.cid ubuntu echo "test"
這將創(chuàng)建一個(gè)容器并打印測(cè)試到控制臺(tái)。 cidfile標(biāo)志使得Docker嘗試創(chuàng)建一個(gè)新文件并將容器ID寫入它。 如果文件已經(jīng)存在,Docker會(huì)返回一個(gè)錯(cuò)誤。 Docker運(yùn)行退出時(shí),Docker將關(guān)閉此文件。
$ docker run -t -i --rm ubuntu bash root@bc338942ef20:/# mount -t tmpfs none /mnt mount: permission denied
這是行不通的,因?yàn)槟J(rèn)情況下,大多數(shù)具有潛在危險(xiǎn)的內(nèi)核功能都被丟棄; 包括cap_sys_admin(這是安裝文件系統(tǒng)所必需的)。 但是, - 特權(quán)標(biāo)志將允許它運(yùn)行:
$ docker run -t -i --privileged ubuntu bash root@50e3f57e16e6:/# mount -t tmpfs none /mnt root@50e3f57e16e6:/# df -h Filesystem Size Used Avail Use% Mounted on none 1.9G 0 1.9G 0% /mnt
該--privileged
標(biāo)志為容器提供了所有功能,并且還提升了device
cgroup控制器執(zhí)行的所有限制。換句話說,容器可以做主機(jī)可以做的幾乎所有事情。這個(gè)標(biāo)志存在允許特殊的用例,比如在Docker中運(yùn)行Docker。
$ docker run -w /path/to/dir/ -i -t ubuntu pwd
該-w
讓里面定目錄正在執(zhí)行的命令,如/path/to/dir/
。如果路徑不存在,它將在容器內(nèi)創(chuàng)建。
$ docker run -it --storage-opt size=120G fedora /bin/bash
這個(gè)(大?。⒃试S在創(chuàng)建時(shí)將容器rootfs大小設(shè)置為120G。 此選項(xiàng)僅適用于devicemapper,btrfs,overlay2,windowsfilter和zfs圖形驅(qū)動(dòng)程序。 對(duì)于devicemapper,btrfs,windowsfilter和zfs圖形驅(qū)動(dòng)程序,用戶無法傳遞小于默認(rèn)基本大小的大小。 對(duì)于overlay2存儲(chǔ)驅(qū)動(dòng)程序,只有當(dāng)后備fs為xfs并使用pquota安裝選項(xiàng)安裝時(shí),size選項(xiàng)才可用。 在這些條件下,用戶可以通過任何小于支持fs大小的大小。
$ docker run -d --tmpfs /run:rw,noexec,nosuid,size=65536k my_image
--tmpfs標(biāo)志將空tmpfs與rw,noexec,nosuid,size = 65536k選項(xiàng)一起裝載到容器中。
$ docker run -v `pwd`:`pwd` -w `pwd` -i -t ubuntu pwd
-v標(biāo)志將當(dāng)前工作目錄掛載到容器中。 -w讓命令在當(dāng)前工作目錄內(nèi)執(zhí)行,方法是將目錄更改為由pwd返回的值。 所以這個(gè)組合使用容器執(zhí)行命令,但在當(dāng)前工作目錄中執(zhí)行。
$ docker run -v /doesnt/exist:/foo -w /foo -i -t ubuntu bash
當(dāng)綁定安裝卷的主機(jī)目錄不存在時(shí),Docker會(huì)自動(dòng)在主機(jī)上為您創(chuàng)建此目錄。在上面的例子中,Docker將/doesnt/exist
在啟動(dòng)容器之前創(chuàng)建文件夾。
$ docker run --read-only -v /icanwrite busybox touch /icanwrite/here
體積可以與--read-only結(jié)合使用來控制容器寫入文件的位置。 -read-only標(biāo)志將容器的根文件系統(tǒng)裝載為只讀,禁止寫入容器指定體積以外的位置。
$ docker run -t -i -v /var/run/docker.sock:/var/run/docker.sock -v /path/to/static-docker-binary:/usr/bin/docker busybox sh
通過綁定docker unix套接字和靜態(tài)鏈接的docker二進(jìn)制文件(請(qǐng)參閱獲取linux二進(jìn)制文件),您可以賦予容器完全訪問權(quán)限,以創(chuàng)建和操作主機(jī)的Docker守護(hù)進(jìn)程。
在Windows上,路徑必須使用Windows風(fēng)格的語義來指定。
PS C:\> docker run -v c:\foo:c:\dest microsoft/nanoserver cmd /s /c type c:\dest\somefile.txt Contents of file PS C:\> docker run -v c:\foo:d: microsoft/nanoserver cmd /s /c type d:\somefile.txt Contents of file
使用基于Windows的容器時(shí),以下示例將失敗,因?yàn)槿萜鲀?nèi)的卷的目的地或綁定裝入必須是以下之一:不存在或空目錄; 或C:以外的驅(qū)動(dòng)器。此外,綁定掛載的源必須是本地目錄,而不是文件。
net use z: \\remotemachine\share docker run -v z:\foo:c:\dest ...docker run -v \\uncpath\to\directory:c:\dest ...docker run -v c:\foo\somefile.txt:c:\dest ...docker run -v c:\foo:c: ...docker run -v c:\foo:c:\existing-directory-with-contents ...
有關(guān)體積的深入信息,請(qǐng)參閱管理容器中的數(shù)據(jù)
該--mount
標(biāo)志允許您tmpfs
在容器中安裝卷,主機(jī)目錄和掛載。
該--mount
標(biāo)志支持-v
or 標(biāo)志支持的大多數(shù)選項(xiàng)--volume
,但使用不同的語法。有關(guān)的深度信息--mount
的標(biāo)志,和之間的比較--volume
和--mount
,請(qǐng)參考服務(wù)創(chuàng)建命令參考。
即使沒有計(jì)劃反對(duì)--volume
,建議使用--mount
。
例子:
$ docker run --read-only --mount type=volume,target=/icanwrite busybox touch /icanwrite/here
$ docker run -t -i --mount type=bind,src=/data,dst=/data busybox sh
$ docker run -p 127.0.0.1:80:8080 ubuntu bash
這將容器的端口8080綁定到主機(jī)的127.0.0.1上的端口80。 Docker用戶指南詳細(xì)解釋了如何操作Docker中的端口。
$ docker run --expose 80 ubuntu bash
這暴露80
容器的端口而不將端口發(fā)布到主機(jī)系統(tǒng)的接口。
$ docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash
使用-e
,--env
和--env-file
標(biāo)志設(shè)置在容器簡(jiǎn)單(非數(shù)組)環(huán)境變量,你正在運(yùn)行,或覆蓋在你運(yùn)行圖像的Dockerfile中定義的變量。
您可以在運(yùn)行容器時(shí)定義變量及其值:
$ docker run --env VAR1=value1 --env VAR2=value2 ubuntu env | grep VAR VAR1=value1 VAR2=value2
您也可以使用您已經(jīng)導(dǎo)出到本地環(huán)境的變量:
export VAR1=value1export VAR2=value2 $ docker run --env VAR1 --env VAR2 ubuntu env | grep VAR VAR1=value1 VAR2=value2
在運(yùn)行該命令時(shí),Docker CLI客戶端將檢查變量在本地環(huán)境中的值并將其傳遞給容器。 如果提供了no =并且該變量未在本地環(huán)境中導(dǎo)出,則該變量將不會(huì)在容器中進(jìn)行設(shè)置。
您也可以從文件加載環(huán)境變量。該文件應(yīng)該使用語法<variable>=value
(將變量設(shè)置為給定值)或<variable>
(從本地環(huán)境獲取值)以及#
注釋。
$ cat env.list # This is a comment VAR1=value1 VAR2=value2 USER $ docker run --env-file env.list ubuntu env | grep VAR VAR1=value1 VAR2=value2 USER=denis
標(biāo)簽是key=value
將元數(shù)據(jù)應(yīng)用于容器的一對(duì)。用兩個(gè)標(biāo)簽標(biāo)注容器:
$ docker run -l my-label --label com.example.foo=bar ubuntu bash
my-label鍵不指定值,因此標(biāo)簽?zāi)J(rèn)為空字符串(“”)。 要添加多個(gè)標(biāo)簽,請(qǐng)重復(fù)標(biāo)簽標(biāo)志(-l或--label)。
key =值必須是唯一的,以避免覆蓋標(biāo)簽值。 如果您使用相同的鍵但指定了不同的值,則每個(gè)后續(xù)值都會(huì)覆蓋前一個(gè)值。 Docker使用您提供的最后一個(gè)key =值。
使用該--label-file
標(biāo)志從文件加載多個(gè)標(biāo)簽。用EOL標(biāo)記分隔文件中的每個(gè)標(biāo)簽。下面的示例從當(dāng)前目錄中的標(biāo)簽文件加載標(biāo)簽:
$ docker run --label-file ./labels ubuntu bash
標(biāo)簽文件格式與加載環(huán)境變量的格式類似。(與環(huán)境變量不同,標(biāo)簽對(duì)容器內(nèi)運(yùn)行的進(jìn)程不可見。)以下示例說明了標(biāo)簽文件格式:
com.example.label1="a label"# this is a comment com.example.label2=another\ label com.example.label3
您可以通過提供多個(gè)--label-file
標(biāo)志來加載多個(gè)標(biāo)簽文件。
有關(guān)使用標(biāo)簽的更多信息,請(qǐng)參閱Docker用戶指南中的標(biāo)簽 - Docker中的自定義元數(shù)據(jù)。
在啟動(dòng)容器時(shí),使用--network標(biāo)志將其連接到網(wǎng)絡(luò)。 這將busybox容器添加到my-net網(wǎng)絡(luò)。
$ docker run -itd --network=my-net busybox
在用戶定義的網(wǎng)絡(luò)上啟動(dòng)容器時(shí),也可以使用--ip和--ip6標(biāo)志選擇容器的IP地址。
$ docker run -itd --network=my-net --ip=10.10.9.75 busybox
如果要將正在運(yùn)行的容器添加到網(wǎng)絡(luò),請(qǐng)使用docker network connect
子命令。
您可以將多個(gè)容器連接到同一個(gè)網(wǎng)絡(luò)。一旦連接,容器可以很容易地通信,只需要另一個(gè)容器的IP地址或名稱。對(duì)于overlay
支持多主機(jī)連接的網(wǎng)絡(luò)或自定義插件,連接到相同多主機(jī)網(wǎng)絡(luò)但從不同引擎啟動(dòng)的容器也可以通過這種方式進(jìn)行通信。
注意:服務(wù)發(fā)現(xiàn)在默認(rèn)網(wǎng)橋上不可用。容器默認(rèn)通過IP地址進(jìn)行通信。要通過名稱進(jìn)行交流,他們必須聯(lián)系起來。
您可以使用該docker network disconnect
命令從網(wǎng)絡(luò)斷開容器。
$ docker run --volumes-from 777f7dc92da7 --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd
--volumes-from標(biāo)志會(huì)從引用的容器中裝入所有定義的卷。 容器可以通過重復(fù)-volumes-from參數(shù)來指定。 容器ID可以選擇性地添加后綴:ro或:rw以分別將卷掛載到只讀或讀寫模式。 默認(rèn)情況下,卷以相同模式(讀寫或只讀)作為參考容器裝入。
像SELinux這樣的標(biāo)簽系統(tǒng)要求在安裝到容器中的卷內(nèi)容上放置正確的標(biāo)簽。如果沒有標(biāo)簽,安全系統(tǒng)可能會(huì)阻止容器內(nèi)運(yùn)行的進(jìn)程使用內(nèi)容。默認(rèn)情況下,Docker不會(huì)更改OS設(shè)置的標(biāo)簽。
要更改容器上下文中的標(biāo)簽,可以添加兩個(gè)后綴中的任意一個(gè):z
或添加:Z
到卷裝載。這些后綴告訴Docker重新標(biāo)記共享卷上的文件對(duì)象。該z
選項(xiàng)告訴Docker兩個(gè)容器共享卷內(nèi)容。因此,Docker使用共享內(nèi)容標(biāo)簽來標(biāo)記內(nèi)容。共享卷標(biāo)允許所有容器讀取/寫入內(nèi)容。該Z
選項(xiàng)告訴Docker使用私有非共享標(biāo)簽標(biāo)記內(nèi)容。只有當(dāng)前容器可以使用私人卷。
-a標(biāo)志告訴碼頭運(yùn)行綁定到容器的STDIN,STDOUT或STDERR。 這可以根據(jù)需要操作輸出和輸入。
$ echo "test" | docker run -i -a stdin ubuntu cat -
這將數(shù)據(jù)通過管道傳輸?shù)饺萜髦?,并通過僅附加到容器的STDIN來打印容器的ID。
$ docker run -a stderr ubuntu echo test
這不會(huì)打印任何東西,除非出現(xiàn)錯(cuò)誤,因?yàn)槲覀冎桓郊拥饺萜鞯腟TDERR。 容器的日志仍然存儲(chǔ)了寫入STDERR和STDOUT的內(nèi)容。
$ cat somefile | docker run -i -a stdin mybuilder dobuild
這是如何將文件傳輸?shù)饺萜髦幸员銟?gòu)建的。構(gòu)建完成后將打印容器的ID,并可使用檢索構(gòu)建日志docker logs
。如果您需要將文件或其他內(nèi)容傳輸?shù)饺萜髦?,并在容器運(yùn)行完畢后檢索容器的ID,這非常有用。
$ docker run --device=/dev/sdc:/dev/xvdc \ --device=/dev/sdd --device=/dev/zero:/dev/nulo \ -i -t \ ubuntu ls -l /dev/{xvdc,sdd,nulo}brw-rw---- 1 root disk 8, 2 Feb 9 16:05 /dev/xvdc brw-rw---- 1 root disk 8, 3 Feb 9 16:05 /dev/sdd crw-rw-rw- 1 root root 1, 5 Feb 9 16:05 /dev/nulo
通常需要將設(shè)備直接暴露于容器。 --device選項(xiàng)啟用該選項(xiàng)。 例如,一個(gè)特定的塊存儲(chǔ)設(shè)備或循環(huán)設(shè)備或音頻設(shè)備可以被添加到另一個(gè)沒有特權(quán)的容器(沒有 - - 特權(quán)標(biāo)志),并讓應(yīng)用程序直接訪問它。
默認(rèn)情況下,容器將能夠讀取,寫入和mknod這些設(shè)備。 這可以使用第三個(gè)覆蓋:每個(gè)設(shè)備標(biāo)志的rwm選項(xiàng)集:
$ docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk /dev/xvdcCommand (m for help): q $ docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk /dev/xvdc You will not be able to write the partition table.Command (m for help): q $ docker run --device=/dev/sda:/dev/xvdc:rw --rm -it ubuntu fdisk /dev/xvdcCommand (m for help): q $ docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk /dev/xvdc fdisk: unable to open /dev/xvdc: Operation not permitted
注意: - 設(shè)備不能安全地用于臨時(shí)設(shè)備。 使用--device不能將不可用的塊設(shè)備添加到不受信任的容器中。
使用Docker's --restart
來指定容器的重新啟動(dòng)策略。重新啟動(dòng)策略控制Docker守護(hù)程序在退出后是否重新啟動(dòng)容器。Docker支持以下重啟策略:
政策 | 結(jié)果 |
---|---|
沒有 | 退出時(shí)不要自動(dòng)重啟容器。這是默認(rèn)設(shè)置。 |
失敗 | 僅在容器以非零退出狀態(tài)退出時(shí)才能重新啟動(dòng)?;蛘撸拗艱ocker守護(hù)程序嘗試重新啟動(dòng)的次數(shù)。 |
總是 | 不管退出狀態(tài)如何,始終重新啟動(dòng)容器。當(dāng)你總是指定時(shí),Docker守護(hù)進(jìn)程將嘗試無限期地重啟容器。無論容器的當(dāng)前狀態(tài)如何,容器也將始終在守護(hù)進(jìn)程啟動(dòng)時(shí)啟動(dòng)。 |
$ docker run --restart=always redis
這將運(yùn)行redis容器,其重啟策略始終如此,如果容器退出,Docker將重新啟動(dòng)它。
有關(guān)重新啟動(dòng)策略的更多詳細(xì)信息,請(qǐng)參閱Docker運(yùn)行參考頁的重新啟動(dòng)策略(-restart)部分。
您可以使用一個(gè)或多個(gè)--add-host標(biāo)志將其他主機(jī)添加到容器的/ etc / hosts文件中。 本示例為名為docker的主機(jī)添加一個(gè)靜態(tài)地址:
$ docker run --add-host=docker:10.180.0.1 --rm -it debian root@f38c87f2a42d:/# ping docker PING docker (10.180.0.1): 48 data bytes56 bytes from 10.180.0.1: icmp_seq=0 ttl=254 time=7.600 ms56 bytes from 10.180.0.1: icmp_seq=1 ttl=254 time=30.705 ms^C--- docker ping statistics ---2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms
有時(shí)您需要從容器內(nèi)連接到Docker主機(jī)。 要啟用此功能,請(qǐng)使用--add-host標(biāo)志將Docker主機(jī)的IP地址傳遞給容器。 要查找主機(jī)地址,請(qǐng)使用ip addr show命令。
您傳遞的標(biāo)志ip addr show
取決于您的容器中是使用IPv4還是IPv6網(wǎng)絡(luò)。使用以下標(biāo)志為名為以下內(nèi)容的網(wǎng)絡(luò)設(shè)備檢索IPv4地址eth0
:
$ HOSTIP=`ip -4 addr show scope global dev eth0 | grep inet | awk '{print \$2}' | cut -d / -f 1`$ docker run --add-host=docker:${HOSTIP} --rm -it debian
對(duì)于IPv6,使用-6標(biāo)志而不是-4標(biāo)志。 對(duì)于其他網(wǎng)絡(luò)設(shè)備,請(qǐng)將eth0替換為正確的設(shè)備名稱(例如橋設(shè)備的docker0)。
由于在容器中設(shè)置ulimit設(shè)置需要默認(rèn)容器中不具備的額外特權(quán),因此可以使用--ulimit標(biāo)志來設(shè)置它們。 --ulimit指定軟限制和硬限制,例如:<type>=<soft limit>[:<hard limit>],例如:
$ docker run --ulimit nofile=1024:1024 --rm debian sh -c "ulimit -n"1024
注意:如果您不提供硬限制,則軟限制將用于這兩個(gè)值。 如果沒有設(shè)置ulimits,它們將從守護(hù)程序中設(shè)置的默認(rèn)ulimits繼承。 因?yàn)楝F(xiàn)在選項(xiàng)被禁用。 換句話說,不支持以下腳本:
$ docker run -it --ulimit as = 1024 fedora / bin / bash`
這些值syscall
在設(shè)置時(shí)會(huì)發(fā)送到適當(dāng)?shù)奈恢谩ocker不執(zhí)行任何字節(jié)轉(zhuǎn)換。設(shè)置這些值時(shí)請(qǐng)考慮這一點(diǎn)。
nproc
的用法請(qǐng)小心使用ulimit標(biāo)志設(shè)置nproc,因?yàn)閚proc是由Linux設(shè)計(jì)的,用于設(shè)置用戶可用的最大進(jìn)程數(shù),而不是容器。 例如,使用守護(hù)進(jìn)程用戶啟動(dòng)四個(gè)容器:
$ docker run -d -u daemon --ulimit nproc=3 busybox top $ docker run -d -u daemon --ulimit nproc=3 busybox top $ docker run -d -u daemon --ulimit nproc=3 busybox top $ docker run -d -u daemon --ulimit nproc=3 busybox top
第四個(gè)容器失敗并報(bào)告“8系統(tǒng)錯(cuò)誤:資源暫時(shí)不可用”錯(cuò)誤。 這會(huì)失敗,因?yàn)檎{(diào)用者將nproc設(shè)置為3,導(dǎo)致前三個(gè)容器使用為守護(hù)程序用戶設(shè)置的三個(gè)進(jìn)程配額。
該--stop-signal
標(biāo)志設(shè)置將被發(fā)送到容器的系統(tǒng)呼叫信號(hào)以退出。這個(gè)信號(hào)可以是一個(gè)有效的無符號(hào)數(shù)字,與內(nèi)核syscall表中的位置相匹配,例如9,或者SIGNAME格式的信號(hào)名稱,例如SIGKILL。
在Windows上,此標(biāo)志可用于指定credentialspec選項(xiàng)。 credentialspec必須采用格式file://spec.txt或registry:// keyname。
--stop-timeout標(biāo)志設(shè)置將發(fā)送給容器退出的預(yù)定義(請(qǐng)參閱 - 停止信號(hào))系統(tǒng)調(diào)用信號(hào)的超時(shí)(以秒為單位)。 超時(shí)后,容器將被SIGKILL殺死。
在Windows上運(yùn)行Docker容器的情況下,此選項(xiàng)很有用。該--isolation <value>
選項(xiàng)設(shè)置容器的隔離技術(shù)。在Linux上,唯一支持的是default
使用Linux命名空間的選項(xiàng)。這兩個(gè)命令在Linux上是等效的:
$ docker run -d busybox top $ docker run -d --isolation default busybox top
在Windows上,--isolation
可以采用以下值之一:
值 | 描述 |
---|---|
默認(rèn) | 使用Docker守護(hù)進(jìn)程的--exec-opt或系統(tǒng)默認(rèn)值(請(qǐng)參見下文)指定的值。 |
處理 | 共享內(nèi)核命名空間隔離(Windows客戶端操作系統(tǒng)不支持)。 |
Hyper-V的 | 基于Hyper-V管理程序分區(qū)的隔離。 |
Windows服務(wù)器操作系統(tǒng)上的默認(rèn)隔離是過程。 Windows客戶端操作系統(tǒng)上的默認(rèn)(且僅支持)隔離是hyperv。 嘗試使用--isolation過程在客戶端操作系統(tǒng)上啟動(dòng)容器將失敗。
在Windows服務(wù)器上,假設(shè)使用默認(rèn)配置,這些命令是等效的并導(dǎo)致進(jìn)程隔離:
PS C:\> docker run -d microsoft/nanoserver powershell echo process PS C:\> docker run -d --isolation default microsoft/nanoserver powershell echo process PS C:\> docker run -d --isolation process microsoft/nanoserver powershell echo process
如果您在Docker守護(hù)進(jìn)程上設(shè)置了--exec-opt isolation = hyperv選項(xiàng),或者針對(duì)基于Windows客戶端的守護(hù)進(jìn)程運(yùn)行,則這些命令是等效的,并導(dǎo)致超級(jí)隔離:
PS C:\> docker run -d microsoft/nanoserver powershell echo hyperv PS C:\> docker run -d --isolation default microsoft/nanoserver powershell echo hyperv PS C:\> docker run -d --isolation hyperv microsoft/nanoserver powershell echo hyperv
這些參數(shù)始終設(shè)置容器可用內(nèi)存的上限。在Linux上,這是在cgroup上設(shè)置的,容器中的應(yīng)用程序可以通過查詢/sys/fs/cgroup/memory/memory.limit_in_bytes
來查詢它。
在Windows上,這將根據(jù)使用的隔離類型對(duì)容器產(chǎn)生不同的影響。
有了process
隔離,Windows將報(bào)告主機(jī)系統(tǒng)的全部?jī)?nèi)存,而不是對(duì)容器docker運(yùn)行的應(yīng)用程序的限制運(yùn)行-it -m 2GB --isolation =進(jìn)程microsoft / nanoserver powershell Get-ComputerInfo *內(nèi)存* CsTotalPhysicalMemory:17064509440 CsPhyicallyInstalledMemory: 16777216 OsTotalVisibleMemorySize:16664560 OsFreePhysicalMemory:14646720 OsTotalVirtualMemorySize:19154928 OsFreeVirtualMemory:17197440 OsInUseVirtualMemory:1957488 OsMaxProcessMemorySize:137438953344
在hyperv
隔離的情況下,Windows將創(chuàng)建一個(gè)足夠容納內(nèi)存限制的實(shí)用程序虛擬機(jī),以及承載容器所需的最小操作系統(tǒng)。該大小報(bào)告為“總物理內(nèi)存”。docker run -it -m 2GB --isolation = hyperv microsoft / nanoserver powershell Get-ComputerInfo * memory * CsTotalPhysicalMemory:2683355136 CsPhyicallyInstalledMemory:OsTotalVisibleMemorySize:2620464 OsFreePhysicalMemory:2306552 OsTotalVirtualMemorySize:2620464 OsFreeVirtualMemory:2356692 OsInUseVirtualMemory:263772 OsMaxProcessMemorySize:137438953344
所述--sysctl
容器中的命名空間的內(nèi)核參數(shù)(的sysctl)集。例如,要打開容器網(wǎng)絡(luò)名稱空間中的IP轉(zhuǎn)發(fā),請(qǐng)運(yùn)行以下命令:
$ docker run --sysctl net.ipv4.ip_forward=1 someimage
注意:并非所有sysctl都是命名空間。Docker不支持更改也修改主機(jī)系統(tǒng)的容器內(nèi)部的sysctls。隨著內(nèi)核的發(fā)展,我們期望看到更多的sysctl變成命名空間。
IPC Namespace
:kernel.msgmax,kernel.msgmnb,kernel.msgmni,kernel.sem,kernel.shmall,kernel.shmmax,kernel.shmmni,kernel.shm_rmid_forced以fs.mqueue開頭的系統(tǒng)*如果使用這個(gè)--ipc=host
選項(xiàng),這些sysctl將不會(huì)允許。
Network Namespace
:以net開頭的Sysctls *如果--network=host
使用這些sysctl 的選項(xiàng)將不被允許。