簡體   English   中英

Docker-swarm >>無法連接到docker引擎端點

[英]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: unixtcpfd

默認情況下, 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守護程序

參考文獻:

  1. Docker文檔:docker守護程序
  2. Docker文檔:創建一個用於開發的swarm

我在/ 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 :因此我按照上面的鏈接執行了操作系統的配置說明並執行了以下操作:

  1. mkdir /etc/systemd/system/docker.service.d
  2. 創建docker.conf文件
    vi /etc/systemd/system/docker.service.d/docker.conf
  3. 將以下內容添加到docker.conf文件中,然后保存。

     [Service] ExecStart= ExecStart=/usr/bin/docker daemon -D -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 
  4. 同花順變化

     systemctl daemon-reload 
  5. 重啟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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM