news 2026/3/24 23:11:01

docker 容器HostConfig 字段 示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
docker 容器HostConfig 字段 示例

文章目录

    • 一、具体字段
    • 二、 示例
      • 2.1、Binds
      • 2.2、ContainerIDFile
      • 2.3、LogConfig
        • 2.3.1、日志驱动支持的通用选项
        • 2.3.2、常见日志驱动及其配置示例
          • 2.3.2.1、 json-file 驱动(默认驱动)
          • 2.3.2.2、syslog 驱动
          • 2.3.2.3、 gelf 驱动
          • 2.3.2.4、awslogs 驱动
          • 2.3.2.5、fluentd 驱动
    • 三、HostConfig 和Config 差异
      • 3.1、Config 字段
        • 3.1.1、 作用
        • 3.1.2、特点
        • 3.1.3、 使用场景
      • 3.2、 HostConfig 字段
        • 3.2.1、 作用
        • 3.2.2、特点
        • 3.2.3、 使用场景
      • 3.3、 核心差异对比
      • 3.4、 关键区别总结
      • 3.5、 典型使用场景

Docker 的HostConfig 是主机级配置,定义容器与主机环境的交互方式,控制资源分配和隔离策略。

一、具体字段

字段名称含义作用
Binds绑定挂载列表(-v 或 --mount)将主机目录/文件挂载到容器内
ContainerIDFile存储容器 ID 的文件路径将容器 ID 写入指定文件
LogConfig日志驱动和选项配置(如 json-file、syslog)定义容器日志的存储方式
NetworkMode网络模式(如host、bridge、none控制容器的网络隔离级别
PortBindings端口映射配置(-p 参数)将容器端口绑定到主机端口
RestartPolicy重启策略(如 always、on-failure)定义容器异常退出后的重启行为
AutoRemove容器退出后自动删除避免残留容器占用磁盘空间
VolumeDriver卷驱动(如 local、nfs)定义卷的存储后端
VolumesFrom从其他容器挂载卷共享另一个容器的卷
CapAdd/CapDrop添加/移除 Linux 内核能力(如 CAP_NET_ADMIN)控制容器的权限范围
CgroupnsModeCgroup 命名空间模式(如 host、private)控制容器的资源隔离级别
Dns/DnsOptions/DnsSearch自定义 DNS 配置覆盖容器的 DNS 设置
ExtraHosts自定义主机名解析绕过 DNS 直接映射IP
IpcModeIPC(进程间通信)模式(如 host、shareable)控制容器的 IPC 资源隔离
Links链接其他容器(–link 参数)实现容器间的服务发现
OomScoreAdjOOM(内存不足)优先级控制容器在内存不足时被终止的顺序
PidModePID 命名空间模式(如 host、container)控制容器的进程可见性
Privileged是否赋予容器所有内核权限允许执行特权操作(如加载内核模块)
PublishAllPorts自动发布容器暴露的端口将 EXPOSE 指令声明的端口映射到主机随机端口
ReadonlyRootfs根文件系统是否只读防止容器修改文件系统
SecurityOpt安全选项(如 label:disable)控制SELinux/AppArmor策略
UTSModeUTS(主机名和域名)命名空间模式(如 host)控制容器的主机名设置
UsernsMode用户命名空间模式(如 host、mapped)控制用户 ID 映射
ShmSize共享内存大小(/dev/shm)限制容器的共享内存使用
Runtime容器运行时(如runc、containerd切换容器执行引擎
CpuSharesCPU 权重(相对值,非硬性限制)控制 CPU 资源分配比例
Memory内存硬限制(单位:字节)限制容器的最大内存使用
NanoCpusCPU 配额(纳秒,用于 CFS)限制容器的 CPU 使用时间
BlkioWeight块设备 I/O 权重控制 I/O 资源分配比例
PidsLimit最大进程数限制限制容器的进程数量
CgroupParentCgroup 父命名空间自定义资源分组
HugepageLimits大页内存限制限制大页内存使用
OomKillDisable是否禁用 OOM Killer控制容器在内存不足时是否被终止
CpuPeriod/CpuQuotaCPU 周期和配额(用于 CFS)精细控制 CPU 使用
CpusetCpus/CpusetMemsCPU/Memory 分配指定容器可用的 CPU 核心和内存节点
Devices设备白名单控制容器可访问的设备
ConsoleSize控制台窗口大小(行数 x 列数)设置容器的终端尺寸
Isolation隔离模式(仅 Windows 容器)控制容器的隔离级别
BlkioWeightDevice块设备 I/O 权重(按设备区分)控制不同设备的 I/O 权重
MemorySwap内存交换空间大小限制容器可使用的 swap 内存
MemorySwappiness内存交换倾向(0-100)控制内存页交换比例
Ulimits用户资源限制(如 nofile)限制容器的资源使用
CpuCountCPU 核心数限制限制容器可使用的 CPU 核心数
CpuPercentCPU 百分比限制限制容器的 CPU 使用百分比
IOMaximumIOps最大 IOPS 限制控制容器的 I/O 性能
IntelRdtL3CbmIntel RDT L3 缓存带宽管理优化多租户场景的缓存使用
MaskedPaths隐藏主机文件路径提升安全性
ReadonlyPaths只读挂载主机文件路径提升安全性

二、 示例

2.1、Binds

使用docker run -v /host/path:/container/path生成

  • 宿主机和容器内目录存在
$dockerrun-itd-v/tmp/test:/tmp centos:1.0 /bin/bash d6cd7fec98616490b424aa864ac3ecfeeb48e88f08f030bff2c9eb3690fbe93e $dockerinspect-f{{.HostConfig.Binds}}d6cd7fec986164[/tmp/test:/tmp]$dockerinspect d6cd7fec986164|grep-A3Binds"Binds":["/tmp/test:/tmp"],"ContainerIDFile":"",
  • 宿主机目录不存在,容器引擎会创建这个目录
$ ll /tmp/|greptestdrwxr-xr-x3root root4096Jul2819:06 busyboxtest drwxr-xr-x2root root4096Jan413:53test$dockerrun-itd-v/tmp/test02:/tmp centos:1.0 /bin/bash da13bd92f79305476d9ada242347aa098ee5c3c981169131326db9ad07c43c32 $ ll /tmp/|greptestdrwxr-xr-x3root root4096Jul2819:06 busyboxtest drwxr-xr-x2root root4096Jan413:53testdrwxr-xr-x2root root4096Jan413:59 test02
  • 容器目录不存在,容器引擎也会创建这个目录
$dockerrun-itd-v/tmp/test02:/tmp/test03 centos:1.0 /bin/bash 29db9a19a835325df6be4645b855dfd579cb7bbcde578e7b33b019d69c79ff22 $dockerexec-it29db9a19als-l/tmp total4drwxr-xr-x2root root4096Jan413:59 test03
  • 总结
情况宿主机目录容器目录挂载结果注意事项
宿主机目录存在,容器目录不存在容器目录自动创建,挂载成功容器目录内容被宿主机目录覆盖
宿主机目录不存在,容器目录存在宿主机目录自动创建(权限允许时)可能因权限问题挂载失败
宿主机和容器目录都不存在两者自动创建(权限允许时) 宿主机目录权限不足时挂载失败
宿主机和容器目录都存在容器目录内容被宿主机目录覆盖宿主机目录内容优先级更高

2.2、ContainerIDFile

使用--cidfile=/path/to/cidfile生成

$dockerrun-itd--cidfile=/tmp/cid.txt centos:1.0 /bin/bash 0a7cb18828951e3ed53b546dbef840c141503cae479113caa7e35ece18b25ce1 $cat/tmp/cid.txt 0a7cb18828951e3ed53b546dbef840c141503cae479113caa7e35ece18b25ce1 $dockerinspect-f{{.HostConfig.ContainerIDFile}}0a7cb188289 /tmp/cid.txt

2.3、LogConfig

使用--log-driver=json-file --log-opt max-size=10m生成

$dockerrun-itd--log-driver=json-file --log-opt max-size=10m centos:1.0 /bin/bash b12b7ebd0566af9121e780e92c78a26d95bb2fac608fdf1c4f19f72845351639 $dockerinspect-f{{.HostConfig.LogConfig}}0a7cb188289{json-file map[]}$dockerinspect b12b7ebd0566a|grep-A5LogConfig"LogConfig":{"Type":"json-file","Config":{"max-size":"10m"}},

常见的日志驱动包括json-file、local、syslog、journald、gelf等。每个驱动支持的选项不同:

$dockerrun-itd--log-driver=local --log-opt max-size=10m centos:1.0 /bin/bash de4561e95b46f68bae0bf892f6f582a5e2c6ec1cb00f114792c35ca7a469fa08 $dockerinspect de4561e95b46|grep-A5LogConfig"LogConfig":{"Type":"local","Config":{"max-size":"10m"}},
2.3.1、日志驱动支持的通用选项
选项名称作用适用驱动
max-size单个日志文件的最大大小(单位:b, k, m, g)json-file, local
max-file保留的最大日志文件数量json-file, local
tag为日志添加标识符(用于区分来源)所有驱动
env包含指定环境变量到日志中json-file, syslog
env-regex使用正则表达式匹配环境变量json-file, syslog
labels包含指定标签到日志中json-file, syslog
label-regex使用正则表达式匹配标签json-file, syslog
compress是否压缩旧日志文件(仅 json-file)json-file
format定义日志格式(如 json, text)json-file
mode日志文件权限模式(如 0640)json-file
path自定义日志文件路径(需与 json-file 驱动配合)json-file
tag-field指定日志中的标签字段名json-file
timestamp-format自定义日志时间戳格式(如 iso8601)json-file
syslog-address指定 syslog 服务器地址(如 udp://192.168.1.100:514)syslog
syslog-facility设置 syslog 的 facility(如 daemon)syslog
gelf-addressGELF 日志服务器地址(如 udp://graylog.example.com:12201)gelf
gelf-programs映射容器命令到 GELF 的 program 字段gelf
gelf-tls启用 TLS 加密(如 on, off)gelf
aws-regionAWS Lambda 日志区域awslogs
aws-logs-groupAWS CloudWatch 日志组名称awslogs
aws-logs-streamAWS CloudWatch 日志流名称awslogs
aws-logs-create-group是否自动创建日志组(true/false)awslogs
fluentd-addressFluentd 服务器地址(如 localhost:24224)fluentd
fluentd-async是否异步发送日志(true/false)fluentd
fluentd-connection-limit最大并发连接数(如 5)fluentd
fluentd-timeoutFluentd 超时时间(单位:秒)fluentd
gcp-projectGoogle Cloud Project IDgcplogs
gcp-log-project日志项目(如 my-project)gcplogs
gcp-log日志名称(如 my-container)gcplogs
2.3.2、常见日志驱动及其配置示例
2.3.2.1、 json-file 驱动(默认驱动)
  • 用途:本地存储 JSON 格式的日志文件。
  • 常用选项:
    • max-size:限制单个日志文件大小。
    • max-file:保留日志文件数量。
    • compress:压缩旧日志文件。
    • tag:为日志添加标识符。
  • 示例:
dockerrun --log-driver=json-file\--log-opt max-size=10m\--log-opt max-file=3\--log-opttag=my-container\my_image

限制日志文件最大 10MB,保留 3 个文件,并添加 my-container 标签。

2.3.2.2、syslog 驱动
  • 用途:将日志发送到系统 syslog 服务。
  • 常用选项:
    • syslog-address:syslog 服务器地址。
    • syslog-facility:日志设施(如 daemon)。
    • tag:日志标签。
  • 示例:
dockerrun --log-driver=syslog\--log-opt syslog-address=udp://192.168.1.100:514\--log-opt syslog-facility=daemon\--log-opttag=my-container\my_image
2.3.2.3、 gelf 驱动
  • 用途:将日志发送到 Graylog(GELF 格式)。
  • 常用选项:
    • gelf-address:Graylog 服务器地址。
    • gelf-programs:映射容器命令到 program 字段(格式:command=program)。
  • 示例:
dockerrun --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 驱动
  • 用途:将日志发送到 AWS CloudWatch。
  • 常用选项:
    • aws-logs-group:日志组名称。
    • aws-logs-stream:日志流名称。
    • aws-logs-create-group:是否自动创建日志组。
  • 示例:
dockerrun --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 驱动
  • 用途:将日志发送到 Fluentd。
  • 常用选项:
    • fluentd-address:Fluentd 服务器地址。
    • fluentd-async:是否异步发送日志。
  • 示例:
dockerrun --log-driver=fluentd\--log-opt fluentd-address=localhost:24224\--log-opt fluentd-async=true\my_image
驱动常用场景适用场景
json-file本地日志存储开发、调试、简单部署
syslog系统日志集成传统系统日志集中管理
gelfGraylog 集成日志分析平台(如 Graylog)
awslogsAWS CloudWatchAWS 云环境
fluentdFluentd 日志聚合微服务日志统一处理
gcplogsGoogle Cloud PlatformGCP 云环境

三、HostConfig 和Config 差异

Docker 容器的 HostConfig 和 Config 是两个核心配置字段,分别描述容器的运行时配置镜像/容器自身配置。Config 是容器的 “DNA”,由镜像决定,定义容器的核心行为。HostConfig 是容器的 “运行时环境”,由主机参数决定,控制容器如何与主机资源交互。两者共同作用于容器的运行,但 Config 更偏向静态属性,HostConfig 更偏向动态策略。

3.1、Config 字段

3.1.1、 作用

容器自身配置:定义容器的基础属性,与镜像和容器运行时行为直接相关。内容范围:

  • 镜像信息(如 Image)
  • 容器启动命令(如 Cmd、Entrypoint)
  • 环境变量(Env)
  • 工作目录(WorkingDir)
  • 用户权限(User)
  • 暂存层(Hostname、Domainname)
3.1.2、特点
  • 来源于镜像:大部分字段由 Dockerfile 中的指令(如 CMD、ENV、WORKDIR)生成。
  • 静态配置:通常在容器创建时固定,运行时不可修改。
  • 与镜像强相关:Config 是容器的基础模板,继承自镜像的元数据。
3.1.3、 使用场景
  • 定义容器的默认行为(如启动命令、环境变量)。
  • 调试容器的镜像配置(如通过 docker inspect 查看 Config)。

3.2、 HostConfig 字段

3.2.1、 作用

主机级配置:定义容器与主机环境的交互方式,控制资源分配和隔离策略。内容范围:

  • 网络模式(NetworkMode)
  • 端口映射(PortBindings)
  • 资源限制(Memory、CpuShares)
  • 卷挂载(Binds、VolumesFrom)
  • 安全策略(Privileged、SecurityOpt)
3.2.2、特点
  • 来源于运行时参数:由 docker run 命令的选项(如 -p、-v、–network)生成。
  • 动态配置:部分字段在容器运行时可调整(如通过 docker update 修改资源限制)。
  • 与主机环境强相关:直接控制容器如何与主机资源(CPU、内存、网络)交互。
3.2.3、 使用场景
  • 管理容器的资源分配(如限制内存、CPU)。
  • 配置网络和存储(如绑定挂载、端口映射)。
  • 定义安全策略(如启用特权模式、SELinux/AppArmor 策略)。

3.3、 核心差异对比

维度Config 字段HostConfig 字段
作用范围容器自身行为(与镜像强相关)容器与主机的交互(与运行时强相关)
配置来源来自 Dockerfile 或镜像元数据来自 docker run 命令的运行时参数
可修改性大部分字段不可修改(运行时固定)部分字段可动态调整(如资源限制)
生命周期容器创建时确定,运行时不可变容器运行时可动态更新(如通过 docker update)
关联对象与容器和镜像直接关联与主机环境和运行时参数直接关联

3.4、 关键区别总结

ConfigHostConfig
定义容器的 默认行为(如启动命令、环境变量)定义容器的 资源限制和隔离策略(如内存、CPU、网络)
由 Dockerfile 构建镜像时生成,不可通过运行时参数修改由 docker run 命令指定,支持运行时动态调整(如 docker update)
包含镜像元数据(如 Image、Cmd),与容器的 身份和功能 直接相关包含主机环境配置(如 PortBindings、Memory),与容器的 资源和安全 相关
用于 镜像构建和容器初始化用于 容器运行时管理

3.5、 典型使用场景

  • Config:
    • 镜像构建时设置默认命令(如 CMD [“nginx”, “-g”, “daemon off;”])
    • 调试容器时查看默认环境变量(Env)和工作目录(WorkingDir)
  • HostConfig:
    • 运行容器时限制内存(–memory=2g)和 CPU(–cpus=0.5)
    • 挂载卷(-v)或设置网络模式(–network=host)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 9:45:14

李一舟人工智能 2.0 视频分享:解锁 AI 时代核心竞争力

还在为 AI 技术迭代太快而焦虑?想系统掌握人工智能落地逻辑却找不到优质资源?这份李一舟人工智能 2.0 系列视频分享,绝对是你不容错过的干货宝藏! 全套资源 1.3G 高清画质,永久有效可反复观看,支持随时转存…

作者头像 李华
网站建设 2026/3/21 15:27:33

亲测好用9个AI论文软件,MBA毕业论文轻松搞定!

亲测好用9个AI论文软件,MBA毕业论文轻松搞定! AI工具助力论文写作,轻松应对学术挑战 在当今快速发展的学术环境中,MBA学生和研究者面临着日益繁重的论文写作任务。如何高效地完成开题报告、撰写初稿、优化内容以及降低AIGC率&…

作者头像 李华
网站建设 2026/3/19 13:34:01

14.C++入门:vector|手撕vector

vector深度剖析及模拟实现 vector.h #pragma once #include<assert.h>namespace bit {template<class T>class vector{public:typedef T* iterator;typedef const T* const_iterator;vector(){}/*vector(const vector<T>& v){_start new T[v.capacity(…

作者头像 李华
网站建设 2026/3/24 15:29:24

技术文章大纲:Bug悬案侦破大会

c技术文章大纲&#xff1a;Bug悬案侦破大会背景与活动目的通过模拟真实开发中的复杂Bug场景&#xff0c;提升团队协作与问题排查能力结合案例分析&#xff0c;分享常见Bug类型及其背后的技术原理培养开发者系统性思维和逆向工程能力活动形式设计悬案设定&#xff1a;选取历史上…

作者头像 李华