?
This document uses PHP Chinese website manual Release
Usage: dockerd COMMAND A self-sufficient runtime for containers. Options: --add-runtime runtime Register an additional OCI compatible runtime (default []) --allow-nondistributable-artifacts list Push nondistributable artifacts to specified registries (default []) --api-cors-header string Set CORS headers in the Engine API --authorization-plugin list Authorization plugins to load (default []) --bip string Specify network bridge IP -b, --bridge string Attach containers to a network bridge --cgroup-parent string Set parent cgroup for all containers --cluster-advertise string Address or interface name to advertise --cluster-store string URL of the distributed storage backend --cluster-store-opt map Set cluster store options (default map[]) --config-file string Daemon configuration file (default "/etc/docker/daemon.json") --containerd string Path to containerd socket --cpu-rt-period int Limit the CPU real-time period in microseconds --cpu-rt-runtime int Limit the CPU real-time runtime in microseconds --data-root string Root directory of persistent Docker state (default "/var/lib/docker") -D, --debug Enable debug mode --default-gateway ip Container default gateway IPv4 address --default-gateway-v6 ip Container default gateway IPv6 address --default-runtime string Default OCI runtime for containers (default "runc") --default-ulimit ulimit Default ulimits for containers (default []) --disable-legacy-registry Disable contacting legacy registries (default true) --dns list DNS server to use (default []) --dns-opt list DNS options to use (default []) --dns-search list DNS search domains to use (default []) --exec-opt list Runtime execution options (default []) --exec-root string Root directory for execution state files (default "/var/run/docker") --experimental Enable experimental features --fixed-cidr string IPv4 subnet for fixed IPs --fixed-cidr-v6 string IPv6 subnet for fixed IPs -G, --group string Group for the unix socket (default "docker") --help Print usage -H, --host list Daemon socket(s) to connect to (default []) --icc Enable inter-container communication (default true) --init Run an init in the container to forward signals and reap processes --init-path string Path to the docker-init binary --insecure-registry list Enable insecure registry communication (default []) --ip ip Default IP when binding container ports (default 0.0.0.0) --ip-forward Enable net.ipv4.ip_forward (default true) --ip-masq Enable IP masquerading (default true) --iptables Enable addition of iptables rules (default true) --ipv6 Enable IPv6 networking --label list Set key=value labels to the daemon (default []) --live-restore Enable live restore of docker when containers are still running --log-driver string Default driver for container logs (default "json-file") -l, --log-level string Set the logging level ("debug", "info", "warn", "error", "fatal") (default "info") --log-opt map Default log driver options for containers (default map[]) --max-concurrent-downloads int Set the max concurrent downloads for each pull (default 3) --max-concurrent-uploads int Set the max concurrent uploads for each push (default 5) --metrics-addr string Set default address and port to serve the metrics api on --mtu int Set the containers network MTU --no-new-privileges Set no-new-privileges by default for new containers --oom-score-adjust int Set the oom_score_adj for the daemon (default -500) -p, --pidfile string Path to use for daemon PID file (default "/var/run/docker.pid") --raw-logs Full timestamps without ANSI coloring --registry-mirror list Preferred Docker registry mirror (default []) --seccomp-profile string Path to seccomp profile --selinux-enabled Enable selinux support --shutdown-timeout int Set the default shutdown timeout (default 15) -s, --storage-driver string Storage driver to use --storage-opt list Storage driver options (default []) --swarm-default-advertise-addr string Set default address or interface for swarm advertised address --tls Use TLS; implied by --tlsverify --tlscacert string Trust certs signed only by this CA (default "~/.docker/ca.pem") --tlscert string Path to TLS certificate file (default "~/.docker/cert.pem") --tlskey string Path to TLS key file (default ~/.docker/key.pem") --tlsverify Use TLS and verify the remote --userland-proxy Use userland proxy for loopback traffic (default true) --userland-proxy-path string Path to the userland proxy binary --userns-remap string User/Group setting for user namespaces -v, --version Print version information and quit
帶有[]的選項可以指定多次。
dockerd
是管理容器的持續(xù)過程。Docker為守護進程和客戶端使用不同的二進制文件。運行你輸入的守護進程dockerd
。
要使用調(diào)試輸出運行守護程序,請使用dockerd -D
或添加debug: true
到該daemon.json
文件。
注:在Docker1.13或更高版本,通過啟動使實驗性的功能
dockerd
與--experimental
標(biāo)志或添加experimental: true
到daemon.json
文件。在較早的Docker版本中,需要不同的版本來啟用實驗功能。
Docker daemon可以監(jiān)聽通過三種不同類型的Socket引擎API請求:unix
,tcp
,和fd
。
默認情況下,創(chuàng)建unix
域套接字(或IPC套接字)/var/run/docker.sock
,需要root
權(quán)限或docker
組成員資格。
如果您需要遠程訪問Docker守護程序,則需要啟用tcp
套接字。請注意,默認設(shè)置提供對Docker守護進程的未加密和未經(jīng)身份驗證的直接訪問 - 應(yīng)使用內(nèi)置的HTTPS加密套接字或?qū)踩玏eb代理放在其前面進行保護。您可以使用IP地址在具有特定網(wǎng)絡(luò)接口的2375
所有網(wǎng)絡(luò)接口上偵聽端口-H tcp://0.0.0.0:2375
:-H tcp://192.168.59.103:2375
。通常使用端口2375
進行未加密,并使用端口2376
與守護進程進行加密通信。
注:如果使用HTTPS加密套接字,請記住只支持TLS1.0及更高版本。出于安全考慮,不再支持SSLv 3及以下協(xié)議。
基于Systemd系統(tǒng)中,可以通過后臺程序溝通Systemd插座激活,使用dockerd -H fd://
。使用fd://
對于大多數(shù)設(shè)置來說都是完美的,但你也可以指定單獨的套接字:dockerd -H fd://3
。如果找不到指定的套接字激活文件,則Docker將退出。您可以在Docker源代碼樹中找到在Docker和Systemd中使用Systemd套接字激活的示例。
可以將Docker守護進程配置為同時使用多個套接字偵聽多個套接字。-H
備選方案:
# listen using the default unix socket, and on 2 specific IP addresses on this host.$ sudo dockerd -H unix:///var/run/docker.sock -H tcp://192.168.59.106 -H tcp://10.10.10.2
Docker客戶端將遵守DOCKER_HOST
環(huán)境變量來設(shè)置-H
客戶端的標(biāo)志。使用一個下面的命令:
$ docker -H tcp://0.0.0.0:2375 ps
$ export DOCKER_HOST="tcp://0.0.0.0:2375"$ docker ps
將DOCKER_TLS_VERIFY
環(huán)境變量設(shè)置為除空字符串以外的任何值都等同于設(shè)置--tlsverify
標(biāo)志。以下是等同的:
$ docker --tlsverify ps # or $ export DOCKER_TLS_VERIFY=1$ docker ps
泊塢窗客戶端將信守HTTP_PROXY
,HTTPS_PROXY
以及NO_PROXY
環(huán)境變量(或小寫的版本上)。HTTPS_PROXY
優(yōu)先于HTTP_PROXY
。
警告*更改默認值
docker
守護進程綁定到TCP端口或Unix碼頭工人用戶組將通過允許非根用戶獲取信息來增加您的安全風(fēng)險。根部進入主機。確保您控制對docker
如果您正在綁定到TCP端口,任何訪問該端口的人都可以完全訪問該端口;因此,在開放的網(wǎng)絡(luò)中不宜使用該端口。
帶著-H
可以讓Docker守護進程偵聽特定的IP和端口。默認情況下,它將監(jiān)聽unix:///var/run/docker.sock
類只允許本地連接。根部用戶。你能把它設(shè)置為0.0.0.0:2375
或者一個特定的主機ip讓每個人都可以訪問,但這是不建議因為對某個人來說,獲得對運行守護進程的主機的根訪問非常簡單。
同樣,Docker客戶端可以使用-H
連接到自定義端口。Docker客戶端將默認連接到unix:///var/run/docker.sock
Linux和tcp://127.0.0.1:2376
Windows。
-H
接受以下格式的主機和端口分配:
tcp://[host]:[port][path] or unix://path
例如:
tcp://
- > TLS加密打開時TCP 127.0.0.1
端口連接到任一端口2376
,或者2375
當(dāng)通信采用純文本時連接到端口。
tcp://host:2375
->主機上的TCP連接:2375
tcp://host:2375/path
->主機上的tcp連接:2375和所有請求的前置路徑
unix://path/to/socket
->Unix套接字位于path/to/socket
-H
為空時,將默認為與未-H
傳入時相同的值。
-H
還接受TCP綁定的簡短形式:host:
或host:port
或:port
在守護進程模式下運行Docker:
$ sudo <path to>/dockerd -H 0.0.0.0:5555 &
下載ubuntu
圖片:
$ docker -H :5555 pull ubuntu
您可以使用多個-H
,例如,如果您希望同時偵聽tcp和unix套接字。
# Run docker in daemon mode $ sudo <path to>/dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock &# Download an ubuntu image, use default Unix socket $ docker pull ubuntu # OR use the TCP port $ docker -H tcp://127.0.0.1:2375 pull ubuntu
Docker daemon 進程有幾種不同的圖像層存儲驅(qū)動程序支持:aufs
,devicemapper
,btrfs
,zfs
,overlay
和overlay2
。
aufs
驅(qū)動器是最古老的,而是基于Linux內(nèi)核補丁集是不太可能被合并到主內(nèi)核中。這些也會導(dǎo)致一些嚴(yán)重的內(nèi)核崩潰。但是,aufs
允許容器共享可執(zhí)行文件和共享庫內(nèi)存,因此在使用相同的一個或多個程序庫運行數(shù)千個容器時是非常有用的選擇。
devicemapper
驅(qū)動程序使用精簡配置和寫入時復(fù)制(CoW)快照。對于每個設(shè)備映射圖位置(通常情況下)/var/lib/docker/devicemapper
,將根據(jù)兩個塊設(shè)備創(chuàng)建精簡池,其中一個用于數(shù)據(jù),另一個用于元數(shù)據(jù)。默認情況下,這些塊設(shè)備是通過使用自動創(chuàng)建的稀疏文件的回送裝載自動創(chuàng)建的。有關(guān)如何自定義此設(shè)置的方法,請參閱下面的存儲驅(qū)動程序選項。?jpetazzo /使用Device Mapper插件文章調(diào)整Docker容器解釋了如何在不使用選項的情況下調(diào)整現(xiàn)有設(shè)置。
btrfs
驅(qū)動程序的速度非???,就像docker build
- 但不像devicemapper
設(shè)備之間共享可執(zhí)行內(nèi)存。使用dockerd -s btrfs -g /mnt/btrfs_partition
。
zfs
驅(qū)動可能不如btrfs
但對穩(wěn)定較長的記錄。由于Single Copy ARC
克隆之間的共享塊只會被緩存一次。使用dockerd -s zfs
。zfs.fsname
按照存儲驅(qū)動程序選項中的說明選擇不同的zfs文件系統(tǒng)集選項。
overlay
是一個非??焖俚穆?lián)合文件系統(tǒng)。現(xiàn)在它在3.18.0版本的主要Linux內(nèi)核中合并。overlay
也支持頁面緩存共享,這意味著訪問同一文件的多個容器可以共享一個頁面緩存條目(或條目),它使overlay
內(nèi)存與aufs
驅(qū)動程序一樣高效。呼叫dockerd -s overlay
使用它。
注意:
overlay:
盡管如此,該功能仍然非常年輕,不應(yīng)在生產(chǎn)中使用。最值得注意的是,使用overlay
會導(dǎo)致過多的inode消耗(特別是隨著圖像數(shù)量的增長),以及>與使用RPM不兼容。
overlay2
使用相同的快速工會的文件系統(tǒng),但采用的利用附加功能在Linux內(nèi)核4.0添加,以避免過多的inode消耗。調(diào)用dockerd -s overlay2
使用它。
注:這兩個
overlay
和overlay2
是目前不支持上btrfs
或?qū)懳募到y(tǒng)的任何副本,只應(yīng)在使用ext4
分區(qū)。
特定的存儲驅(qū)動程序可以使用--storage-opt
標(biāo)志指定的選項進行配置。選項為devicemapper
前綴dm
,zfs
開始zfs
選項和btrfs
開始選項btrfs
。
這是Linux上devicemapper配置文件的一個示例:
{ "storage-driver": "devicemapper", "storage-opts": [ "dm.thinpooldev=/dev/mapper/thin-pool", "dm.use_deferred_deletion=true", "dm.use_deferred_removal=true" ]}
dm.thinpooldev
指定用于精簡池的自定義塊存儲設(shè)備。
如果使用塊設(shè)備進行設(shè)備映射程序存儲,則最好使用它lvm
來創(chuàng)建和管理精簡池卷。然后將該卷交給Docker專門創(chuàng)建映像和容器所需的快照卷。
在Engine外部管理精簡池使得Docker利用設(shè)備映射精簡配置作為Docker容器的后備存儲,這是功能最豐富的方法?;趌vm的精簡池管理功能的亮點包括:自動或交互式精簡池調(diào)整大小支持,動態(tài)更改精簡池功能,當(dāng)lvm激活精簡池時自動精簡元數(shù)據(jù)檢查等。
作為未提供精簡池的后備,將創(chuàng)建回送文件。環(huán)回速度非常慢,但可以在沒有任何存儲預(yù)配置的情況下使用。強烈建議您不要在生產(chǎn)環(huán)境中使用環(huán)回。確保您的引擎守護程序提供了一個--storage-opt dm.thinpooldev
參數(shù)。
$ sudo dockerd --storage-opt dm.thinpooldev=/dev/mapper/thin-pool
dm.directlvm_device
作為上述提供瘦池的替代方案,Docker可以為您設(shè)置一個塊設(shè)備。
$ sudo dockerd --storage-opt dm.directlvm_device=/dev/xvdf
dm.thinp_percent
設(shè)置要用于存儲的塊設(shè)備傳遞的百分比。
$ sudo dockerd --storage-opt dm.thinp_percent=95
dm.thinp_metapercent
設(shè)置要用于元數(shù)據(jù)存儲的傳入塊設(shè)備的百分比。
$ sudo dockerd --storage-opt dm.thinp_metapercent=1
dm.thinp_autoextend_threshold
在lvm
嘗試自動擴展可用空間100 =禁用之前,設(shè)置所用空間百分比的值
$ sudo dockerd --storage-opt dm.thinp_autoextend_threshold=80
dm.thinp_autoextend_percent
設(shè)置值百分比值,以在lvm
嘗試自動擴展可用空間100 =禁用時增加精簡池
$ sudo dockerd --storage-opt dm.thinp_autoextend_percent=20
dm.basesize
指定創(chuàng)建基礎(chǔ)設(shè)備時使用的大小,這限制了圖像和容器的大小。默認值是10G。請注意,精簡設(shè)備本質(zhì)上是“稀疏”的,因此大多數(shù)情況下為空的10G設(shè)備不會在池中使用10 GB的空間。但是,文件系統(tǒng)將為設(shè)備越大的空箱使用更多空間。
在守護進程重新啟動時可以增加基本設(shè)備的大小,這將允許所有將來的映像和容器(基于這些新映像)成為新的基本設(shè)備大小。
$ sudo dockerd --storage-opt dm.basesize=50G
這會將基本設(shè)備大小增加到50G。如果現(xiàn)有的基礎(chǔ)設(shè)備大小大于50G,則Docker守護程序?qū)⒁l(fā)錯誤。用戶可以使用此選項擴展基本設(shè)備尺寸,但不允許收縮。
此值影響系統(tǒng)范圍內(nèi)的“基本”空文件系統(tǒng),該文件系統(tǒng)可能已經(jīng)被拉出的圖像初始化和繼承。通常,對此值的更改需要其他步驟才能生效:
$ sudo service docker stop $ sudo rm -rf /var/lib/docker $ sudo service docker start
dm.loopdatasize
注此選項配置devicemapper回送,不應(yīng)在生產(chǎn)中使用。
指定為用于瘦池的“數(shù)據(jù)”設(shè)備創(chuàng)建回送文件時使用的大小。默認大小為100 G。這個文件很稀疏,所以它最初不會占用這么多空間。
$ sudo dockerd --storage-opt dm.loopdatasize=200G
dm.loopmetadatasize
注此選項配置devicemapper回送,不應(yīng)在生產(chǎn)中使用。
指定為用于瘦池的“元數(shù)據(jù)”設(shè)備創(chuàng)建回送文件時使用的大小。默認大小是2G。這個文件很稀疏,所以它最初不會占用這么多空間。
$ sudo dockerd --storage-opt dm.loopmetadatasize=4G
dm.fs
指定要用于基礎(chǔ)設(shè)備的文件系統(tǒng)類型。支持的選項是“ext4”和“xfs”。默認是“xfs”
$ sudo dockerd --storage-opt dm.fs=ext4
dm.mkfsarg
指定在創(chuàng)建基本設(shè)備時要使用的額外mkfs參數(shù)。
$ sudo dockerd --storage-opt "dm.mkfsarg=-O ^has_journal"
dm.mountopt
指定安裝瘦設(shè)備時使用的額外安裝選項。
$ sudo dockerd --storage-opt dm.mountopt=nodiscard
dm.datadev
(已棄用,使用dm.thinpooldev
)
指定用于瘦池數(shù)據(jù)的自定義塊設(shè)備。
如果使用塊設(shè)備來存儲設(shè)備映射器,最好兩者都使用。datadev
和metadatadev
應(yīng)指定以完全避免使用回送設(shè)備。
$ sudo dockerd \ --storage-opt dm.datadev=/dev/sdb1 \ --storage-opt dm.metadatadev=/dev/sdc1
dm.metadatadev
(已棄用,使用dm.thinpooldev
)
指定用于瘦池元數(shù)據(jù)的自定義塊設(shè)備。
為了獲得最好的性能,元數(shù)據(jù)應(yīng)該位于與數(shù)據(jù)不同的紡錘體上,或者更好地放在SSD上。
如果設(shè)置了新的元數(shù)據(jù)池,則要求其有效。這可以通過對前4k進行零化以指示空元數(shù)據(jù)來實現(xiàn),如下所示:
$ dd if=/dev/zero of=$metadata_dev bs=4096 count=1
$ sudo dockerd \ --storage-opt dm.datadev=/dev/sdb1 \ --storage-opt dm.metadatadev=/dev/sdc1
dm.blocksize
指定要用于瘦池的自定義塊大小。默認的塊大小是64K。
$ sudo dockerd --storage-opt dm.blocksize=512K
dm.blkdiscard
啟用或禁用blkdiscard
移除devicemapper設(shè)備時的使用。如果使用回送設(shè)備,則默認情況下啟用此功能,并且需要在移除圖像/容器時重新分組環(huán)回文件。
在回送時禁用此選項會導(dǎo)致多更快的集裝箱移除時間,但將使空間使用/var/lib/docker
當(dāng)容器被移除時,目錄不會返回給系統(tǒng)以供其他使用。
$ sudo dockerd --storage-opt dm.blkdiscard=false
dm.override_udev_sync_check
覆蓋devicemapperudevudev
和udev
之間的同步檢查。是Linux內(nèi)核的設(shè)備管理器。
要查看udev
使用該devicemapper
驅(qū)動程序的Docker守護進程的同步支持,請運行:
$ docker info[...]Udev Sync Supported: true[...]
當(dāng)udev
同步支持是true
,則devicemapper
和的udev可以協(xié)調(diào)用于容器的設(shè)備的激活和去激活。
當(dāng)udev
同步支持是false
,在之間出現(xiàn)爭用條件devicemapper
和udev
過程中創(chuàng)建和清理。競賽狀況導(dǎo)致錯誤和失敗。(有關(guān)這些故障的信息,請參閱docker#4036)
要允許docker
守護進程啟動,而不管udev
同步不受支持,請設(shè)置dm.override_udev_sync_check
為true:
$ sudo dockerd --storage-opt dm.override_udev_sync_check=true
當(dāng)這個值是true
,devicemapper
繼續(xù),并簡單地警告你錯誤正在發(fā)生。
注意:理想是追求一個
docker
支持同步的守護進程和環(huán)境udev
。有關(guān)此主題的進一步討論,請參見docker#4036。否則,請設(shè)置此標(biāo)志以將現(xiàn)有的Docker守護程序遷移到具有受支持環(huán)境的守護程序。
dm.use_deferred_removal
啟用延遲設(shè)備刪除的使用,如果libdm
內(nèi)核驅(qū)動程序支持該機制。
延遲設(shè)備刪除是指當(dāng)設(shè)備被移除/停用時,如果設(shè)備處于繁忙狀態(tài),則在設(shè)備上調(diào)度延遲刪除。當(dāng)設(shè)備的最后一個用戶退出時,設(shè)備會自動離開。
例如,當(dāng)容器退出時,其相關(guān)的瘦設(shè)備將被移除。如果該設(shè)備已泄漏到其他掛載命名空間中,無法刪除,則容器退出仍然成功,此選項將導(dǎo)致系統(tǒng)調(diào)度設(shè)備以延遲刪除。它不會在試圖刪除繁忙設(shè)備的循環(huán)中等待。
$ sudo dockerd --storage-opt dm.use_deferred_removal=true
dm.use_deferred_deletion
允許對瘦池設(shè)備使用延遲設(shè)備刪除。默認情況下,瘦池設(shè)備刪除是同步的。在刪除容器之前,Docker守護進程將刪除所有相關(guān)設(shè)備。如果存儲驅(qū)動程序無法刪除設(shè)備,則容器刪除失敗,守護進程返回。
Error deleting container: Error response from daemon: Cannot destroy container
若要避免此失敗,請在守護進程上啟用延遲設(shè)備刪除和延遲設(shè)備刪除。
$ sudo dockerd \ --storage-opt dm.use_deferred_deletion=true \ --storage-opt dm.use_deferred_removal=true
啟用這兩個選項后,如果設(shè)備在驅(qū)動程序刪除容器時繁忙,則驅(qū)動程序?qū)⒃O(shè)備標(biāo)記為“已刪除”。稍后,當(dāng)設(shè)備沒有使用時,驅(qū)動程序會刪除它。
通常,默認情況下啟用此選項應(yīng)該是安全的。當(dāng)跨多個掛載命名空間無意中發(fā)生掛載點泄漏時,它將有所幫助。
dm.min_free_space
指定精簡池中的最小可用空間百分比,以便新設(shè)備創(chuàng)建成功。此檢查適用于免費數(shù)據(jù)空間以及免費元數(shù)據(jù)空間。有效值為0% - 99%。值0%禁用自由空間檢查邏輯。如果用戶未為此選項指定值,則引擎使用默認值10%。
無論何時創(chuàng)建新的精簡池設(shè)備(在docker pull
容器創(chuàng)建期間或創(chuàng)建期間),引擎都會檢查最小可用空間是否可用。如果有足夠的空間不可用,則設(shè)備創(chuàng)建失敗,任何相關(guān)的docker
操作都將失敗。
若要從此錯誤中恢復(fù),必須在瘦池中創(chuàng)建更多空閑空間以從錯誤中恢復(fù)。您可以通過從瘦池中刪除一些圖像和容器來創(chuàng)建空閑空間。您還可以向瘦池添加更多的存儲空間。
要向LVM(邏輯卷管理)精簡池添加更多空間,只需將更多存儲添加到卷組容器精簡池; 這應(yīng)該會自動解決任何錯誤。如果您的配置使用循環(huán)設(shè)備,則停止引擎守護進程,增大循環(huán)文件的大小并重新啟動守護進程以解決問題。
$ sudo dockerd --storage-opt dm.min_free_space=10%
dm.xfs_nospace_max_retries
指定當(dāng)?shù)讓哟鎯υO(shè)備返回ENOSPC(無空間)錯誤時,XFS應(yīng)嘗試完成IO的最大重試次數(shù)。
默認情況下,XFS會無限次地重試以完成IO,這可能會導(dǎo)致無法運行的進程。為了改變這種行為,可以將xfs_nospace_max_retries設(shè)置為0,并且XFS在獲得ENOSPC后不會重試IO,并關(guān)閉文件系統(tǒng)。
$ sudo dockerd --storage-opt dm.xfs_nospace_max_retries=0
zfs.fsname
設(shè)置zfs文件系統(tǒng),docker將在其中創(chuàng)建自己的數(shù)據(jù)集。默認情況下,docker將選取docker graph(/var/lib/docker
)所在的zfs文件系統(tǒng)。
$ sudo dockerd -s zfs --storage-opt zfs.fsname=zroot/docker
btrfs.min_space
指定創(chuàng)建用于容器的子容量時使用的最小大小。如果用戶在使用-storage-opt size選項創(chuàng)建或運行容器時使用btrfs的磁盤配額,則docker應(yīng)確保大小不能小于btrfs.min_space。
$ sudo dockerd -s btrfs --storage-opt btrfs.min_space=10G
overlay2.override_kernel_check
覆蓋允許overlay2的Linux內(nèi)核版本檢查。在4.0.0中,支持指定overlay2所需的多個低級目錄。但是,可能會修補一些較舊的內(nèi)核版本,以便為OverlayFS添加多個較低目錄支持。只有在驗證內(nèi)核中存在此支持后才能使用此選項。在沒有此支持的情況下在內(nèi)核上應(yīng)用此選項會導(dǎo)致安裝失敗。
Docker daemon依賴于OCI兼容的運行(通過調(diào)用containerd
后臺程序)作為其接口Linux內(nèi)核namespaces
,cgroups
以及SELinux
。
默認情況下,Docker守護進程會自動啟動containerd
。如果要控制containerd
啟動,請手動啟動containerd
并containerd
使用--containerd
標(biāo)志將路徑傳遞到套接字。例如:
$ sudo dockerd --containerd /var/run/dev/docker-containerd.sock
運行時可以通過配置文件或使用--add-runtime
命令行參數(shù)
下面是一個通過配置添加2個運行時的示例:
{"default-runtime": "runc","runtimes": {"runc": {"path": "runc"},"custom": {"path": "/usr/local/bin/my-runc-replacement","runtimeArgs": ["--debug"]}}}
這是通過命令行的相同示例:
$ sudo dockerd --add-runtime runc=runc --add-runtime custom=/usr/local/bin/my-runc-replacement
注意:不支持通過命令行定義運行時參數(shù)。
您可以使用--exec-opt
標(biāo)志指定的選項來配置運行時。所有標(biāo)志的選項都有native
前綴。有一個native.cgroupdriver
選項可用。
該native.cgroupdriver
選項指定容器的cgroup的管理。您只能指定cgroupfs
或systemd
。如果指定systemd
并且不可用,則系統(tǒng)出錯。如果您省略該native.cgroupdriver
選項,cgroupfs
則使用該選項。
此示例設(shè)置cgroupdriver
到systemd
*
$ sudo dockerd --exec-opt native.cgroupdriver=systemd
設(shè)置此選項適用于守護進程啟動的所有容器。
Windows容器也--exec-opt
用于特殊用途。Docker用戶可以指定默認的容器隔離技術(shù),例如:
> dockerd --exec-opt isolation=hyperv
將hyperv
在Windows上制作默認的隔離技術(shù)。如果在守護進程啟動時未指定隔離值,則在Windows客戶端上,默認值為hyperv
,并且在Windows服務(wù)器上,默認值為process
。
若要為所有Docker容器設(shè)置DNS服務(wù)器,請使用:
$ sudo dockerd --dns 8.8.8.8
若要為所有Docker容器設(shè)置DNS搜索域,請使用:
$ sudo dockerd --dns-search example.com
某些圖像(例如Windows基本圖像)包含分布受許可限制的工件。當(dāng)這些圖像被推送到注冊表時,不包括受限的工件。
要覆蓋特定注冊表的此行為,請使用--allow-nondistributable-artifacts
以下形式之一的選項:
--allow-nondistributable-artifacts myregistry:5000
告訴Docker守護進程將不可分發(fā)的工件推到MyRegistry:5000。
--allow-nondistributable-artifacts 10.1.0.0/16
告訴Docker守護進程將不可分發(fā)的工件推送到其解析IP地址位于CIDR語法描述的子網(wǎng)中的所有注冊中心。
此選項可多次使用。
此選項在將包含不可分發(fā)工件的圖像推送到空隙網(wǎng)絡(luò)上的注冊表時非常有用,這樣網(wǎng)絡(luò)上的主機就可以在不連接到另一臺服務(wù)器的情況下提取圖像。
警告:不可分發(fā)的工件通常對如何和在何處分發(fā)和共享它們有限制。只使用此特性將工件推到私有注冊中心,并確保您遵守任何涉及重新分發(fā)不可分發(fā)工件的術(shù)語。
Docker認為私人注冊安全或不安全。在本節(jié)的其余部分中,注冊表用于私人注冊表,并且myregistry:5000
是私人注冊表的占位符示例。
安全注冊表使用TLS,并將其CA證書的副本放在Docker主機上/etc/docker/certs.d/myregistry:5000/ca.crt
。一個不安全的注冊表要么不使用TLS(即,使用純文本HTTP進行監(jiān)聽),要么使用帶有Docker守護程序未知的CA證書的TLS。后者可能發(fā)生在未找到證書的情況下/etc/docker/certs.d/myregistry:5000/
,或證書驗證失敗(即錯誤的CA)。
默認情況下,Docker假設(shè)所有,但本地(請參閱下面的本地注冊表),注冊表是安全的。如果Docker假定注冊表是安全的,則不可能與不安全的注冊表通信。為了與不安全的注冊表進行通信,Docker守護進程需要--insecure-registry
以下兩種形式之一:
--insecure-registry myregistry:5000
告訴Docker守護進程,MyRegistry:5000應(yīng)該被認為是不安全的。
--insecure-registry 10.1.0.0/16
告訴Docker守護進程,其域解析為IP地址的所有注冊中心都屬于CIDR語法描述的子網(wǎng)的一部分,應(yīng)該被認為是不安全的。
此標(biāo)志可多次使用,以允許將多個注冊中心標(biāo)記為不安全。
如果不安全的注冊表沒有被標(biāo)記為不安全的,docker pull
,docker push
,和docker search
將導(dǎo)致一個錯誤消息,提示用戶或者安全或通過--insecure-registry
如上述那樣標(biāo)志提供給多克爾守護進程。
本地注冊中心的IP地址在127.0.0.0/8范圍內(nèi),從Docker 1.3.2開始自動標(biāo)記為不安全。不建議依賴這一點,因為它可能在未來發(fā)生變化。
使能--insecure-registry
,即允許不加密和/或不可信的通信,在運行本地注冊表時可能很有用。但是,由于它的使用會產(chǎn)生安全漏洞,因此只應(yīng)該為測試目的啟用它。為了提高安全性,用戶應(yīng)該將他們的CA添加到系統(tǒng)的可信CA列表中,而不是啟用--insecure-registry
...
針對僅支持傳統(tǒng)v1協(xié)議的注冊管理機構(gòu)的操作默認處于禁用狀態(tài)。具體來說,守護進程不會嘗試push
,pull
并login
以V1登記。此例外情況search
仍然可以在v1注冊表上執(zhí)行。
如果您需要與尚未遷移到v2協(xié)議的注冊表交互,請?zhí)砑?code>"disable-legacy-registry":false到守護程序配置文件或設(shè)置--disable-legacy-registry=false
標(biāo)志。
Docker v17.12不再支持交互v1注冊中心,disable-legacy-registry
配置選項將被刪除。
在使用HTTPS
代理,碼頭集線器證書將被代理的證書所取代。這些證書需要添加到Docker主機的配置中:
安裝ca-certificates
分發(fā)包
向您的網(wǎng)絡(luò)管理員詢問代理的CA證書,并將它們附加到/etc/pki/tls/certs/ca-bundle.crt
然后用HTTPS_PROXY=http://username:password@proxy:port/ dockerd
...username:
和password@
是可選的,并且只有當(dāng)您的代理被設(shè)置為需要身份驗證時才需要。
這只會將代理和身份驗證添加到Docker守護進程的請求-docker build
和正在運行的容器需要額外的配置才能使用代理。
ulimit
設(shè)置--default-ulimit
允許您設(shè)置ulimit
用于所有容器的默認選項。它采用相同的選項--ulimit
進行docker run
。如果未設(shè)置這些默認值ulimit
,則將docker run
從Docker守護程序繼承設(shè)置(如果未設(shè)置)。--ulimit
傳遞給任何選項docker run
將覆蓋這些默認值。
請小心使用ulimit標(biāo)志設(shè)置nproc,因為nproc是由Linux設(shè)計的,用于設(shè)置用戶可用的最大進程數(shù),而不是容器。 詳情請查看運行參考。
--cluster-advertise
選項指定此特定守護程序?qū)嵗趯⒆陨韽V告到群集時應(yīng)使用的組合host:port
或interface:port
組合。守護進程通過此值由遠程主機訪問。如果您指定了一個接口,請確保它包含實際Docker主機的IP地址。對于通過創(chuàng)建的引擎安裝docker-machine
,界面通常是eth1
。
守護進程使用libkv在集群內(nèi)通告節(jié)點。一些鍵值后端支持相互TLS。配置守護程序使用的客戶端TLS設(shè)置可以使用--cluster-store-opt
標(biāo)志進行配置,指定PEM編碼文件的路徑。例如:
$ sudo dockerd \ --cluster-advertise 192.168.1.2:2376 \ --cluster-store etcd://192.168.1.2:2379 \ --cluster-store-opt kv.cacertfile=/path/to/ca.pem \ --cluster-store-opt kv.certfile=/path/to/cert.pem \ --cluster-store-opt kv.keyfile=/path/to/key.pem
當(dāng)前支持的群集存儲選項是:
選項 | 描述 |
---|---|
discovery.heartbeat | 以秒為單位指定守護進程使用的心跳定時器作為保活機制,以確保發(fā)現(xiàn)模塊將節(jié)點視為在群集中處于活動狀態(tài)。如果未配置,則默認值為20秒。 |
discovery.ttl | 如果在配置的ttl值內(nèi)未收到有效的心跳,則指定發(fā)現(xiàn)模塊用于超時節(jié)點的TTL(生存時間)(以秒為單位)。如果未配置,則默認值為60秒。 |
kv.cacertfile | 指定包含PEM編碼CA證書的本地文件的路徑。 |
kv.certfile | 指定帶有PEM編碼證書的本地文件的路徑。該證書用作與密鑰/值存儲進行通信的客戶證書。 |
kv.keyfile | 指定帶有PEM編碼私鑰的本地文件的路徑。該私鑰用作與密鑰/值存儲進行通信的客戶端密鑰。 |
kv.path | 指定鍵/值存儲區(qū)中的路徑。如果未配置,則默認值為'docker / nodes'。 |
Docker的訪問授權(quán)可以通過您的組織可以購買或構(gòu)建自己的授權(quán)插件進行擴展。daemon
使用該--authorization-plugin=PLUGIN_ID
選項啟動Docker時,您可以安裝一個或多個授權(quán)插件。
$ sudo dockerd --authorization-plugin=plugin1 --authorization-plugin=plugin2,...
PLUGIN_ID
值是插件的名稱或其規(guī)范文件的路徑。插件的實現(xiàn)確定您是否可以指定名稱或路徑。請咨詢您的Docker管理員以獲取有關(guān)可用插件的信息。
一旦安裝了插件,daemon
通過命令行或Docker的Engine API 發(fā)出的請求將被插件允許或拒絕。如果您安裝了多個插件,則每個插件都必須允許完成請求。
有關(guān)如何創(chuàng)建授權(quán)插件的信息,請參閱本文檔的Docker擴展部分中的授權(quán)插件部分。
Linux內(nèi)核用戶名稱空間支持通過啟用進程并因此使容器具有唯一范圍的用戶和組ID來提供額外的安全性,這些用戶和組ID是在主機系統(tǒng)使用的傳統(tǒng)用戶和組范圍之外??赡茏钪匾陌踩倪M是,默認情況下,作為root
用戶運行的容器進程在容器內(nèi)部具有預(yù)期的管理特權(quán)(有一些限制),但將有效地映射到uid
主機上的非特權(quán)。
有關(guān)如何使用此功能以及限制的詳細信息,請參閱使用用戶命名空間隔離容器。
IP偽裝使用地址轉(zhuǎn)換來允許沒有公共IP的容器與Internet上的其他計算機通話。這可能會干擾某些網(wǎng)絡(luò)拓撲,--ip-masq=false
可能會被禁用。
Docker支持Docker數(shù)據(jù)目錄(/var/lib/docker
)和for的軟鏈接/var/lib/docker/tmp
。該DOCKER_TMPDIR
和數(shù)據(jù)目錄,可以這樣設(shè)置:
DOCKER_TMPDIR=/mnt/disk2/tmp /usr/local/bin/dockerd -D -g /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log 2>&1# orexport DOCKER_TMPDIR=/mnt/disk2/tmp/usr/local/bin/dockerd -D -g /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log 2>&1
--cgroup-parent
選項允許您設(shè)置用于容器的默認cgroup父項。如果未設(shè)置此選項,則默認/docker
為fs cgroup驅(qū)動程序和system.slice
systemd cgroup驅(qū)動程序。
如果cgroup具有前導(dǎo)正斜杠(/
),則cgroup將在根cgroup下創(chuàng)建,否則將在守護進程cgroup下創(chuàng)建cgroup。
假設(shè)守護進程在cgroup中運行daemoncgroup
,--cgroup-parent=/foobar
創(chuàng)建一個cgroup /sys/fs/cgroup/memory/foobar
,而使用--cgroup-parent=foobar
創(chuàng)建cgroup/sys/fs/cgroup/memory/daemoncgroup/foobar
systemd cgroup驅(qū)動程序具有不同的規(guī)則--cgroup-parent
。Systemd表示逐層分層,并且切片的名稱對樹中的位置進行編碼。所以--cgroup-parent
對于systemd cgroups應(yīng)該是一個片名。一個名稱可以由一個破折號分隔的一系列名稱組成,它描述了從根片段開始切片的路徑。例如,--cgroup-parent=user-a-b.slice
表示容器的內(nèi)存cgroup被創(chuàng)建/sys/fs/cgroup/memory/user.slice/user-a.slice/user-a-b.slice/docker-<id>.scope
。
這個設(shè)置也可以每個集裝箱設(shè)置,使用--cgroup-parent
的選項docker create
和docker run
,并優(yōu)先于--cgroup-parent
對守護進程選項。
--metrics-addr
選項采用tcp地址來為度量標(biāo)準(zhǔn)API提供服務(wù)。該功能仍然是實驗性的,因此,守護程序必須以實驗?zāi)J竭\行才能使用此功能。
要在localhost:1337上提供指標(biāo)API,您需要指定--metrics-addr 127.0.0.1:1337
允許您在API上發(fā)出請求127.0.0.1:1337/metrics
以接收prometheus格式的指標(biāo)。
如果您運行的是Prometheus服務(wù)器,則可以將此地址添加到您的scrape配置文件中,以便prometheus在Docker上收集指標(biāo)。有關(guān)prometheus的更多信息,您可以在這里查看網(wǎng)站。
scrape_configs: - job_name: 'docker' static_configs: - targets: ['127.0.0.1:1337']
請注意,此特性仍被標(biāo)記為實驗性功能,因為度量和度量名稱可能會更改,而此功能仍處于試驗階段。請?zhí)峁┓答佉庖?,您希望看到收集的API。
該--config-file
選項允許您為JMS格式的守護程序設(shè)置任何配置選項。此文件使用相同的標(biāo)記名稱作為關(guān)鍵字,除了標(biāo)志,使幾個條目,它使用標(biāo)志名的復(fù)數(shù),例如,labels
對于label
標(biāo)志。
配置文件中設(shè)置的選項不能與通過標(biāo)志設(shè)置的選項沖突。如果一個選項在文件和標(biāo)志之間重復(fù),docker守護進程無法啟動,無論它們的值如何。我們這樣做是為了避免默默地忽略配置重新加載中引入的更改。例如,如果在配置文件中設(shè)置了守護進程標(biāo)簽,并且還通過--label
標(biāo)志設(shè)置了守護進程標(biāo)簽,則守護進程無法啟動。當(dāng)守護程序啟動時,文件中不存在的選項將被忽略。
Linux上配置文件的默認位置是/etc/docker/daemon.json
。該--config-file
標(biāo)志可用于指定非默認位置。
這是Linux上允許的配置選項的完整示例:
{"authorization-plugins": [],"data-root": "","dns": [],"dns-opts": [],"dns-search": [],"exec-opts": [],"exec-root": "","experimental": false,"storage-driver": "","storage-opts": [],"labels": [],"live-restore": true,"log-driver": "","log-opts": {},"mtu": 0,"pidfile": "","cluster-store": "","cluster-store-opts": {},"cluster-advertise": "","max-concurrent-downloads": 3,"max-concurrent-uploads": 5,"default-shm-size": "64M","shutdown-timeout": 15,"debug": true,"hosts": [],"log-level": "","tls": true,"tlsverify": true,"tlscacert": "","tlscert": "","tlskey": "","swarm-default-advertise-addr": "","api-cors-header": "","selinux-enabled": false,"userns-remap": "","group": "","cgroup-parent": "","default-ulimits": {},"init": false,"init-path": "/usr/libexec/docker-init","ipv6": false,"iptables": false,"ip-forward": false,"ip-masq": false,"userland-proxy": false,"userland-proxy-path": "/usr/libexec/docker-proxy","ip": "0.0.0.0","bridge": "","bip": "","fixed-cidr": "","fixed-cidr-v6": "","default-gateway": "","default-gateway-v6": "","icc": false,"raw-logs": false,"allow-nondistributable-artifacts": [],"registry-mirrors": [],"seccomp-profile": "","insecure-registries": [],"disable-legacy-registry": false,"no-new-privileges": false,"default-runtime": "runc","oom-score-adjust": -500,"runtimes": {"runc": {"path": "runc"},"custom": {"path": "/usr/local/bin/my-runc-replacement","runtimeArgs": ["--debug"]}}}
注意:您不能將
daemon.json
已在守護進程啟動時設(shè)置的選項設(shè)置為標(biāo)志。在systemd
用于啟動Docker守護進程的系統(tǒng)上,-H
已經(jīng)設(shè)置好了,因此您不能使用該hosts
鍵daemon.json
來添加監(jiān)聽地址。有關(guān)如何使用systemd插件文件完成此任務(wù),請參閱https://docs.docker.com/engine/admin/systemd/#custom-docker-daemon-options。
Windows上配置文件的默認位置是%programdata%\docker\config\daemon.json
。該--config-file
標(biāo)志可用于指定非默認位置。
這是Windows上允許的配置選項的完整示例:
{ "authorization-plugins": [], "data-root": "", "dns": [], "dns-opts": [], "dns-search": [], "exec-opts": [], "experimental": false, "storage-driver": "", "storage-opts": [], "labels": [], "log-driver": "", "mtu": 0, "pidfile": "", "cluster-store": "", "cluster-advertise": "", "max-concurrent-downloads": 3, "max-concurrent-uploads": 5, "shutdown-timeout": 15, "debug": true, "hosts": [], "log-level": "", "tlsverify": true, "tlscacert": "", "tlscert": "", "tlskey": "", "swarm-default-advertise-addr": "", "group": "", "default-ulimits": {}, "bridge": "", "fixed-cidr": "", "raw-logs": false, "allow-nondistributable-artifacts": [], "registry-mirrors": [], "insecure-registries": [], "disable-legacy-registry": false}
守護進程運行時可以重新配置某些選項,而無需重新啟動進程。我們使用SIGHUP
Linux中的信號重新加載,并在Windows中使用密鑰進行全局事件Global\docker-daemon-config-$PID
。這些選項可以在配置文件中修改,但仍然會檢查與提供的標(biāo)志的沖突。如果存在沖突,守護進程無法重新配置自身,但它不會停止執(zhí)行。
可以重新配置的當(dāng)前支持的選項列表如下:
debug
cluster-store
它用新地址重新加載發(fā)現(xiàn)商店。
cluster-store-opts
它使用新的選項重新加載發(fā)現(xiàn)存儲。
cluster-advertise
*它修改重新加載后公布的地址。
labels
它用一組新的標(biāo)簽替換守護進程標(biāo)簽。
live-restore
*使在守護進程停機期間保持容器活動...
max-concurrent-downloads
:它更新每次拉的最大并發(fā)下載量。
max-concurrent-uploads
:它更新每次推送的最大并發(fā)上傳量。
default-runtime
::如果在容器創(chuàng)建時未指定,則更新要使用的運行庫。它默認為“默認”,這是隨正式的??堪綆У倪\行時。
runtimes
*它更新可用于運行容器的可供OCI運行時的列表。
authorization-plugin
指定要使用的授權(quán)插件。
allow-nondistributable-artifacts
::用一組新的注冊表替換守護進程將不可分發(fā)的工件推送到的注冊表集。
insecure-registries
它用一組新的不安全注冊表替換守護進程不安全的注冊中心。如果守護進程配置中的某些現(xiàn)有不安全注冊中心不在新重新加載的不安全注冊表中,這些現(xiàn)有注冊表將從守護進程的配置中刪除。
registry-mirrors
它用一組新的注冊表鏡像替換守護進程注冊表鏡像。如果守護進程配置中的某些現(xiàn)有注冊表鏡像不在新重新加載的注冊表鏡像中,這些現(xiàn)有注冊表鏡像將從守護進程的配置中刪除。
更新和重新加載群集配置(例如--cluster-store
,--cluster-advertise
并且--cluster-store-opts
僅在以前未配置這些配置時才會生效。如果--cluster-store
已經(jīng)在標(biāo)志中提供而cluster-advertise
不是,cluster-advertise
可以在配置文件中添加,而不需要伴隨--cluster-store
。如果配置重新加載檢測到以前配置的群集配置中的更改,則會記錄警告消息。
注:在單個主機上運行多個守護進程被視為“實驗性”。用戶應(yīng)該意識到尚未解決的問題。在某些情況下,此解決方案可能無法正常工作。目前正在制定解決辦法,并將在不久的將來交付。
本節(jié)介紹如何在單個主機上運行多個Docker守護進程。要運行多個守護進程,您必須配置每個守護進程,以便它不會與同一主機上的其他守護進程發(fā)生沖突。您可以通過將這些選項設(shè)置為標(biāo)志或使用守護程序配置文件來設(shè)置這些選項。
必須為每個守護進程配置以下守護進程選項:
-b, --bridge= Attach containers to a network bridge--exec-root=/var/run/docker Root of the Docker execdriver--data-root=/var/lib/docker Root of persisted Docker data-p, --pidfile=/var/run/docker.pid Path to use for daemon PID file-H, --host=[] Daemon socket(s) to connect to--iptables=true Enable addition of iptables rules--config-file=/etc/docker/daemon.json Daemon configuration file--tlscacert="~/.docker/ca.pem" Trust certs signed only by this CA--tlscert="~/.docker/cert.pem" Path to TLS certificate file--tlskey="~/.docker/key.pem" Path to TLS key file
當(dāng)守護進程為這些標(biāo)志使用不同的值時,您可以在同一主機上運行它們而不會有任何問題。正確理解這些選項的含義并正確使用它們是非常重要的。
--b, --bridge=
標(biāo)志被設(shè)置docker0
為默認網(wǎng)橋。它在安裝Docker時自動創(chuàng)建。如果您未使用默認設(shè)置,則必須手動創(chuàng)建和配置網(wǎng)橋,或?qū)⑵湓O(shè)置為“無”:--bridge=none
--exec-root
存儲容器狀態(tài)的路徑。默認值是/var/run/docker
。在這里指定運行守護進程的路徑。
--data-root
是存儲持久數(shù)據(jù)(如圖像,卷和群集狀態(tài))的路徑。默認值是/var/lib/docker
。為避免與其他守護進程發(fā)生沖突,請為每個守護進程單獨設(shè)置此參數(shù)。
-p, --pidfile=/var/run/docker.pid
是守護進程的進程ID存儲的路徑。在此指定您的pid文件的路徑。
--host=[]
指定Docker守護進程將偵聽客戶端連接的位置。如果未指定,則默認為/var/run/docker.sock
。
--iptables=false
阻止Docker守護進程添加iptables規(guī)則。如果多個守護進程管理iptables規(guī)則,他們可能會覆蓋另一個守護進程設(shè)置的規(guī)則。請注意,禁用此選項需要您手動添加iptables規(guī)則以顯示容器端口。如果您阻止Docker添加iptables規(guī)則,則即使您設(shè)置--ip-masq
為,Docker也不會添加IP偽裝規(guī)則true
。如果沒有IP偽裝規(guī)則,在使用非默認網(wǎng)橋的網(wǎng)絡(luò)時,Docker容器將無法連接到外部主機或互聯(lián)網(wǎng)。
--config-file=/etc/docker/daemon.json
存儲配置文件的路徑。您可以使用它而不是守護進程標(biāo)志。為每個守護進程指定路徑。
--tls*
Docker守護進程支持--tlsverify
強制加密和認證遠程連接的模式。這些--tls*
選項可以為特定的守護程序使用特定的證書。
沒有網(wǎng)絡(luò)的Docker守護程序的單獨“引導(dǎo)”實例的示例腳本:
$ sudo dockerd \ -H unix:///var/run/docker-bootstrap.sock \ -p /var/run/docker-bootstrap.pid \ --iptables=false \ --ip-masq=false \ --bridge=none \ --data-root=/var/lib/docker-bootstrap \ --exec-root=/var/run/docker-bootstrap