Docker daemon可以通过3种类型的Socket监听Docker Engine API请求,分别是:unix、tcp、fd
默认,unix domain docker(或者IPC socket)在/var/run/docker.socket
创建,需要root权限或docker group。
如果,需要远程访问Docker daemon,需要使用tcp Socket。
首先需要知道的是,默认的构建是提供“未加密”与“未认证”的访问方式,因此,如果要安全访问,可以使用HTTPS加密的socket,或者是在docker daemon之前添加安全的web代理。
可以在所有IP接口访问2375端口
-H tcp://0.0.0.0:2375
或者在某个网络接口访问
-H tcp://192.168.59.103:2375
通常,使用2375作为未加密的端口,而使用2376作为加密端口。
当使用HTTPS加密的socket,需要注意的是只有TLS1.0+才能支持。SSLv3协议由于安全原因不再支持。
在基于systemd的系统中,可以通过systemd socket与daemon通信,只需要
dockerd -H fd://
也可以指定单独的socket
dockerd -H fd://3
如果,设定的socket activated files没有找到,docker会自动退出。
可以为Docker daemon设置多个监听的socket
# 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会将DOCKER_HOST
环境变量转为-H选项
$ docker -H tcp://0.0.0.0:2375 ps
$ export DOCKER_HOST="tcp://0.0.0.0:2375"
$ docker ps
设置DOCKER_TLS_VERIFY
环境变量等同于--tlsverify
选项
$ docker --tlsverify ps
# or
$ export DOCKER_TLS_VERIFY=1
$ docker ps
Docker client还可以设置HTTP_PROXY
、HTTPS_PROXY
、NO_PROXY
环境变量。
基本用法
运行Docker在daemon模式
$ sudo <path to>/dockerd -H 0.0.0.0:5555 &
下载ubuntu镜像
docker -H :5555 pull ubuntu
设置多个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
常见问题
如果出现错误
[root@localhost ~]# docker -H tcp://192.168.73.149:2375 ps
An error occurred trying to connect: Get http://192.168.73.149:2375/v1.24/containers/json: dial tcp 192.168.73.149:2375: getsockopt: no route to host
可查看是否关闭防火墙。
【参考】
1。docker官网:https://docs.docker.com/engine/reference/commandline/dockerd/\#daemon-socket-option