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