默认情况下,Docker守护进程会生成一个socket文件来进行本地进程通信,而不会监听任何端口,因此只能在本地使用docker客户端或者使用Docker API进行操作。
如果想在其他主机上操作Docker主机,就需要让Docker守护进程监听一个端口,这样才能实现远程通信。
简单一点理解为
没有开启监听的话,就只能只用本地docker客户端来使用
开启之后就可以用A这个docker客户端来控制B这个docker客户端
比如我们的B的docker客户端ip为192.168.43.22
然后我们没有开启远程连接时就只能使用B这个docker客户端本身来查看本地镜像是docker images
开启远程连接之后,那么我们可以在A的docker客户机上使用docker -H B的ip地址 images
来查看B的本地镜像
docker -H 192.168.43.22 images
配置docker远程连接端口
/etc/docker/daemon.json会被docker.service的配置文件覆盖,直接添加daemon.json不起作用。可以有如下几种设置:
1、直接编辑配置文件:Centos中docker daemon配置文件在/lib/systemd/system/docker.service,找到以下字段,在后面添加如下,注意,如果不行就不用" fd:// "
vi /usr/lib/systemd/system/docker.service
找到 ExecStart,在最后面添加 -H tcp://0.0.0.0:2375,如下图所示
-H tcp://0.0.0.0:2375
(两张图任选其一)
(两张图任选其一)
然后重新加载docker配置文件和重启docker
systemctl daemon-reload
systemctl start docker
注意:如果我们有防火墙,记得添加防护墙策略或者关闭防护墙
iptables -F
iptables-save
最后查看是否成功,添加了-H参数,启动了端口(端口默认为2375,但是可以改)
[root@server ~]# ps aux|grep dockerd
root 22659 0.0 1.9 586272 76004 ? Ssl 22:29 0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
root 22834 0.0 0.0 112664 964 pts/1 S+ 22:41 0:00 grep --color=auto dockerd
[root@server ~]#
[root@server ~]#
[root@server ~]#
[root@server ~]#
[root@server ~]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1346/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1822/master
tcp6 0 0 :::22 :::* LISTEN 1346/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1822/master
tcp6 0 0 :::2375 :::* LISTEN 22659/dockerd
[root@server ~]#
我们再来验证一下
先看B这个打开监听端口的docker客户端
docker info
可以看到默认端口被打开
先看A这个没有打开监听端口的docker客户端
docker info
很明显发现A没有看到没有监听端口