Docker 配置文件 daemon.json

1、概述

daemon.json 是 Docker 守护进程的配置文件,它允许系统管理员自定义 Docker 守护程序的行为。通过修改 daemon.json,可以调整 Docker 守护进程的多种设置,包括网络配置、日志记录、存储驱动等。

docker 安装后默认没有 daemon.json 这个配置文件,需要进行手动创建。配置文件的默认路径:/etc/docker/daemon.json

一般情况,配置文件 daemon.json 中配置的项目参数,在启动参数中同样适用,有些可能不一样(具体可以查看官方文档),但注意的一点,配置文件中如果已经有某个配置项,则无法在启动参数中增加,会出现冲突的错误。

如果在 daemon.json 文件中进行配置,需要 docker 版本高于 1.12.6(在这个版本上不生效,1.13.1 以上是生效的)

官方的配置地址:

2、daemon.json 示例

注意:修改完配置文件后,需要重启docker服务才能生效

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
{  
"authorization-plugins": [],
"graph":"/var/lib/docker", # 已废弃,使用data-root代替,这个主要看docker的版本,默认路径
"data-root": "", # Docker运行时使用的根路径,根路径下的内容稍后介绍,默认/var/lib/docker
"dns": [], # 设定容器DNS的地址,在容器的 /etc/resolv.conf文件中可查看
"dns-opts": [], # 容器 /etc/resolv.conf 文件,其他设置
"dns-search": [], # 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的 主机时,DNS不仅搜索host,还会搜索host.example.com。注意:如果不设置,Docker 会默认用主机上的 /etc/resolv.conf来配置容器。
"exec-opts": [],
"exec-root": "",
"experimental": false,
"features": {},
"storage-driver": "overlay2" # 用于设置存储驱动程序。Docker提供了多种存储驱动程序,如aufs、overlay2等。默认值为overlay2。
"storage-opts": [], # 用于设置存储驱动程序的选项。这个配置项是一个数组,数组中的每一项为一个选项。overlay2.override_kernel_check 是一个常用的选项,用于覆盖内核检查。
"labels": [], # docker主机的标签,很实用的功能,例如定义:–label nodeName=host-121
"live-restore": true,
"log-driver": "", # 用于设置日志的驱动程序。Docker提供了多种日志驱动程序,如json-file、syslog等。默认值为json-file。
"log-opts": {"max-size": "100m", "max-file": "10"} # 设置容器日志文件的轮转策略。"max-size": "100m" 指每个日志文件的最大大小为 100MB,达到该大小后日志文件会轮转。"max-file" 指最多保留 10 个轮转后的日志文件。,
"mtu": 0,
"pidfile": "", # Docker守护进程的PID文件
"cluster-store": "",
"cluster-store-opts": {},
"cluster-advertise": "",
"max-concurrent-downloads": 3,
"max-concurrent-uploads": 5,
"default-shm-size": "64M",
"shutdown-timeout": 15,
"debug": true, # 启用debug的模式,启用后,可以看到很多的启动信息,方便进行故障排查。默认false
"hosts": [], # 设置容器hosts
"log-level": "", # 用于设置日志输出的级别。可选的日志级别包括debug、info、warn和error。默认值为info。
"tls": true, # 默认 false, 启动TLS认证开关
"tlscacert": "", # 默认 ~/.docker/ca.pem,通过CA认证过的的certificate文件路径
"tlscert": "", # 默认 ~/.docker/cert.pem ,TLS的certificate文件路径
"tlskey": "", # 默认~/.docker/key.pem,TLS的key文件路径
"tlsverify": true, # 默认false,使用TLS并做后台进程与客户端通讯的验证
"swarm-default-advertise-addr": "",
"api-cors-header": "",
"selinux-enabled": false, # 默认 false,启用selinux支持
"userns-remap": "",
"group": "", # Unix套接字的属组,仅指/var/run/docker.sock
"cgroup-parent": "",
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 64000,
"Soft": 64000
}
},
"init": false,
"init-path": "/usr/libexec/docker-init",
"ipv6": false,
"iptables": false,
"ip-forward": false, # 默认true, 启用 net.ipv4.ip_forward ,进入容器后使用sysctl -a|grepnet.ipv4.ip_forward查看
"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": ["https://d8b3zdiw.mirror.aliyuncs.com"], # 镜像加速的地址,增加后在 docker info中可查看。
"seccomp-profile": "",
"insecure-registries": ["https://ower.site.com"], # 配置docker的私库地址
"no-new-privileges": false,
"default-runtime": "runc",
"oom-score-adjust": -500,
"node-generic-resources": ["NVIDIA-GPU=UUID1", "NVIDIA-GPU=UUID2"],
"runtimes": {
"cc-runtime": {
"path": "/usr/bin/cc-runtime"
},
"custom": {
"path": "/usr/local/bin/my-runc-replacement",
"runtimeArgs": [
"--debug"
]
}
},
"default-address-pools":[{"base":"172.80.0.0/16","size":24},
{"base":"172.90.0.0/16","size":24}]
}

一些参数:

  • "data-root": "/data/docker":指定 Docker 存储所有运行时数据的根目录,包括镜像、容器、卷和网络等。默认情况下,这个目录位于 /var/lib/docker。

  • "exec-root": "/var/run/docker":定义 Docker 执行状态文件的存储路径,如运行中容器的网络配置。默认情况下,它通常位于 /var/run/docker。

  • "bridge": "none":告诉 Docker 不要自动创建默认的网桥接口 docker0。这通常用于自定义网络或在不需要 Docker 管理网络的情况下。

  • "iptables": false:禁止 Docker 修改 iptables 规则。这意味着 Docker 将不会自动配置 IP 表以进行网络隔离。

  • "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:4243"]:设置 Docker 守护进程监听的接口和端口,允许通过 Unix 套接字和 TCP 端口 4243 进行通信。0.0.0.0:4243 表示接受来自任何 IP 地址的连接。

  • "labels": ["AlidockerMod=true"]:为 Docker 守护进程添加标签,可以用来标识守护进程或进行过滤。

  • "exec-opts": ["native.cgroupdriver=systemd"]:指定 Docker 使用 systemd 作为其 cgroup 驱动程序。cgroup (Control groups) 是 Linux 提供的一个特性,用于限制、记录和隔离进程组的资源使用(如 CPU、内存等)。使用 systemd 作为 cgroup 驱动程序有助于集成 Docker 和使用 systemd 的系统组件。

  • "insecure-registries":列出了 Docker 可以通过 HTTP 而非 HTTPS 连接的不安全镜像仓库地址。在这个例子中,给出了几个私有仓库的地址,Docker 将不会验证这些仓库的 SSL 证书。如果配置为0.0.0.0/0,信任所有地址的所有私有仓库。

  • "bip": "169.254.123.1/24":指定 Docker 默认桥接网络 docker0 的 IP 地址和网络掩码。这个网络用于容器之间和宿主机之间的通信。

  • "oom-score-adjust": -1000:为 Docker 守护进程设置 OOM(内存耗尽)得分调整值。数值 -1000 表示 Docker 守护进程在内存耗尽时应该最后被杀死,以保护它的运行稳定。

  • "registry-mirrors": ["https://pqbap4ya.mirror.aliyuncs.com"]:设置 Docker 镜像拉取时使用的镜像仓库加速地址。这对于位于中国等地区的用户来说,可以提供更快的镜像下载速度 。

  • "storage-driver": “overlay2”:指定 Docker 使用 overlay2 存储驱动,这是推荐的存储驱动,用于管理容器和镜像的分层文件系统。

  • "storage-opts":["overlay2.override_kernel_check=true"]:提供额外的存储驱动选项。在这里,它允许 overlay2 存储驱动忽略内核版本检查,这可能对于在不完全支持 overlay2 的旧内核版本上运行 Docker 是有用的。

  • "live-restore": true:启用“实时恢复”功能,允许 Docker 守护进程在更新或重启时不终止运行中的容器。这有助于减少服务中断并提高系统的可用性。

命令行配置列表

除了使用配置文件外,可以通过命令进行设置,通过 dockerd --help 查看全部的配置项,和 daemon.json 能对应上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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-address-pool Set the default address pool for local node networks
--default-runtime string Default OCI runtime for containers (default "runc")
--default-ulimit ulimit Default ulimits for containers (default [])
--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
--node-generic-resources list Advertise user-defined resource
--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

配置生效

1
2
3
4
5
6
7
8
9
# 加载其配置
sudo systemctl daemon-reload
# 重启docker使其生效
sudo systemctl restart docker

# 查看状态
sudo systemctl status docker -l
# 查看服务
sudo docker info

参考


Docker 配置文件 daemon.json
https://flepeng.github.io/042-云原生-01-Docker-11-安装和配置-Docker-配置文件-daemon-json/
作者
Lepeng
发布于
2023年3月2日
许可协议