[英]Docker-swarm >> Cannot connect to the docker engine endpoint
docker version 1.9.1
swarm version 1.0.1
為什么要將3個VM(橋接網)連接到swarm。 “docker info”顯示了所有節點
狀態待定。
3個主機中的1個是管理器,所有輸出都來自該主機。 我不知道在哪里尋找。
在運行swarm --debug manage token://XXXXX
輸出>>
*INFO[0000] Listening for HTTP addr=127.0.0.1:2375 proto=tcp
DEBU[0000] Failed to validate pending node: Cannot connect to the docker engine endpoint Addr=10.32.1.38:2375
DEBU[0000] Failed to validate pending node: Cannot connect to the docker engine endpoint Addr=10.32.1.4:2375
DEBU[0000] Failed to validate pending node: Cannot connect to the docker engine endpoint Addr=10.32.1.33:2375
然后
root@ubuntu:~# ps -ef | grep swarm
root 2158 1391 0 12:28 pts/2 00:00:00 swarm join token://xxxxxxx --addr 10.32.1.4:2375
root 2407 1213 0 13:57 pts/1 00:00:00 swarm manage token://xxxxxxx -H 0.0.0.0:4243
root 2413 1391 0 13:57 pts/2 00:00:00 grep --color=auto swarm
然后
root@ubuntu:~# swarm list token://xxxxxxxxxxx
10.32.1.4:2375
10.32.1.33:2375
10.32.1.38:2375
然后
root@ubuntu:~# ps -ef | grep docker
root 2330 1 0 12:52 ? 00:00:00 /usr/bin/docker daemon
root 2421 1391 0 14:10 pts/2 00:00:00 grep --color=auto docker
心跳排序 - 在后台運行,檢查端口,名稱解析,從管理器pingable。
docker守護程序可以偵聽三種不同類型的Socket: unix , tcp和fd 。
默認情況下, docker守護程序只是偵聽unix套接字。
如果需要遠程訪問Docker守護程序,則需要啟用tcp套接字。
在創建docker swarm集群時,swarm管理器需要遠程訪問swarm代理節點的docker守護程序。
因此,您需要重新配置docker守護程序
vim /etc/default/docker
添加以下行:
DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
重啟docker守護進程
sudo restart docker
通過這樣做,可以遠程訪問docker守護程序 。
參考文獻:
我在/ etc / default / docker中添加了DOCKER_OPTS值
DOCKER_OPTS =“ - H <>主機IP <>:2375 -H unix:///var/run/docker.sock”
更精確的是“主機IP”是您編輯/ etc / default / docker文件的主機IP。
也許它會幫助別人。
配置方法因運行Docker的主機操作系統而異。
請參閱Docker守護程序配置說明(向下滾動以查找主機操作系統) :
Docker配置文檔
我正在運行Red Hat Enterprise Linux 7.2 :因此我按照上面的鏈接執行了操作系統的配置說明並執行了以下操作:
mkdir /etc/systemd/system/docker.service.d
vi /etc/systemd/system/docker.service.d/docker.conf
將以下內容添加到docker.conf文件中,然后保存。
[Service] ExecStart= ExecStart=/usr/bin/docker daemon -D -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
同花順變化
systemctl daemon-reload
重啟Docker
systemctl restart docker
配置的關鍵線(以及我稍微偏離文檔的地方)是:
ExecStart=/usr/bin/docker daemon -D -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
讓我們一塊一塊地說明:
/usr/bin/docker
從docker二進制文件開始 daemon
啟動Docker守護進程 -D
以調試模式啟動(不需要) -H unix:///var/run/docker.sock
創建默認的Docker Socket -H tcp://0.0.0.0:2375
2375在所有網絡接口上創建一個偵聽端口2375的tcp Docker Socket 進行這些更改后,我重新啟動了docker swarm容器(在我的情況下也是我的Consul容器)並運行docker -H tcp://<IP_OF_SWARM_MASTER>:<PORT_YOU_TOLD_SWARM_MASTER_TO_LISTEN_ON> info
以查看我是否不再獲取Cannot connect to the docker engine endpoint
錯誤。
通過添加swarm worker服務配置/usr/lib/systemd/system/docker.service
為我工作,其中ExecStart
位於以下行:
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
刷新更改並重新啟動Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker.service
但這種方法是不受保護的,需要額外的安全配置。
我厭倦了這個帖子中提到的解決方案。 編輯/ etc / default / docker對我不起作用。
最后是什么是以下解決方案。
編輯/lib/systemd/system/docker.service文件找到以ExecStart開頭並添加-H = tcp://0.0.0.0:2375的行,使其看起來像
ExecStart=/usr/bin/docker daemon -H=fd:// -H=tcp://0.0.0.0:2375
保存修改的文件重新加載docker守護程序
systemctl daemon-reload
重啟容器
sudo service docker restart
使用以下命令測試它是否正常工作
curl http://localhost:2375/images/json
如果一切正常,則命令應返回JSON。
要遠程測試,請使用Docker Host的PC名稱或IP地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.