用法:
- Usage: dockerd [OPTIONS]
-
- A self-sufficient runtime for containers.
-
- Options:
-
- --add-runtime=[] Register an additional OCI compatible runtime
- --api-cors-header Set CORS headers in the remote API
- --authorization-plugin=[] Authorization plugins to load
- -b, --bridge Attach containers to a network bridge
- --bip Specify network bridge IP
- --cgroup-parent Set parent cgroup for all containers
- --cluster-advertise Address or interface name to advertise
- --cluster-store URL of the distributed storage backend
- --cluster-store-opt=map[] Set cluster store options
- --config-file=/etc/docker/daemon.json Daemon configuration file
- --containerd Path to containerd socket
- -D, --debug Enable debug mode
- --default-gateway Container default gateway IPv4 address
- --default-gateway-v6 Container default gateway IPv6 address
- --default-runtime=runc Default OCI runtime for containers
- --default-ulimit=[] Default ulimits for containers
- --disable-legacy-registry Disable contacting legacy registries
- --dns=[] DNS server to use
- --dns-opt=[] DNS options to use
- --dns-search=[] DNS search domains to use
- --exec-opt=[] Runtime execution options
- --exec-root=/var/run/docker Root directory for execution state files
- --fixed-cidr IPv4 subnet for fixed IPs
- --fixed-cidr-v6 IPv6 subnet for fixed IPs
- -G, --group=docker Group for the unix socket
- -g, --graph=/var/lib/docker Root of the Docker runtime
- -H, --host=[] Daemon socket(s) to connect to
- --help Print usage
- --icc=true Enable inter-container communication
- --insecure-registry=[] Enable insecure registry communication
- --ip=0.0.0.0 Default IP when binding container ports
- --ip-forward=true Enable net.ipv4.ip_forward
- --ip-masq=true Enable IP masquerading
- --iptables=true Enable addition of iptables rules
- --ipv6 Enable IPv6 networking
- -l, --log-level=info Set the logging level
- --label=[] Set key=value labels to the daemon
- --live-restore Enables keeping containers alive during daemon downtime
- --log-driver=json-file Default driver for container logs
- --log-opt=map[] Default log driver options for containers
- --max-concurrent-downloads=3 Set the max concurrent downloads for each pull
- --max-concurrent-uploads=5 Set the max concurrent uploads for each push
- --mtu Set the containers network MTU
- --oom-score-adjust=-500 Set the oom_score_adj for the daemon
- -p, --pidfile=/var/run/docker.pid Path to use for daemon PID file
- --raw-logs Full timestamps without ANSI coloring
- --registry-mirror=[] Preferred Docker registry mirror
- -s, --storage-driver Storage driver to use
- --selinux-enabled Enable selinux support
- --storage-opt=[] Storage driver options
- --swarm-default-advertise-addr Set default address or interface for swarm advertised address
- --tls Use TLS; implied by --tlsverify
- --tlscacert=~/.docker/ca.pem Trust certs signed only by this CA
- --tlscert=~/.docker/cert.pem Path to TLS certificate file
- --tlskey=~/.docker/key.pem Path to TLS key file
- --tlsverify Use TLS and verify the remote
- --userland-proxy=true Use userland proxy for loopback traffic
- --userns-remap User/Group setting for user namespaces
- -v, --version Print version information and quit
以上选项值为[]可以指定多次。dockerd是管理容器的常驻进程。daemon和客户端使用了不同的二进制文件。直接键入dockerd执行daemon。
Daemon socket选项
docker daemon监听三个不同类型的socket:unix,tcp和fd来处理Docker Remote API请求。
默认下,unix域名套接字[或IPC套接字]创建在/var/run/docker.sock,需要root权限或用户属于docker组。
如果需要开放docker daemon远程访问,需要启用tcp套接字。请注意默认的daemon配置没有加密和验证直接就能访问daemon – 应该使用内置的HTTPS加密的socket,或在它前面放置一个安全的web代理。可以使用-H tcp://0.0.0.0:2375在所有网络接口上监听2375端口,也可以使用-H tcp://192.168.59.103:2375在指定的网络接口监听。一般约定使用端口2375来监听非加密请求,使用2376来监听加密请求。
注意:如果使用了HTTPS加密套接字,记住只支持TLS1.0和以上版本的协议。SSLv3协议和之前的版本由于安全原因不再支持。
在基于systemd的系统,可以通过systemd socket activation使用dockerd -H fd://与daemon通信。使用fd://在大多数情况工作良好,不过也可以指定一个单独的sockets:dockerd -H fd://。如果指定的socket activated文件没有找到,docker将退出。
可以指定多次-H选项来设置docker监听多个sockets:
- # listen using the default unix socket, and on 2 specific IP addresses on this host.
- $ sudo dockerd -H unix:///var/run/docker.sock -H tcp://192.168.59.106 -H tcp://10.10.10.2
如果docker client没有指定-H选项,它将尝试查找环境变量DOCKER_HOST。
- $ docker -H tcp://0.0.0.0:2375 ps
- # or
- $ export DOCKER_HOST="tcp://0.0.0.0:2375"
- $ docker ps
- # both are equal
设置环境变量DOCKER_TLS_VERIFY为任何一个非空值,等同于–tlsverify参数。如下是等效的:
- $ docker --tlsverify ps
- # or
- $ export DOCKER_TLS_VERIFY=1
- $ docker ps
Docker客户端将遵守HTTP_PROXY,HTTPS_PROXY和NO_PROXY环境变量(或其小写版本)。 HTTPS_PROXY优先于HTTP_PROXY。
绑定docker到另一个host/port或unix socket
警告:更改默认的docker daemon绑定到一个TCP端口或Unix docker用户组会允许非root用户获取daemon的root访问权限,这将增加安全风险。确保仔细控制docker的访问权限。如果绑定到一个TCP端口,那么能够访问此端口的用户将对docker的完全的访问权限;所以不建议在一个开放的网络绑定端口。
使用-H参数可以使docker daemon监听在指定IP和端口。默认监听unix:///var/run/docker.sock只允许root用户在本地连接。可以设置0.0.0.0:2375或指定一个主机IP来给所有人访问权限,不过这不推荐因为这非常不安全。
类似的,docker客户端可以使用-H连接到一个自定义端口。Linux上docker客户端默认连接到unix:///var/run/docker.sock,windows连接到tcp://127.0.0.1:2376。
-H接受如下的格式:
- tcp://[host]:[port][path] or unix://path
例如:
tcp:// -> 监听tcp的127.0.0.1,当TLS加密启用时使用2376端口,否则使用2375端口。
tcp://host:2375 -> 监听在tcp的host:2375
tcp://host:2375/path -> 监听在tcp的host:2375并添加前缀路径到所有请求。
unix://path/to/socket -> 监听unix socket,路径为path/to/socket。
当-H为空时,与没有指定-H选项时的默认值一样。
-H也接受TCP绑定的简短格式:host: 或 host:port 或 :port
以daemon模式运行docker:
- $ sudo <path to>/dockerd -H 0.0.0.0:5555 &
下载ubuntu镜像:
- $ docker -H :5555 pull ubuntu
可以使用多个-H,例如,既监听TCP也监听unix socket
- # Run docker in daemon mode
- $ sudo <path to>/dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock &
- # Download an ubuntu image, use default Unix socket
- $ docker pull ubuntu
- # OR use the TCP port
- $ docker -H tcp://127.0.0.1:2375 pull ubuntu
daemon DNS选项
为所有docker容器设置DNS服务器,使用:
- $ sudo dockerd --dns 8.8.8.8
为所有docker容器设置DNS search domain,使用:
- $ sudo dockerd --dns-search example.com
Insecure registries
Docker把私有的registry分为安全或不安全的。下面章节,我们用registry表示私有的registry,myregistry:5000作为私有的registry的示例。
一个安全的registry使用TLS且它的CA证书副本在docker主机的/etc/docker/certs.d/myregistry:5000/ca.crt。一个不安全的registry不使用TLS或使用了TLS,但其CA证书没有在docker daemon指定的路径或是错误的CA。
默认下,docker假设所有的,除了本地的,registry是安全的。如果Docker假设这个registry是安全的,那与一个不安全的registry通信是不可能的。为了与一个不安全的registry通信,docker daemon要求以下面两种格式其中一种指定–insecure-registry:
–insecure-registry myregistry:5000 告诉docker daemon myregistry:5000是不安全的registry。
–insecure-registry 10.1.0.0/16 告诉docker daemon所有的registry域名解析出的IP地址在这个IP范围的registry是不安全的。
这个参数可以使用多次来指定多个不安全的registry。
如果一个不安全的registry没有标记为不安全的,docker pull,docker push和docker search将会得到一个错误来提示用户使用安全的registry或在daemon设置–insecure-registry参数。
本地的registry,那么解析出来的IP在127.0.0.0/8范围的,从Docker 1.3.2起就自动标记为不安全的registry。不推荐依赖这个,因为未来版本可能会更改。
启用–insecure-registry,允许非加密或不被信任的通信,在运行一个本地registry会有用。不过,因为这会产生安全漏洞,它只应该作为测试目的。 为了提高安全性,用户应该将CA添加到其系统的受信任CA列表中,而不是启用–insecure-registry。
daemon配置文件
–config-file允许设置JSON格式的daemon配置文件。这个文件使用与选项一样的名称作为key,除了那么允许多个值的选项,那就使用这个选项名称的复数,如label选项,使用labels作为key。
在配置文件的选项设置不能与命令行的选项设置冲突。如果一个选项在配置文件和命令行设置了,docker daemon将会启动失败。我们这样做是为了避免在配置文件重载时,会静默忽略对此选项的修改。