docker 配置及排错

版本: 18.3
官网: https://docs.docker.com/config/daemon/

本篇讲述docker的配置项。

配置随机器自启动

#centOS:
systemctl enable docker

#ubuntu 
# 在ubuntu系统自动配置为随机自启动  , 取消使用下面命令  
$ echo manual | sudo tee /etc/init/docker.override
$ sudo chkconfig docker on

手动启动

若不想后台运行或者想测试,可以手动执行。
命令 dockerd
该命令会使之前台执行 并将日志直接打印在控制台。
通过 Ctrl+C 终止之。

配置docker daemon

有两种方式 :

  • 通过json配置文件
  • 通过启动dockerd时传递参数

json配置文件的位置在 :/etc/docker/daemon.jsonC:\ProgramData\docker\config\daemon.json

配置文件示例:

{
  "debug": true,
  "tls": true,
  "tlscert": "/var/docker/server.pem",
  "tlskey": "/var/docker/serverkey.pem",
  "hosts": ["tcp://192.168.59.3:2376"]
}

传递参数示例:

dockerd --debug \
  --tls=true \
  --tlscert=/var/docker/server.pem \
  --tlskey=/var/docker/serverkey.pem \
  --host tcp://192.168.59.3:2376

全量可配置参数:
https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file

{
    "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": [],
    "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"
            ]
        }
    }
}

可使用的全量选项参见: https://docs.docker.com/engine/reference/commandline/dockerd/
或使用dockerd --help 查看 。

docker daemon 目录

Docker守护进程将所有数据保存在一个目录中。 这将跟踪与Docker相关的所有内容,包括containers, images, volumes, service definition, and secrets.

默认情况下该目录为:

  • /var/lib/docker
  • C:\ProgramData\docker

可以使用 data-root 选项来配置不同的目录。

由于Docker守护进程的状态保留在此目录中,因此请确保为每个守护进程使用专用目录。 如果两个守护程序共享相同的目录(例如NFS共享),则您将遇到难以排除故障的错误。

配置项与传递参数不一致错误

当在daemon.json中配置和 传递给dockerd的参数选项不一致时会报错, 报错信息如下类似 :

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: hosts: (from flag: [unix:///var/run/docker.sock], from file: [tcp://127.0.0.1:2376])

注意: 在windows和Mac中 不支持 daemon.json中的hosts设置。

OOME (Out Of Memory Exceptions )

当容器期望获取的内存大于系统可用时,可能会出现OOME ,并且容器或docker 守护进程可能会被杀掉。 为避免该异常,请确保主机上运行的应用分配何时的内存。
参见 限制容器资源 https://docs.docker.com/config/containers/resource_constraints/

查看日志

守护进程日志可用于定位问题, 不同类型的机器上日志位置不同。

docker 配置及排错_第1张图片
图片.png

开启debug模式

  1. 编辑deamon.json , 通常在/etc/docker/目录下, 对于linux系统,若不存在则创建之。 对于mac 和windows ,不要直接编辑之,使用 Preferences / Daemon / Advanced.

  2. 若daemon.json空 ,则加入下行:

{
  "debug": true
}

若不空,需要注意json格式和换行问题。
同时需要注意 log-level 配置的值, 默认为info , 支持的值为 debug, info, warn, error, fatal.

  1. 对于linux系统发送HUP信号使之重新加载配置
    sudo kill -SIGHUP $(pidof dockerd)
    对于windows , 重启之。

也可以不遵从上面的流程, 换做先stop , 然后使用-D选项手工启动之。
但是,这可能会导致运行环境与原使用脚本启动的环境不一致,导致debug更加困难。

强制堆栈追踪日志

若守护进程没反映, 可以通过发送SIGUSR1 信号 以记录全部堆栈信息到日志中。
对于linux系统:
sudo kill -SIGUSR1 $(pidof dockerd)

对于windows , 需要下载docker-signal , 然后执行 。

这会在不中断守护进程的情况下记录堆栈日志 。
堆栈日志可以用来诊断守护进程中各个线程的状态。

查看 堆栈

  • 对于使用systemctl的linux , 使用 journalctl -u docker.service
    注意: 对于mac 和windows , 不能手工生成堆栈日志, 但是可以通过Diagnose and feedback 来查看。

查看docker是否正在运行

通过 docker info 命令来查看。

通过操作系统工具来查看 , 如 sudo systemctl is-active docker or sudo status docker or sudo service docker status

你可能感兴趣的:(docker 配置及排错)