6
docker version 1.9.1
swarm version 1.0.1

为什么要将 3 个虚拟机(桥接网络)连接到 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

心跳排序 - 在后台运行,检查端口,名称解析,可从管理器 ping。

4

5 回答 5

8

docker守护进程可以监听三种不同类型的 Socket:unixtcpfd

默认情况下,docker daemon只监听 unix 套接字。

如果需要远程访问 Docker 守护进程,则需要启用 tcp 套接字。

在创建 docker swarm 集群时,swarm manager 需要远程访问 swarm agent 节点的 docker daemon。

因此,需要重新配置docker daemon

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 daemon
  2. Docker 文档:创建 swarm 进行开发
于 2016-01-31T03:07:32.373 回答
3

我在 /etc/default/docker 中添加了 DOCKER_OPTS 值

DOCKER_OPTS="-H <>主机IP<>:2375 -H unix:///var/run/docker.sock"

更准确地说,<< Host IP >> 与您编辑 /etc/default/docker 文件的主机 IP 相同。

也许它会帮助某人。

于 2016-01-18T15:19:03.563 回答
3

配置方法因运行 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 套接字
  • -H tcp://0.0.0.0: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出现错误。

于 2016-04-06T22:18:53.440 回答
2

通过添加位于此行/usr/lib/systemd/system/docker.service的swarm workers 服务配置为我工作: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

但是这种方法是不受保护的,需要额外的安全配置。

于 2017-05-18T19:50:28.777 回答
1

我厌倦了这个线程中提到的解决方案。编辑 /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 daemon

systemctl daemon-reload

重启容器

sudo service docker restart

使用以下命令测试它是否工作

curl http://localhost:2375/images/json

如果下面的命令一切正常,则应返回 JSON。

要远程测试,请使用 Docker 主机的 PC 名称或 IP 地址。

于 2017-12-26T02:45:05.710 回答