docker 容器HostConfig 字段示例詳解
一、具體字段
| 字段名稱 | 含義 | 作用 |
|---|---|---|
| Binds | 綁定掛載列表(-v 或 --mount) | 將主機(jī)目錄/文件掛載到容器內(nèi) |
| ContainerIDFile | 存儲(chǔ)容器 ID 的文件路徑 | 將容器 ID 寫入指定文件 |
| LogConfig | 日志驅(qū)動(dòng)和選項(xiàng)配置(如 json-file、syslog) | 定義容器日志的存儲(chǔ)方式 |
| NetworkMode | 網(wǎng)絡(luò)模式(如 host、bridge、none) | 控制容器的網(wǎng)絡(luò)隔離級別 |
| PortBindings | 端口映射配置(-p 參數(shù)) | 將容器端口綁定到主機(jī)端口 |
| RestartPolicy | 重啟策略(如 always、on-failure) | 定義容器異常退出后的重啟行為 |
| AutoRemove | 容器退出后自動(dòng)刪除 | 避免殘留容器占用磁盤空間 |
| VolumeDriver | 卷驅(qū)動(dòng)(如 local、nfs) | 定義卷的存儲(chǔ)后端 |
| VolumesFrom | 從其他容器掛載卷 | 共享另一個(gè)容器的卷 |
| CapAdd/CapDrop | 添加/移除 Linux 內(nèi)核能力(如 CAP_NET_ADMIN) | 控制容器的權(quán)限范圍 |
| CgroupnsMode | Cgroup 命名空間模式(如 host、private) | 控制容器的資源隔離級別 |
| Dns/DnsOptions/DnsSearch | 自定義 DNS 配置 | 覆蓋容器的 DNS 設(shè)置 |
| ExtraHosts | 自定義主機(jī)名解析 | 繞過 DNS 直接映射IP |
| IpcMode | IPC(進(jìn)程間通信)模式(如 host、shareable) | 控制容器的 IPC 資源隔離 |
| Links | 鏈接其他容器(–link 參數(shù)) | 實(shí)現(xiàn)容器間的服務(wù)發(fā)現(xiàn) |
| OomScoreAdj | OOM(內(nèi)存不足)優(yōu)先級 | 控制容器在內(nèi)存不足時(shí)被終止的順序 |
| PidMode | PID 命名空間模式(如 host、container) | 控制容器的進(jìn)程可見性 |
| Privileged | 是否賦予容器所有內(nèi)核權(quán)限 | 允許執(zhí)行特權(quán)操作(如加載內(nèi)核模塊) |
| PublishAllPorts | 自動(dòng)發(fā)布容器暴露的端口 | 將 EXPOSE 指令聲明的端口映射到主機(jī)隨機(jī)端口 |
| ReadonlyRootfs | 根文件系統(tǒng)是否只讀 | 防止容器修改文件系統(tǒng) |
| SecurityOpt | 安全選項(xiàng)(如 label:disable) | 控制 SELinux/AppArmor 策略 |
| UTSMode | UTS(主機(jī)名和域名)命名空間模式(如 host) | 控制容器的主機(jī)名設(shè)置 |
| UsernsMode | 用戶命名空間模式(如 host、mapped) | 控制用戶 ID 映射 |
| ShmSize | 共享內(nèi)存大小(/dev/shm) | 限制容器的共享內(nèi)存使用 |
| Runtime | 容器運(yùn)行時(shí)(如 runc、containerd) | 切換容器執(zhí)行引擎 |
| CpuShares | CPU 權(quán)重(相對值,非硬性限制) | 控制 CPU 資源分配比例 |
| Memory | 內(nèi)存硬限制(單位:字節(jié)) | 限制容器的最大內(nèi)存使用 |
| NanoCpus | CPU 配額(納秒,用于 CFS) | 限制容器的 CPU 使用時(shí)間 |
| BlkioWeight | 塊設(shè)備 I/O 權(quán)重 | 控制 I/O 資源分配比例 |
| PidsLimit | 最大進(jìn)程數(shù)限制 | 限制容器的進(jìn)程數(shù)量 |
| CgroupParent | Cgroup 父命名空間 | 自定義資源分組 |
| HugepageLimits | 大頁內(nèi)存限制 | 限制大頁內(nèi)存使用 |
| OomKillDisable | 是否禁用 OOM Killer | 控制容器在內(nèi)存不足時(shí)是否被終止 |
| CpuPeriod/CpuQuota | CPU 周期和配額(用于 CFS) | 精細(xì)控制 CPU 使用 |
| CpusetCpus/CpusetMems | CPU/Memory 分配 | 指定容器可用的 CPU 核心和內(nèi)存節(jié)點(diǎn) |
| Devices | 設(shè)備白名單 | 控制容器可訪問的設(shè)備 |
| ConsoleSize | 控制臺(tái)窗口大小(行數(shù) x 列數(shù)) | 設(shè)置容器的終端尺寸 |
| Isolation | 隔離模式(僅 Windows 容器) | 控制容器的隔離級別 |
| BlkioWeightDevice | 塊設(shè)備 I/O 權(quán)重(按設(shè)備區(qū)分) | 控制不同設(shè)備的 I/O 權(quán)重 |
| MemorySwap | 內(nèi)存交換空間大小 | 限制容器可使用的 swap 內(nèi)存 |
| MemorySwappiness | 內(nèi)存交換傾向(0-100) | 控制內(nèi)存頁交換比例 |
| Ulimits | 用戶資源限制(如 nofile) | 限制容器的資源使用 |
| CpuCount | CPU 核心數(shù)限制 | 限制容器可使用的 CPU 核心數(shù) |
| CpuPercent | CPU 百分比限制 | 限制容器的 CPU 使用百分比 |
| IOMaximumIOps | 最大 IOPS 限制 | 控制容器的 I/O 性能 |
| IntelRdtL3Cbm | Intel RDT L3 緩存帶寬管理 | 優(yōu)化多租戶場景的緩存使用 |
| MaskedPaths | 隱藏主機(jī)文件路徑 | 提升安全性 |
| ReadonlyPaths | 只讀掛載主機(jī)文件路徑 | 提升安全性 |
二、 示例
2.1、Binds
使用 docker run -v /host/path:/container/path 生成
- 宿主機(jī)和容器內(nèi)目錄存在
$ docker run -itd -v /tmp/test:/tmp centos:1.0 /bin/bash
d6cd7fec98616490b424aa864ac3ecfeeb48e88f08f030bff2c9eb3690fbe93e
$ docker inspect -f {{.HostConfig.Binds}} d6cd7fec986164
[/tmp/test:/tmp]
$ docker inspect d6cd7fec986164 | grep -A 3 Binds
"Binds": [
"/tmp/test:/tmp"
],
"ContainerIDFile": "",- 宿主機(jī)目錄不存在,容器引擎會(huì)創(chuàng)建這個(gè)目錄
$ ll /tmp/ | grep test drwxr-xr-x 3 root root 4096 Jul 28 19:06 busyboxtest drwxr-xr-x 2 root root 4096 Jan 4 13:53 test $ docker run -itd -v /tmp/test02:/tmp centos:1.0 /bin/bash da13bd92f79305476d9ada242347aa098ee5c3c981169131326db9ad07c43c32 $ ll /tmp/ | grep test drwxr-xr-x 3 root root 4096 Jul 28 19:06 busyboxtest drwxr-xr-x 2 root root 4096 Jan 4 13:53 test drwxr-xr-x 2 root root 4096 Jan 4 13:59 test02
- 容器目錄不存在,容器引擎也會(huì)創(chuàng)建這個(gè)目錄
$ docker run -itd -v /tmp/test02:/tmp/test03 centos:1.0 /bin/bash 29db9a19a835325df6be4645b855dfd579cb7bbcde578e7b33b019d69c79ff22 $ docker exec -it 29db9a19a ls -l /tmp total 4 drwxr-xr-x 2 root root 4096 Jan 4 13:59 test03
- 總結(jié)
| 情況 | 宿主機(jī)目錄 | 容器目錄 | 掛載結(jié)果 | 注意事項(xiàng) |
|---|---|---|---|---|
| 宿主機(jī)目錄存在,容器目錄不存在 | ? | ? | 容器目錄自動(dòng)創(chuàng)建,掛載成功 | 容器目錄內(nèi)容被宿主機(jī)目錄覆蓋 |
| 宿主機(jī)目錄不存在,容器目錄存在 | ? | ? | 宿主機(jī)目錄自動(dòng)創(chuàng)建(權(quán)限允許時(shí)) | 可能因權(quán)限問題掛載失敗 |
| 宿主機(jī)和容器目錄都不存在 | ? | ? | 兩者自動(dòng)創(chuàng)建(權(quán)限允許時(shí) | ) 宿主機(jī)目錄權(quán)限不足時(shí)掛載失敗 |
| 宿主機(jī)和容器目錄都存在 | ? | ? | 容器目錄內(nèi)容被宿主機(jī)目錄覆蓋 | 宿主機(jī)目錄內(nèi)容優(yōu)先級更高 |
2.2、ContainerIDFile
使用 --cidfile=/path/to/cidfile 生成
$ docker run -itd --cidfile=/tmp/cid.txt centos:1.0 /bin/bash
0a7cb18828951e3ed53b546dbef840c141503cae479113caa7e35ece18b25ce1
$ cat /tmp/cid.txt
0a7cb18828951e3ed53b546dbef840c141503cae479113caa7e35ece18b25ce1
$ docker inspect -f {{.HostConfig.ContainerIDFile}} 0a7cb188289
/tmp/cid.txt2.3、LogConfig
使用 --log-driver=json-file --log-opt max-size=10m 生成
$ docker run -itd --log-driver=json-file --log-opt max-size=10m centos:1.0 /bin/bash
b12b7ebd0566af9121e780e92c78a26d95bb2fac608fdf1c4f19f72845351639
$ docker inspect -f {{.HostConfig.LogConfig}} 0a7cb188289
{json-file map[]}
$ docker inspect b12b7ebd0566a | grep -A 5 LogConfig
"LogConfig": {
"Type": "json-file",
"Config": {
"max-size": "10m"
}
},常見的日志驅(qū)動(dòng)包括json-file、local、syslog、journald、gelf等。每個(gè)驅(qū)動(dòng)支持的選項(xiàng)不同:
$ docker run -itd --log-driver=local --log-opt max-size=10m centos:1.0 /bin/bash
de4561e95b46f68bae0bf892f6f582a5e2c6ec1cb00f114792c35ca7a469fa08
$ docker inspect de4561e95b46 | grep -A 5 LogConfig
"LogConfig": {
"Type": "local",
"Config": {
"max-size": "10m"
}
},2.3.1、日志驅(qū)動(dòng)支持的通用選項(xiàng)
| 選項(xiàng)名稱 | 作用 | 適用驅(qū)動(dòng) |
|---|---|---|
| max-size | 單個(gè)日志文件的最大大小(單位:b, k, m, g) | json-file, local |
| max-file | 保留的最大日志文件數(shù)量 | json-file, local |
| tag | 為日志添加標(biāo)識符(用于區(qū)分來源) | 所有驅(qū)動(dòng) |
| env | 包含指定環(huán)境變量到日志中 | json-file, syslog |
| env-regex | 使用正則表達(dá)式匹配環(huán)境變量 | json-file, syslog |
| labels | 包含指定標(biāo)簽到日志中 | json-file, syslog |
| label-regex | 使用正則表達(dá)式匹配標(biāo)簽 | json-file, syslog |
| compress | 是否壓縮舊日志文件(僅 json-file) | json-file |
| format | 定義日志格式(如 json, text) | json-file |
| mode | 日志文件權(quán)限模式(如 0640) | json-file |
| path | 自定義日志文件路徑(需與 json-file 驅(qū)動(dòng)配合) | json-file |
| tag-field | 指定日志中的標(biāo)簽字段名 | json-file |
| timestamp-format | 自定義日志時(shí)間戳格式(如 iso8601) | json-file |
| syslog-address | 指定 syslog 服務(wù)器地址(如 udp://192.168.1.100:514) | syslog |
| syslog-facility | 設(shè)置 syslog 的 facility(如 daemon) | syslog |
| gelf-address | GELF 日志服務(wù)器地址(如 udp://graylog.example.com:12201) | gelf |
| gelf-programs | 映射容器命令到 GELF 的 program 字段 | gelf |
| gelf-tls | 啟用 TLS 加密(如 on, off) | gelf |
| aws-region | AWS Lambda 日志區(qū)域 | awslogs |
| aws-logs-group | AWS CloudWatch 日志組名稱 | awslogs |
| aws-logs-stream | AWS CloudWatch 日志流名稱 | awslogs |
| aws-logs-create-group | 是否自動(dòng)創(chuàng)建日志組(true/false) | awslogs |
| fluentd-address | Fluentd 服務(wù)器地址(如 localhost:24224) | fluentd |
| fluentd-async | 是否異步發(fā)送日志(true/false) | fluentd |
| fluentd-connection-limit | 最大并發(fā)連接數(shù)(如 5) | fluentd |
| fluentd-timeout | Fluentd 超時(shí)時(shí)間(單位:秒) | fluentd |
| gcp-project | Google Cloud Project ID | gcplogs |
| gcp-log-project | 日志項(xiàng)目(如 my-project) | gcplogs |
| gcp-log | 日志名稱(如 my-container) | gcplogs |
2.3.2、常見日志驅(qū)動(dòng)及其配置示例
2.3.2.1、 json-file 驅(qū)動(dòng)(默認(rèn)驅(qū)動(dòng))
- 用途:本地存儲(chǔ) JSON 格式的日志文件。
- 常用選項(xiàng):
- max-size:限制單個(gè)日志文件大小。
- max-file:保留日志文件數(shù)量。
- compress:壓縮舊日志文件。
- tag:為日志添加標(biāo)識符。
- 示例:
docker run --log-driver=json-file \ --log-opt max-size=10m \ --log-opt max-file=3 \ --log-opt tag=my-container \ my_image
限制日志文件最大 10MB,保留 3 個(gè)文件,并添加 my-container 標(biāo)簽。
2.3.2.2、syslog 驅(qū)動(dòng)
- 用途:將日志發(fā)送到系統(tǒng) syslog 服務(wù)。
- 常用選項(xiàng):
- syslog-address:syslog 服務(wù)器地址。
- syslog-facility:日志設(shè)施(如 daemon)。
- tag:日志標(biāo)簽。
- 示例:
docker run --log-driver=syslog \ --log-opt syslog-address=udp://192.168.1.100:514 \ --log-opt syslog-facility=daemon \ --log-opt tag=my-container \ my_image
2.3.2.3、 gelf 驅(qū)動(dòng)
- 用途:將日志發(fā)送到 Graylog(GELF 格式)。
- 常用選項(xiàng):
- gelf-address:Graylog 服務(wù)器地址。
- gelf-programs:映射容器命令到 program 字段(格式:command=program)。
- 示例:
docker run --log-driver=gelf \ --log-opt gelf-address=udp://graylog.example.com:12201 \ --log-opt gelf-programs="my_container=my-app" \ my_image
2.3.2.4、awslogs 驅(qū)動(dòng)
- 用途:將日志發(fā)送到 AWS CloudWatch。
- 常用選項(xiàng):
- aws-logs-group:日志組名稱。
- aws-logs-stream:日志流名稱。
- aws-logs-create-group:是否自動(dòng)創(chuàng)建日志組。
- 示例:
docker run --log-driver=awslogs \ --log-opt aws-logs-group=my-group \ --log-opt aws-logs-stream=my-stream \ --log-opt aws-logs-create-group=true \ my_image
2.3.2.5、fluentd 驅(qū)動(dòng)
- 用途:將日志發(fā)送到 Fluentd。
- 常用選項(xiàng):
- fluentd-address:Fluentd 服務(wù)器地址。
- fluentd-async:是否異步發(fā)送日志。
- 示例:
docker run --log-driver=fluentd \ --log-opt fluentd-address=localhost:24224 \ --log-opt fluentd-async=true \ my_image
| 驅(qū)動(dòng) | 常用場景 | 適用場景 |
|---|---|---|
| json-file | 本地日志存儲(chǔ) | 開發(fā)、調(diào)試、簡單部署 |
| syslog | 系統(tǒng)日志集成 | 傳統(tǒng)系統(tǒng)日志集中管理 |
| gelf | Graylog 集成 | 日志分析平臺(tái)(如 Graylog) |
| awslogs | AWS CloudWatch | AWS 云環(huán)境 |
| fluentd | Fluentd 日志聚合 | 微服務(wù)日志統(tǒng)一處理 |
| gcplogs | Google Cloud Platform | GCP 云環(huán)境 |
三、HostConfig 和Config 差異
Docker 容器的 HostConfig 和 Config 是兩個(gè)核心配置字段,分別描述容器的運(yùn)行時(shí)配置和鏡像/容器自身配置。Config 是容器的 “DNA”,由鏡像決定,定義容器的核心行為。HostConfig 是容器的 “運(yùn)行時(shí)環(huán)境”,由主機(jī)參數(shù)決定,控制容器如何與主機(jī)資源交互。兩者共同作用于容器的運(yùn)行,但 Config 更偏向靜態(tài)屬性,HostConfig 更偏向動(dòng)態(tài)策略。
3.1、Config 字段
3.1.1、 作用
容器自身配置:定義容器的基礎(chǔ)屬性,與鏡像和容器運(yùn)行時(shí)行為直接相關(guān)。內(nèi)容范圍:
- 鏡像信息(如 Image)
- 容器啟動(dòng)命令(如 Cmd、Entrypoint)
- 環(huán)境變量(Env)
- 工作目錄(WorkingDir)
- 用戶權(quán)限(User)
- 暫存層(Hostname、Domainname)
3.1.2、特點(diǎn)
- 來源于鏡像:大部分字段由 Dockerfile 中的指令(如 CMD、ENV、WORKDIR)生成。
- 靜態(tài)配置:通常在容器創(chuàng)建時(shí)固定,運(yùn)行時(shí)不可修改。
- 與鏡像強(qiáng)相關(guān):Config 是容器的基礎(chǔ)模板,繼承自鏡像的元數(shù)據(jù)。
3.1.3、 使用場景
- 定義容器的默認(rèn)行為(如啟動(dòng)命令、環(huán)境變量)。
- 調(diào)試容器的鏡像配置(如通過 docker inspect 查看 Config)。
3.2、 HostConfig 字段
3.2.1、 作用
主機(jī)級配置:定義容器與主機(jī)環(huán)境的交互方式,控制資源分配和隔離策略。內(nèi)容范圍:
- 網(wǎng)絡(luò)模式(NetworkMode)
- 端口映射(PortBindings)
- 資源限制(Memory、CpuShares)
- 卷掛載(Binds、VolumesFrom)
- 安全策略(Privileged、SecurityOpt)
3.2.2、特點(diǎn)
- 來源于運(yùn)行時(shí)參數(shù):由 docker run 命令的選項(xiàng)(如 -p、-v、–network)生成。
- 動(dòng)態(tài)配置:部分字段在容器運(yùn)行時(shí)可調(diào)整(如通過 docker update 修改資源限制)。
- 與主機(jī)環(huán)境強(qiáng)相關(guān):直接控制容器如何與主機(jī)資源(CPU、內(nèi)存、網(wǎng)絡(luò))交互。
3.2.3、 使用場景
- 管理容器的資源分配(如限制內(nèi)存、CPU)。
- 配置網(wǎng)絡(luò)和存儲(chǔ)(如綁定掛載、端口映射)。
- 定義安全策略(如啟用特權(quán)模式、SELinux/AppArmor 策略)。
3.3、 核心差異對比
| 維度 | Config 字段 | HostConfig 字段 |
|---|---|---|
| 作用范圍 | 容器自身行為(與鏡像強(qiáng)相關(guān)) | 容器與主機(jī)的交互(與運(yùn)行時(shí)強(qiáng)相關(guān)) |
| 配置來源 | 來自 Dockerfile 或鏡像元數(shù)據(jù) | 來自 docker run 命令的運(yùn)行時(shí)參數(shù) |
| 可修改性 | 大部分字段不可修改(運(yùn)行時(shí)固定) | 部分字段可動(dòng)態(tài)調(diào)整(如資源限制) |
| 生命周期 | 容器創(chuàng)建時(shí)確定,運(yùn)行時(shí)不可變 | 容器運(yùn)行時(shí)可動(dòng)態(tài)更新(如通過 docker update) |
| 關(guān)聯(lián)對象 | 與容器和鏡像直接關(guān)聯(lián) | 與主機(jī)環(huán)境和運(yùn)行時(shí)參數(shù)直接關(guān)聯(lián) |
3.4、 關(guān)鍵區(qū)別總結(jié)
| Config | HostConfig |
|---|---|
| 定義容器的 默認(rèn)行為(如啟動(dòng)命令、環(huán)境變量) | 定義容器的 資源限制和隔離策略(如內(nèi)存、CPU、網(wǎng)絡(luò)) |
| 由 Dockerfile 構(gòu)建鏡像時(shí)生成,不可通過運(yùn)行時(shí)參數(shù)修改 | 由 docker run 命令指定,支持運(yùn)行時(shí)動(dòng)態(tài)調(diào)整(如 docker update) |
| 包含鏡像元數(shù)據(jù)(如 Image、Cmd),與容器的 身份和功能 直接相關(guān) | 包含主機(jī)環(huán)境配置(如 PortBindings、Memory),與容器的 資源和安全 相關(guān) |
| 用于 鏡像構(gòu)建和容器初始化 | 用于 容器運(yùn)行時(shí)管理 |
3.5、 典型使用場景
- Config:
- 鏡像構(gòu)建時(shí)設(shè)置默認(rèn)命令(如 CMD [“nginx”, “-g”, “daemon off;”])
- 調(diào)試容器時(shí)查看默認(rèn)環(huán)境變量(Env)和工作目錄(WorkingDir)
- HostConfig:
- 運(yùn)行容器時(shí)限制內(nèi)存(–memory=2g)和 CPU(–cpus=0.5)
- 掛載卷(-v)或設(shè)置網(wǎng)絡(luò)模式(–network=host)
到此這篇關(guān)于docker 容器HostConfig 字段示例詳解的文章就介紹到這了,更多相關(guān)docker 容器HostConfig內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker報(bào)錯(cuò)Container is not running問題及解決
這篇文章主要介紹了docker報(bào)錯(cuò)Container is not running問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
Docker?數(shù)據(jù)目錄遷移的實(shí)現(xiàn)步驟
本文詳細(xì)記錄了將Docker數(shù)據(jù)目錄從/var/lib/docker遷移到更大容量的分區(qū)的全過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-12-12
使用Dockerfile實(shí)現(xiàn)數(shù)據(jù)卷的掛載問題(推薦)
Dockerfile就是一個(gè)可以用來構(gòu)建鏡像的文件,可以理解為一個(gè)腳本文件,可以通過這個(gè)腳本文件自定義生成一個(gè)我們想要的鏡像,鏡像都是一層一層的,里面的每一條命令就是一層,本文給大家介紹使用Dockerfile實(shí)現(xiàn)數(shù)據(jù)卷的掛載,感興趣的朋友一起看看吧2022-03-03
docker拷貝文件到主機(jī)及導(dǎo)入導(dǎo)出容器及運(yùn)行導(dǎo)出容器方式
這篇文章主要介紹了docker拷貝文件到主機(jī)及導(dǎo)入導(dǎo)出容器及運(yùn)行導(dǎo)出容器方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05

