docker 容器文件hostconfig.json 文件内容学习

hostconfig.json 是 Docker 容器元数据中的一个关键配置文件,通常位于 /var/lib/docker/containers/<container_id>/ 目录下。它主要存储了容器在主机层面(Host)的配置信息,即容器与宿主机之间的交互规则和资源限制。

一、文件内容示例

json 复制代码
{
  "Binds": null,
  "ContainerIDFile": "",
  "LogConfig": {
    "Type": "json-file",
    "Config": {
      "max-size": "10m",
      "max-file": "3"
    }
  },
  "NetworkMode": "bridge",
  "PortBindings": {
    "80/tcp": [
      {
        "HostIp": "",
        "HostPort": "8080"
      }
    ]
  },
  "RestartPolicy": {
    "Name": "unless-stopped",
    "MaximumRetryCount": 0
  },
  "AutoRemove": false,
  "VolumeDriver": "",
  "VolumesFrom": null,
  "CapAdd": null,
  "CapDrop": null,
  "Dns": [],
  "DnsOptions": [],
  "DnsSearch": [],
  "ExtraHosts": null,
  "GroupAdd": null,
  "IpcMode": "private",
  "Cgroup": "",
  "Links": null,
  "OomScoreAdj": 0,
  "PidMode": "",
  "Privileged": false,
  "PublishAllPorts": false,
  "ReadonlyRootfs": false,
  "SecurityOpt": null,
  "UTSMode": "",
  "UsernsMode": "",
  "ShmSize": 67108864,
  "Runtime": "runc",
  "ConsoleSize": [
    0,
    0
  ],
  "Isolation": "",
  "CpuShares": 0,
  "Memory": 0,
  "NanoCpus": 0,
  "CgroupParent": "",
  "BlkioWeight": 0,
  "BlkioWeightDevice": [],
  "BlkioDeviceReadBps": null,
  "BlkioDeviceWriteBps": null,
  "BlkioDeviceReadIOps": null,
  "BlkioDeviceWriteIOps": null,
  "CpuPeriod": 0,
  "CpuQuota": 0,
  "CpuRealtimePeriod": 0,
  "CpuRealtimeRuntime": 0,
  "CpusetCpus": "",
  "CpusetMems": "",
  "Devices": [],
  "DeviceCgroupRules": null,
  "DeviceRequests": null,
  "KernelMemory": 0,
  "KernelMemoryTCP": 0,
  "MemoryReservation": 0,
  "MemorySwap": 0,
  "MemorySwappiness": null,
  "OomKillDisable": false,
  "PidsLimit": null,
  "Ulimits": null,
  "CpuCount": 0,
  "CpuPercent": 0,
  "IOMaximumIOps": 0,
  "IOMaximumBandwidth": 0,
  "MaskedPaths": [
    "/proc/asound",
    "/proc/acpi",
    "/proc/kcore",
    "/proc/keys",
    "/proc/latency_stats",
    "/proc/timer_list",
    "/proc/timer_stats",
    "/proc/sched_debug",
    "/proc/scsi",
    "/sys/firmware"
  ],
  "ReadonlyPaths": [
    "/proc/bus",
    "/proc/fs",
    "/proc/irq",
    "/proc/sys",
    "/proc/sysrq-trigger"
  ]
}

二、字段解释

2.1. 网络配置(Network)

控制容器如何连接到宿主机的网络。

字段 说明
NetworkMode 网络模式,如 "bridge"、"host"、"none"、"container:<name>" 等。
PortBindings 端口映射规则,例如 "8080/tcp": [{"HostIp": "", "HostPort": "80"}] 表示将宿主机的 80 端口映射到容器的 80 端口。
PublishAllPorts 是否自动发布所有暴露的端口(对应 docker run -P)。
Dns 自定义 DNS 服务器地址列表。
DnsSearch DNS 搜索域。
ExtraHosts 自定义 hosts 条目,格式为 "hostname:IP"。

2.2. 资源限制(Resources)

限制容器对宿主机资源的使用。

字段 说明
Memory 内存限制(字节),如 536870912 表示 512MB。
MemorySwap 内存 + Swap 总限制。若等于 Memory,则禁用 Swap。
CpuShares CPU 共享权重(相对值),默认 1024。
CpuQuota / CpuPeriod CPU 配额限制(微秒级),用于硬限制 CPU 使用率。
CpusetCpus 绑定特定 CPU 核心,如 "0,1"。
BlkioWeight 块设备 I/O 权重。
Ulimits 用户限制,如打开文件数、进程数等。

2.3. 重启策略(Restart Policy)

定义容器退出后的行为。

字段 说明
RestartPolicy.Name 策略名称:"no"、"always"、"on-failure"、"unless-stopped"。
RestartPolicy.MaximumRetryCount 当策略为 "on-failure" 时,最大重试次数。

2.4. 日志驱动(Logging)

控制容器标准输出和错误输出的日志处理方式。

字段 说明
LogConfig.Type 日志驱动类型,如 "json-file"、"syslog"、"journald"、"fluentd" 等。
LogConfig.Config 驱动特定配置,如 "max-size": "10m", "max-file": "3"。

2.5. 安全与权限(Security & Privileges)

控制容器的安全隔离级别。

字段 说明
Privileged 是否以特权模式运行(相当于 --privileged),拥有几乎全部主机权限。
CapAdd / CapDrop 添加或删除 Linux 能力(Capabilities),如 ["NET_ADMIN"]。
SecurityOpt 安全选项,如 SELinux/AppArmor 标签、seccomp 配置文件等。
ReadonlyRootfs 是否将根文件系统设为只读。
UsernsMode 用户命名空间模式,用于 UID 映射隔离。

2.6. 设备与挂载(Devices & Mounts)

注意:卷挂载信息主要在 config.v2.json 或 mounts.json 中,但部分设备映射在此。

字段 说明
Devices 映射主机设备到容器,如 /dev/ttyUSB0:/dev/ttyUSB0:rwm。
IpcMode IPC 命名空间模式,如 "shareable"、"host"。
PidMode PID 命名空间模式,如 "host" 表示共享主机 PID 空间。
UTSMode UTS 命名空间模式,影响主机名隔离。

2.7. 其他杂项

字段 说明
AutoRemove 容器退出后是否自动删除(对应 docker run --rm)。
Init 是否使用 init 进程(tini)作为 PID 1。
Runtime 使用的 OCI 运行时,如 "runc"、"kata-runtime"。
ShmSize /dev/shm 的大小(字节)。
Sysctls 设置容器内的内核参数,如 "net.ipv4.ip_forward": "1"。

三、注意事项

  1. 不要手动编辑:Docker 内部状态复杂,手动修改可能导致 daemon 无法识别容器状态。

  2. 使用 docker inspect 查看 :

    bash 复制代码
    docker inspect <container_name_or_id>

    输出中的 "HostConfig" 部分即为 hostconfig.json 的内容,且更易读。

  3. 修改配置的正确方式 :

    • 动态更新资源限制:docker update --memory=512m <container>
    • 修改端口/卷/环境变量:需停止并删除容器,再用新参数重新运行。
    • 使用 Docker Compose 或 Kubernetes YAML 管理配置,便于版本控制和复用。
相关推荐
分布式存储与RustFS5 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
玉&心5 天前
通过Arthas在线诊断K8S中的内存及JVM等使用情况
docker·k8s·arthas
xing-xing5 天前
Docker容器中Nginx站点根目录网页配置访问
nginx·docker
guo_wen_qiang5 天前
上传本地镜像到harbor中
docker·容器·持续部署
羑悻的小杀马特5 天前
Dockerfile 全景指南:从入门编写dockerfile到生产环境镜像优化实战,一步步带你从啃透制作指令到镜像制作落地!
docker·dockerfile·镜像制作
BianHuanShiZhe5 天前
docker常见命令
docker
正经教主5 天前
【FDE系列】阶段2:Day 43:Docker Compose — 多容器一键编排
人工智能·docker·fde
忆~遂愿5 天前
本地片库怎么在外面打开?Plex + cpolar 搭一套可远程访问的私人影音库
docker·容器
Zhu7585 天前
docker环境,vLLM 部署 Qwen3.8-27B
docker·qwen·vllm
溜达的大象5 天前
多台服务器不想上重型监控?用 Beszel 搭一套轻量主机与 Docker 看板
docker