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.jsonmounts.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 管理配置,便于版本控制和复用。
相关推荐
黄同学real1 小时前
踩坑实录:离线内网服务器 Docker 部署 PaddleOCR-VL 1.5 完全指南
运维·服务器·docker
运维老郭1 小时前
【Kubernetes PDB 主动驱逐保护】3 个配置陷阱与正确避坑指南
docker·容器·kubernetes
杨云龙UP1 小时前
Docker 部署 MongoDB 6.0 数据库每日自动备份实践:本地 + 异地保留 7 天_20260429
linux·运维·数据库·mongodb·docker·容器·centos
Drache_long2 小时前
K8S(二)
运维·docker·云原生·容器·kubernetes
ai产品老杨4 小时前
GB28181与RTSP全协议兼容之道:基于Docker与微服务架构的AI视频中台架构解析(附源码交付方案)
docker·微服务·架构
C Y D17 小时前
只启动wsl
docker
羑悻的小杀马特18 小时前
零成本搞定!异地访问 OpenClaw 最简方案:SSH 端口映射组网!
运维·服务器·人工智能·docker·自动化·ssh·openclaw
ezreal_pan18 小时前
Kafka Docker 部署持久化避坑指南:解决重启后 Cluster ID 不匹配问题
分布式·docker·zookeeper·容器·kafka·devops
趙卋傑19 小时前
安装Docker
docker·容器