Docker Swarm 节点加入问题解决方案

79次阅读
没有评论

问题描述

在尝试通过互联网将新的节点添加到他的 Docker Swarm 中,但似乎无法通过代理连接。用户尝试使用 Caddy 进行代理,但代理配置对于其他类似于在 nginx 中使用 proxy_pass 的服务器也是一样的。Caddy 会自动为子域设置 HTTPS,并将所有流量从端口 80 重定向到 443。用户的 Caddy 配置如下:

swarm.mydomain.com {
    proxy / http://<docker-swarm-manager-ip>:2377 {
        transparent
    }
}

从 Docker Swarm 管理器获得的加入令牌类似于:

docker swarm join --token <some-long-hash> <docker-swarm-manager-ip>:2377

在用户要连接到 Swarm 的节点上,他尝试了以下命令:

sudo docker swarm join --token <some-long-hash> swarm.mydomain.com

但是出现了以下错误:

Error response from daemon: rpc error: code = Unavailable desc = grpc: the connection is unavailable

用户还尝试指定 SSL 端口:

sudo docker swarm join --token <some-long-hash> swarm.mydomain.com:443

但是出现了以下错误:

Error response from daemon: rpc error: code = FailedPrecondition desc = transport: received the unexpected content-type "text/plain; charset=utf-8"

用户是 Docker Swarm 的新手,无法在网上找到类似的设置。他寻求帮助。

解决方案

为了解决这个问题,需要注意 Docker Swarm 节点之间的通信方式和端口。Swarm 节点需要在以下端口上进行直接通信:2377/tcp(或您配置的 Swarm 端口)、7946/both 和 4789/udp。如果您在节点之间使用了具有 IPSec 安全选项的叠加网络,则还需要打开节点之间的协议 50。

步骤

  1. 更新 Caddy 配置:首先,您需要更新 Caddy 配置,不指定端口号。您的配置应该类似于:
swarm.mydomain.com {
    proxy / http://<docker-swarm-manager-ip> {
        transparent
    }
}
  1. 打开所需端口:确保端口 7946 和 4789 在您的节点上已经打开。

  2. 使用正确的命令:在要连接到 Swarm 的节点上,使用正确的命令进行连接。命令应该类似于:

sudo docker swarm join --token <some-long-hash> <docker-swarm-manager-ip>:2377
  1. 如果需要在私有网络中连接非互联网可访问的系统,考虑使用 VPN。

需要注意的是,使用代理来代替直接连接 Swarm 节点可能会引入复杂性,并且可能无法正常工作。建议尽可能避免在这种情况下使用代理。

以上步骤应该能够帮助您解决 Docker Swarm 节点加入问题。如果您有任何进一步的疑问或问题,欢迎提问。

正文完