首页 > 解决方案 > 是否可以自定义 swarm 端口?如果是这样,该怎么做?

问题描述

根据docker doc:

以下端口必须可用。在某些系统上,这些端口默认是打开的。

用于集群管理通信的 TCP 端口 2377

TCP 和 UDP 端口 7946 用于节点之间的通信

覆盖网络流量的 UDP 端口 4789

因此,如果主机上没有这 3 个默认端口,如何自定义这些端口?

标签: dockerdocker-swarm

解决方案


19.03(刚刚发布)中提供了以下选项:

$ docker swarm init --help

Usage:  docker swarm init [OPTIONS]

Initialize a swarm

Options:
      --advertise-addr string                  Advertised address (format: <ip|interface>[:port])
      --autolock                               Enable manager autolocking (requiring an unlock key to start a stopped manager)
      --availability string                    Availability of the node ("active"|"pause"|"drain") (default "active")
      --cert-expiry duration                   Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s)
      --data-path-addr string                  Address or interface to use for data path traffic (format: <ip|interface>)
      --data-path-port uint32                  Port number to use for data path traffic (1024 - 49151). If no value is set or is set to 0, the default port (4789) is used.
      --default-addr-pool ipNetSlice           default address pool in CIDR format (default [])
      --default-addr-pool-mask-length uint32   default address pool subnet mask length (default 24)
      --dispatcher-heartbeat duration          Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s)
      --external-ca external-ca                Specifications of one or more certificate signing endpoints
      --force-new-cluster                      Force create a new cluster from current state
      --listen-addr node-addr                  Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
      --max-snapshots uint                     Number of additional Raft snapshots to retain
      --snapshot-interval uint                 Number of log entries between Raft snapshots (default 10000)
      --task-history-limit int                 Task history retention limit (default 5)

要更改 2377 上的侦听端口和 4789 上的 VXLAN 端口,您应该能够运行以下命令:

docker swarm init --listen-addr 0.0.0.0:3377 --data-path-port 5789

我不相信 7946 是可配置的。


将其他节点加入 swarm 时,您有以下选项:

$ docker swarm join --help

Usage:  docker swarm join [OPTIONS] HOST:PORT

Join a swarm as a node and/or manager

Options:
      --advertise-addr string   Advertised address (format: <ip|interface>[:port])
      --availability string     Availability of the node ("active"|"pause"|"drain") (default "active")
      --data-path-addr string   Address or interface to use for data path traffic (format: <ip|interface>)
      --listen-addr node-addr   Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
      --token string            Token for entry into the swarm

这使您可以调整侦听器地址/端口。我不知道 data-path-port 是否是整个 swarm 中的全局设置,该功能在一小时前才发布 GA,因此需要进行一些测试以了解它的行为方式。


从您的评论中:

我想知道 docker 社区是否会考虑让 7946 可配置

Docker 是开源的,因此您可以自由地将 PR 提交给 moby/moby、libnetwork 和/或 swarmkit。不确定哪个 repo 专门涵盖了这个实现细节。


推荐阅读