Docker 的配置文件说明

由于 Linux 不同发行版所采用的默认管理框架的不同,Docker 在不同环境下所使用的默认配置文件也有所不同。这给初学者带来了极大的困惑和不便。好消息是,Docker 官方也意识到了这个问题,所以从 V1.12 开始,引入了并行通用配置文件 /etc/docker/daemon.json 。从此以后,用户可以在所有平台统一通过调整该配置文件来调整 Docker Engine。本文对此进行简要说明。

配置文件

通用配置文件 /etc/docker/daemon.json

Docker Engine V1.12 之后版本,用户可以自行创建 daemon.json 文件对 Docker Engine 进行配置和调整。要点如下:

  • 该文件作为 Docker Engine 的配置管理文件, 里面几乎涵盖了所有 docker 命令行启动可以配置的参数。
  • 不管是在哪个平台以何种方式启动, Docker 默认都会来这里读取配置。使用户可以统一管理不同系统下的 docker daemon 配置。
  • 相关参数的使用说明,可以参阅 man dockerd 帮助信息,或者参阅官方文档
  • 默认配置文件目录及支持的参数说明:
    • Linux: /etc/docker/daemon.json, 支持的完成参数配置示例如下(最新的支持参数列表可以参阅官方文档):

      {
      "authorization-plugins": [],
      "data-root": "",
      "dns": [],
      "dns-opts": [],
      "dns-search": [],
      "exec-opts": [],
      "exec-root": "",
      "experimental": false,
      "storage-driver": "",
      "storage-opts": [],
      "labels": [],
      "live-restore": true,
      "log-driver": "",
      "log-opts": {},
      "mtu": 0,
      "pidfile": "",
      "cluster-store": "",
      "cluster-store-opts": {},
      "cluster-advertise": "",
      "max-concurrent-downloads": 3,
      "max-concurrent-uploads": 5,
      "default-shm-size": "64M",
      "shutdown-timeout": 15,
      "debug": true,
      "hosts": [],
      "log-level": "",
      "tls": true,
      "tlsverify": true,
      "tlscacert": "",
      "tlscert": "",
      "tlskey": "",
      "swarm-default-advertise-addr": "",
      "api-cors-header": "",
      "selinux-enabled": false,
      "userns-remap": "",
      "group": "",
      "cgroup-parent": "",
      "default-ulimits": {},
      "init": false,
      "init-path": "/usr/libexec/docker-init",
      "ipv6": false,
      "iptables": false,
      "ip-forward": false,
      "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": [],
      "seccomp-profile": "",
      "insecure-registries": [],
      "disable-legacy-registry": false,
      "no-new-privileges": false,
      "default-runtime": "runc",
      "oom-score-adjust": -500,
      "runtimes": {
      "runc": {
      "path": "runc"
      },
      "custom": {
      "path": "/usr/local/bin/my-runc-replacement",
      "runtimeArgs": [
      "--debug"
      ]
      }
      }
      }
    • Windows: %programdata%\docker\config\daemon.json,支持的完成参数配置示例如下(最新的支持参数列表可以参阅官方文档):

      {
      "authorization-plugins": [],
      "data-root": "",
      "dns": [],
      "dns-opts": [],
      "dns-search": [],
      "exec-opts": [],
      "experimental": false,
      "storage-driver": "",
      "storage-opts": [],
      "labels": [],
      "log-driver": "",
      "mtu": 0,
      "pidfile": "",
      "cluster-store": "",
      "cluster-advertise": "",
      "max-concurrent-downloads": 3,
      "max-concurrent-uploads": 5,
      "shutdown-timeout": 15,
      "debug": true,
      "hosts": [],
      "log-level": "",
      "tlsverify": true,
      "tlscacert": "",
      "tlscert": "",
      "tlskey": "",
      "swarm-default-advertise-addr": "",
      "group": "",
      "default-ulimits": {},
      "bridge": "",
      "fixed-cidr": "",
      "raw-logs": false,
      "allow-nondistributable-artifacts": [],
      "registry-mirrors": [],
      "insecure-registries": [],
      "disable-legacy-registry": false
      }

不同框架的配置文件

不同 Linux 发行版本默认使用的管理框架可能存在不同。而不同管理框架下配置文件的架构差异,最终导致了不同环境下默认 Docker 配置文件目录和文件名的不同。Linux 常见管理框架下的默认配置文件说明如下:

| 管理框架类型 | 默认使用该框架的操作系统 | Docker 默认配置文件 | 相关操作指令 |
| - | - | - | - |
| Sysvinit | CentOS 6.x, Ubuntu 12.04 等| /etc/default/docker | CentOS: service docker restart
Ubuntu: /etc/init.d/docker restart |
| Upstart | Ubuntu 14.x,15.x 等| /etc/default/docker| restart docker |
| Systemd | CentOS 7+,Ubunt 16+,Debian,RHEl 7, Fedora, Archlinux 等| Ubuntu/CentOS/: /lib/systemd/system/docker.service
RHEL/CentOS: /usr/lib/systemd/system/docker.service | systemctl restart docker.service |

配置文件修改说明

参阅前述说明,对配置文件调整后,注意如下要点:

  • 修改配置后,需要重启 docker 服务生效。当前主流的 Sytemd 框架相关平台(CentOS 7+,Ubunt 16+ 等)的重启指令如下:

    systemctl daemon-reolad
    systemctl restart docker.service
  • 配置冲突
    如果通用配置文件 /etc/docker/daemon.json 和上述默认配置文件中有配置冲突(相同配置项分别配置了不同值),那么 Docker daemon 启动时会报错。比如,如果在 Ubuntu 16.04 系统中,同时在 /etc/docker/daemon.json 和 /lib/systemd/system/docker.service 中指定了 --dns= 属性,那么 Docker daemon 会启动失败,相关错误信息示例如下:

    [root@node3 ~]# systemctl start docker.service
    Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
    
    [root@node3 ~]# systemctl status docker.service
    ● docker.service - Docker Application Container Engine
       Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
       Active: failed (Result: exit-code) since Wed 2017-11-15 15:57:16 CST; 2min 29s ago
         Docs: https://docs.docker.com
      Process: 30610 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0 -H fd:// --dns=223.5.5.5 --dns=223.6.6.6 (code=exited,
     Main PID: 30610 (code=exited, status=1/FAILURE)
    
    Nov 15 15:57:16 c400e32b9e7cd46aea0d484ad260f4e4a-node3 systemd[1]: Starting Docker Application Container Engine...
    Nov 15 15:57:16 c400e32b9e7cd46aea0d484ad260f4e4a-node3 dockerd[30610]: unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives are specified both as a flag and in the configuration file: dns: (from flag: [223.5.5.5  223.6.6.6], from file: [114.114.114.114 8.8.8.8])
    Nov 15 15:57:16 c400e32b9e7cd46aea0d484ad260f4e4a-node3 systemd[1]: docker.service: Main process exited, code=exite
    Nov 15 15:57:16 c400e32b9e7cd46aea0d484ad260f4e4a-node3 systemd[1]: Failed to start Docker Application Container En
    Nov 15 15:57:16 c400e32b9e7cd46aea0d484ad260f4e4a-node3 systemd[1]: docker.service: Unit entered failed state.
    Nov 15 15:57:16 c400e32b9e7cd46aea0d484ad260f4e4a-node3 systemd[1]: docker.service: Failed with result 'exit-code'.
    lines 1-13/13 (END)
    
    
时间: 2024-10-01 18:18:52

Docker 的配置文件说明的相关文章

ActiveMQ私有云、公有云以及Docker环境高可用集群方案汇总

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1749983 ActiveMQ软件概述 ActiveMQ提供消息队列服务. ActiveMQ高可用原理 ActiveMQ高可用由三部分组成. 1.ActiveMQ的master-slave 两个运行的ActiveMQ instance如果同时使用一套持久化存储,那么这两个ActiveMQ instance就会构成ma

linux 下 docker NGINX+PHP+MYSQL+REDIS+Elasticsearch 开发环境搭建

一步步跟我做,搭建属于自己的 docker 开发环境 作者:风来了.fox nginx 1.8.0 php 5.6.x 1.docker 安装 1.1 ubuntu 14.x 15.x sudo apt-get update curl -sSL https://get.docker.io/ | sudo sh 1.2 centos 6.x 7.x sudo yum update curl -sSL https://get.docker.io/ | sudo sh 1.3 如果安装出现错误 1.3

[Docker系列·13] 使用fig启动容器

fig的使用非常简单,只需要配置fig.yml并在同目录下执行fig up -d即可启动容器. 配置fig.yml: node: image: feuyeux/ubuntu-node ports: - "8080:8080" links: - redis:node-redis mem_limit: 2g hostname: fig-node redis: image: feuyeux/redis hostname: fig-redis 配置中的两个镜像的创建,请参考本系列前面的文章:

linux下设置Docker运行时根目录

因第一次玩 Docker,装系统的时候没有分配 /var 分区,而500多G的剩余空间都分给了 /home. 当玩起 Docker,才发现这货默认存放位置是在 /var/lib/docker. 解决方法有二: 一是重装系统,这也太不人性化了,忽略...下次部署 Docker 宿主机的时候得好好分区下. 二是改变 Docker 默认存放路径. 查了下手册发现: -g, --graph="/var/lib/docker" 设置Docker运行时根目录 使用 --graph 参数:docke

mysql 5.7 docker 主从复制架构搭建教程_Mysql

分享mysql 5.7 docker 主从复制架构搭建教程,供大家参考,具体内容如下 环境版本: MySQL :  5.7.13 Docker : 1.11.2 CentOS : 7.1  1.先在两个物理机上分别安装两个MySQL.命令如下  复制代码 代码如下: docker pull mysql:5.7.13  docker run --name anuo-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=qaz.00JK -d mysql:5.7.13 

Centos7 下建立 Docker 桥接网络

centos7宿主机上建立Docker桥接物理网络过程 宿主机网卡信息: name:ens0 IP:192.168.184.99 GATEWAY:192.168.184.2 DNS:192.168.184.2 1. 停止Docker服务 ~#:service docker stop 2.删除docker0网卡 ~#:ip link set dev docker0 down ~#:brctl delbr docker0 3.新建桥接物理网络虚拟网卡br0 ~#:brctl addbr br0 ~#

Docker的安装方法及运行Docker Swarm模式的使用_docker

Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口. 概要 docker就给简单介绍这么多,这里主要说说docker swarm. docker engine本身只提供了容器技术,没有解决集群环境下的容器编排和通信.docker swarm是一个容器编排管理工具,docker-engine在1.12版本之后集成了docker

CentOS7 docker服务无法启动解决方案及实现步骤_docker

CentOS7  docker服务无法启动解决方案 检查步骤 启动docker服务: systemctl restart docker 这个时候会报错,请进行以下步骤: 1. 找到报错的类型,或者报错的说明. 2. 检查docker的配置文件 3. 检查磁盘空间 4. 检查端口占用情况 步骤详解 检查报错类型,查看日志: journalctl -xe 检查配置文件,不同操作系统位置基本相同: /etc/sysconfig/docker/ 或者直接找到docker运行程序,一般会有相关配置文件的默

Docker Swarm学习教程

Swarm介绍 Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(dockerclient in go, docker_py, docker等)均可以直接与Swarm通信.Swarm几乎全部用Go语言来完成开发,上周五,4月17号,Swarm0.2发布,相比0.1版本,0.2版本增加了