默認情況下,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沒有看到沒有監聽端口