用法:
- 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
例如:
当-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:
这个参数可以使用多次来指定多个不安全的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将会启动失败。我们这样做是为了避免在配置文件重载时,会静默忽略对此选项的修改。