我们都知道docker分为daemon和client端,我们通常使用docker ps,docker images都只是使用docker client与docker daemon进行通信,docker client发送请求给docker daemon,docker daemon返回结果给client。 默认情况下docker daemon支持unix通信(/var/run/docker.sock),这个可以通过以下命令check。
$ netstat -nlp | grep docker
unix 2 [ ACC ] STREAM LISTENING 31160030 54974/docker /var/run/docker.sock
如果需要在远程client与docker daemon进行通信,则需要docker daemon支持tcp通信。
在SUSE系统上,我们需要修改/etc/sysconfig/docker, 在DOCKER_OPTS的最后加上 ‘-H tcp://0.0.0.0:2375’,然后重新启动DOCKER
systemctl daemon-reload
systemctl restart docker
然后在client节点上添加以下环境变量,
DOCKER_HOST=tcp://<daemon ip>:2375
之后就可以在client端使用docker ps,docker images 等与docker daemon进行通信了。
在Ubuntu系统上则需要修改 /etc/default/docker 或者修改 /lib/systemd/system/docker.service(修改方法相信大家都能看明白)
DOCKER_OPTS="-H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375"
修改完成后,大家可以重新启动。check一下。
$netstat -nlp | grep docker
tcp6 0 0 :::2375 :::* LISTEN 59844/docker
unix 2 [ ACC ] STREAM LISTENING 31218536 59844/docker /var/run/docker.sock
$ curl http://localhost:2375/version
{"ApiVersion":"1.18","Arch":"amd64","GitCommit":"7c8fca2","GoVersion":"go1.2.1","KernelVersion":"3.13.0-24-generic","Os":"linux","Version":"1.6.2"}
其他的linux系统可能设置稍有差异,不过原理是一样的,大家可以自行研究。