mirror of https://github.com/docker/cli.git
				
				
				
			Replace secrets with join tokens
Implement the proposal from https://github.com/docker/docker/issues/24430#issuecomment-233100121 Removes acceptance policy and secret in favor of an automatically generated join token that combines the secret, CA hash, and manager/worker role into a single opaque string. Adds a docker swarm join-token subcommand to inspect and rotate the tokens. Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
This commit is contained in:
		
							parent
							
								
									d1228a75e1
								
							
						
					
					
						commit
						acf0bc4b9a
					
				| 
						 | 
				
			
			@ -1087,7 +1087,7 @@ __docker_service_subcommand() {
 | 
			
		|||
        "($help)--name=[Service name]:name: "
 | 
			
		||||
        "($help)*--network=[Network attachments]:network: "
 | 
			
		||||
        "($help)*"{-p=,--publish=}"[Publish a port as a node port]:port: "
 | 
			
		||||
        "($help)--registry-auth[Send registry authentication details to Swarm agents]"
 | 
			
		||||
        "($help)--registry-auth[Send registry authentication details to swarm agents]"
 | 
			
		||||
        "($help)--replicas=[Number of tasks]:replicas: "
 | 
			
		||||
        "($help)--reserve-cpu=[Reserve CPUs]:value: "
 | 
			
		||||
        "($help)--reserve-memory=[Reserve Memory]:value: "
 | 
			
		||||
| 
						 | 
				
			
			@ -1185,11 +1185,11 @@ __docker_service_subcommand() {
 | 
			
		|||
__docker_swarm_commands() {
 | 
			
		||||
    local -a _docker_swarm_subcommands
 | 
			
		||||
    _docker_swarm_subcommands=(
 | 
			
		||||
        "init:Initialize a Swarm"
 | 
			
		||||
        "inspect:Inspect the Swarm"
 | 
			
		||||
        "join:Join a Swarm as a node and/or manager"
 | 
			
		||||
        "leave:Leave a Swarm"
 | 
			
		||||
        "update:Update the Swarm"
 | 
			
		||||
        "init:Initialize a swarm"
 | 
			
		||||
        "inspect:Inspect the swarm"
 | 
			
		||||
        "join:Join a swarm as a node and/or manager"
 | 
			
		||||
        "leave:Leave a swarm"
 | 
			
		||||
        "update:Update the swarm"
 | 
			
		||||
    )
 | 
			
		||||
    _describe -t docker-swarm-commands "docker swarm command" _docker_swarm_subcommands
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,7 +19,7 @@ Create and update a stack from a Distributed Application Bundle (DAB)
 | 
			
		|||
Options:
 | 
			
		||||
      --file   string   Path to a Distributed Application Bundle file (Default: STACK.dab)
 | 
			
		||||
      --help            Print usage
 | 
			
		||||
      --registry-auth   Send registry authentication details to Swarm agents
 | 
			
		||||
      --registry-auth   Send registry authentication details to swarm agents
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Create and update a stack from a `dab` file. This command has to be
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -111,7 +111,6 @@ read the [`dockerd`](dockerd.md) reference page.
 | 
			
		|||
 | 
			
		||||
| Command | Description                                                        |
 | 
			
		||||
|:--------|:-------------------------------------------------------------------|
 | 
			
		||||
| [node accept](node_accept.md) | Accept a node into the swarm                 |
 | 
			
		||||
| [node promote](node_promote.md) | Promote a node that is pending a promotion to manager |
 | 
			
		||||
| [node demote](node_demote.md) | Demotes an existing manager so that it is no longer a manager |
 | 
			
		||||
| [node inspect](node_inspect.md) | Inspect a node in the swarm                |
 | 
			
		||||
| 
						 | 
				
			
			@ -124,10 +123,11 @@ read the [`dockerd`](dockerd.md) reference page.
 | 
			
		|||
 | 
			
		||||
| Command | Description                                                        |
 | 
			
		||||
|:--------|:-------------------------------------------------------------------|
 | 
			
		||||
| [swarm init](swarm_init.md) | Initialize a Swarm                             |
 | 
			
		||||
| [swarm join](swarm_join.md) | Join a Swarm as a manager node or worker node  |
 | 
			
		||||
| [swarm init](swarm_init.md) | Initialize a swarm                             |
 | 
			
		||||
| [swarm join](swarm_join.md) | Join a swarm as a manager node or worker node  |
 | 
			
		||||
| [swarm leave](swarm_leave.md) | Remove the current node from the swarm       |
 | 
			
		||||
| [swarm update](swarm_update.md) | Update attributes of a swarm               |
 | 
			
		||||
| [swarm join-token](swarm_join_token.md) | Display or rotate join tokens      |
 | 
			
		||||
 | 
			
		||||
### Swarm service commands
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ available on the volume where `/var/lib/docker` is mounted.
 | 
			
		|||
## Display Docker system information
 | 
			
		||||
 | 
			
		||||
Here is a sample output for a daemon running on Ubuntu, using the overlay
 | 
			
		||||
storage driver and a node that is part of a 2 node Swarm cluster:
 | 
			
		||||
storage driver and a node that is part of a 2 node swarm cluster:
 | 
			
		||||
 | 
			
		||||
    $ docker -D info
 | 
			
		||||
    Containers: 14
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,32 +0,0 @@
 | 
			
		|||
<!--[metadata]>
 | 
			
		||||
+++
 | 
			
		||||
title = "node accept"
 | 
			
		||||
description = "The node accept command description and usage"
 | 
			
		||||
keywords = ["node, accept"]
 | 
			
		||||
[menu.main]
 | 
			
		||||
parent = "smn_cli"
 | 
			
		||||
+++
 | 
			
		||||
<![end-metadata]-->
 | 
			
		||||
 | 
			
		||||
# node accept
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
Usage:  docker node accept NODE [NODE...]
 | 
			
		||||
 | 
			
		||||
Accept a node in the swarm
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
      --help   Print usage
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Accept a node into the swarm. This command targets a docker engine that is a manager in the swarm cluster.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ docker node accept <node name>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Related information
 | 
			
		||||
 | 
			
		||||
* [node promote](node_promote.md)
 | 
			
		||||
* [node demote](node_demote.md)
 | 
			
		||||
| 
						 | 
				
			
			@ -29,5 +29,4 @@ $ docker node demote <node name>
 | 
			
		|||
 | 
			
		||||
## Related information
 | 
			
		||||
 | 
			
		||||
* [node accept](node_accept.md)
 | 
			
		||||
* [node promote](node_promote.md)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,7 +41,6 @@ Example output:
 | 
			
		|||
        "UpdatedAt": "2016-06-16T22:52:45.230878043Z",
 | 
			
		||||
        "Spec": {
 | 
			
		||||
            "Role": "manager",
 | 
			
		||||
            "Membership": "accepted",
 | 
			
		||||
            "Availability": "active"
 | 
			
		||||
        },
 | 
			
		||||
        "Description": {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,10 +30,10 @@ Lists all the nodes that the Docker Swarm manager knows about. You can filter us
 | 
			
		|||
Example output:
 | 
			
		||||
 | 
			
		||||
    $ docker node ls
 | 
			
		||||
    ID                           HOSTNAME        MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS  LEADER
 | 
			
		||||
    1bcef6utixb0l0ca7gxuivsj0    swarm-worker2   Accepted    Ready   Active
 | 
			
		||||
    38ciaotwjuritcdtn9npbnkuz    swarm-worker1   Accepted    Ready   Active
 | 
			
		||||
    e216jshn25ckzbvmwlnh5jr3g *  swarm-manager1  Accepted    Ready   Active        Reachable       Yes
 | 
			
		||||
    ID                           HOSTNAME        STATUS  AVAILABILITY  MANAGER STATUS
 | 
			
		||||
    1bcef6utixb0l0ca7gxuivsj0    swarm-worker2   Ready   Active
 | 
			
		||||
    38ciaotwjuritcdtn9npbnkuz    swarm-worker1   Ready   Active
 | 
			
		||||
    e216jshn25ckzbvmwlnh5jr3g *  swarm-manager1  Ready   Active        Leader
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Filtering
 | 
			
		||||
| 
						 | 
				
			
			@ -54,16 +54,16 @@ The `name` filter matches on all or part of a node name.
 | 
			
		|||
The following filter matches the node with a name equal to `swarm-master` string.
 | 
			
		||||
 | 
			
		||||
    $ docker node ls -f name=swarm-manager1
 | 
			
		||||
    ID                           HOSTNAME        MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS  LEADER
 | 
			
		||||
    e216jshn25ckzbvmwlnh5jr3g *  swarm-manager1  Accepted    Ready   Active        Reachable       Yes
 | 
			
		||||
    ID                           HOSTNAME        STATUS  AVAILABILITY  MANAGER STATUS
 | 
			
		||||
    e216jshn25ckzbvmwlnh5jr3g *  swarm-manager1  Ready   Active        Leader
 | 
			
		||||
 | 
			
		||||
### id
 | 
			
		||||
 | 
			
		||||
The `id` filter matches all or part of a node's id.
 | 
			
		||||
 | 
			
		||||
    $ docker node ls -f id=1
 | 
			
		||||
    ID                         HOSTNAME       MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS  LEADER
 | 
			
		||||
    1bcef6utixb0l0ca7gxuivsj0  swarm-worker2  Accepted    Ready   Active
 | 
			
		||||
    ID                         HOSTNAME       STATUS  AVAILABILITY  MANAGER STATUS
 | 
			
		||||
    1bcef6utixb0l0ca7gxuivsj0  swarm-worker2  Ready   Active
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### label
 | 
			
		||||
| 
						 | 
				
			
			@ -75,8 +75,8 @@ The following filter matches nodes with the `usage` label regardless of its valu
 | 
			
		|||
 | 
			
		||||
```bash
 | 
			
		||||
$ docker node ls -f "label=foo"
 | 
			
		||||
ID                         HOSTNAME       MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS  LEADER
 | 
			
		||||
1bcef6utixb0l0ca7gxuivsj0  swarm-worker2  Accepted    Ready   Active
 | 
			
		||||
ID                         HOSTNAME       STATUS  AVAILABILITY  MANAGER STATUS
 | 
			
		||||
1bcef6utixb0l0ca7gxuivsj0  swarm-worker2  Ready   Active
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,5 +28,4 @@ $ docker node promote <node name>
 | 
			
		|||
 | 
			
		||||
## Related information
 | 
			
		||||
 | 
			
		||||
* [node accept](node_accept.md)
 | 
			
		||||
* [node demote](node_demote.md)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,14 +23,13 @@ Options:
 | 
			
		|||
      --help   Print usage
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Removes specified nodes from a swarm. Rejects nodes with `Pending`
 | 
			
		||||
membership from the swarm.
 | 
			
		||||
Removes specified nodes from a swarm.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Example output:
 | 
			
		||||
 | 
			
		||||
    $ docker node rm swarm-node-02
 | 
			
		||||
    Node swarm-node-02 removed from Swarm
 | 
			
		||||
    Node swarm-node-02 removed from swarm
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Related information
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,7 +21,6 @@ Options:
 | 
			
		|||
      --help                  Print usage
 | 
			
		||||
      --label-add value       Add or update a node label (key=value) (default [])
 | 
			
		||||
      --label-rm value        Remove a node label if exists (default [])
 | 
			
		||||
      --membership string     Membership of the node (accepted/rejected)
 | 
			
		||||
      --role string           Role of the node (worker/manager)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,7 +31,7 @@ Options:
 | 
			
		|||
      --name string                  Service name
 | 
			
		||||
      --network value                Network attachments (default [])
 | 
			
		||||
  -p, --publish value                Publish a port as a node port (default [])
 | 
			
		||||
      --registry-auth                Send registry authentication details to Swarm agents
 | 
			
		||||
      --registry-auth                Send registry authentication details to swarm agents
 | 
			
		||||
      --replicas value               Number of tasks (default none)
 | 
			
		||||
      --reserve-cpu value            Reserve CPUs (default 0.000)
 | 
			
		||||
      --reserve-memory value         Reserve Memory (default 0 B)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ Options:
 | 
			
		|||
      --network-rm value             Remove a network by name (default [])
 | 
			
		||||
      --publish-add value            Add or update a published port (default [])
 | 
			
		||||
      --publish-rm value             Remove a published port by its target port (default [])
 | 
			
		||||
      --registry-auth                Send registry authentication details to Swarm agents
 | 
			
		||||
      --registry-auth                Send registry authentication details to swarm agents
 | 
			
		||||
      --replicas value               Number of tasks (default none)
 | 
			
		||||
      --reserve-cpu value            Reserve CPUs (default 0.000)
 | 
			
		||||
      --reserve-memory value         Reserve Memory (default 0 B)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,74 +14,43 @@ parent = "smn_cli"
 | 
			
		|||
```markdown
 | 
			
		||||
Usage:  docker swarm init [OPTIONS]
 | 
			
		||||
 | 
			
		||||
Initialize a Swarm
 | 
			
		||||
Initialize a swarm
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
      --auto-accept value               Auto acceptance policy (default worker)
 | 
			
		||||
      --cert-expiry duration            Validity period for node certificates (default 2160h0m0s)
 | 
			
		||||
      --dispatcher-heartbeat duration   Dispatcher heartbeat period (default 5s)
 | 
			
		||||
      --external-ca value               Specifications of one or more certificate signing endpoints
 | 
			
		||||
      --force-new-cluster               Force create a new cluster from current state.
 | 
			
		||||
      --help                            Print usage
 | 
			
		||||
      --listen-addr value               Listen address (default 0.0.0.0:2377)
 | 
			
		||||
      --secret string                   Set secret value needed to accept nodes into cluster
 | 
			
		||||
      --task-history-limit int          Task history retention limit (default 10)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Initialize a Swarm cluster. The docker engine targeted by this command becomes a manager
 | 
			
		||||
in the newly created one node Swarm cluster.
 | 
			
		||||
Initialize a swarm cluster. The docker engine targeted by this command becomes a manager
 | 
			
		||||
in the newly created one node swarm cluster.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ docker swarm init --listen-addr 192.168.99.121:2377
 | 
			
		||||
No --secret provided. Generated random secret:
 | 
			
		||||
    4ao565v9jsuogtq5t8s379ulb
 | 
			
		||||
 | 
			
		||||
Swarm initialized: current node (1ujecd0j9n3ro9i6628smdmth) is now a manager.
 | 
			
		||||
Swarm initialized: current node (bvz81updecsj6wjz393c09vti) is now a manager.
 | 
			
		||||
 | 
			
		||||
To add a worker to this swarm, run the following command:
 | 
			
		||||
    docker swarm join --secret 4ao565v9jsuogtq5t8s379ulb \
 | 
			
		||||
    --ca-hash sha256:07ce22bd1a7619f2adc0d63bd110479a170e7c4e69df05b67a1aa2705c88ef09 \
 | 
			
		||||
    192.168.99.121:2377
 | 
			
		||||
$ docker node ls
 | 
			
		||||
ID                           HOSTNAME  MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS          LEADER
 | 
			
		||||
1ujecd0j9n3ro9i6628smdmth *  manager1  Accepted    Ready   Active        Reachable               Yes
 | 
			
		||||
    docker swarm join \
 | 
			
		||||
    --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx \
 | 
			
		||||
    172.17.0.2:2377
 | 
			
		||||
 | 
			
		||||
To add a manager to this swarm, run the following command:
 | 
			
		||||
    docker swarm join \
 | 
			
		||||
    --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 \
 | 
			
		||||
    172.17.0.2:2377
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
If a secret for joining new nodes is not provided with `--secret`, `docker swarm init` will
 | 
			
		||||
generate a random one and print it to the terminal (as seen in the example above). To initialize
 | 
			
		||||
a swarm with no secret, use `--secret ""`.
 | 
			
		||||
`docker swarm init` generates two random tokens, a worker token and a manager token. When you join
 | 
			
		||||
a new node to the swarm, the node joins as a worker or manager node based upon the token you pass
 | 
			
		||||
to [swarm join](swarm_join.md).
 | 
			
		||||
 | 
			
		||||
### `--auto-accept value`
 | 
			
		||||
 | 
			
		||||
This flag controls node acceptance into the cluster. By default, `worker` nodes are
 | 
			
		||||
automatically accepted by the cluster. This can be changed by specifying what kinds of nodes
 | 
			
		||||
can be auto-accepted into the cluster. If auto-accept is not turned on, then
 | 
			
		||||
[node accept](node_accept.md) can be used to explicitly accept a node into the cluster.
 | 
			
		||||
 | 
			
		||||
For example, the following initializes a cluster with auto-acceptance of workers, but not managers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ docker swarm init --listen-addr 192.168.99.121:2377 --auto-accept worker
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
It is possible to pass a comma-separated list of node types. The following initializes a cluster
 | 
			
		||||
with auto-acceptance of both `worker` and `manager` nodes
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ docker swarm init --listen-addr 192.168.99.121:2377 --auto-accept worker,manager
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
To disable auto acceptance, use the `none` option. Note that this option cannot
 | 
			
		||||
be combined with other values. When disabling auto acceptance, nodes must be
 | 
			
		||||
manually accepted or rejected using `docker node accept` or `docker node rm`.
 | 
			
		||||
 | 
			
		||||
The following example enables swarm mode with auto acceptance disabled:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ docker swarm init --listen-addr 192.168.99.121:2377 --auto-accept none
 | 
			
		||||
```
 | 
			
		||||
After you create the swarm, you can display or rotate the token using
 | 
			
		||||
[swarm join-token](swarm_join_token.md).
 | 
			
		||||
 | 
			
		||||
### `--cert-expiry`
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -105,11 +74,7 @@ This flag forces an existing node that was part of a quorum that was lost to res
 | 
			
		|||
 | 
			
		||||
### `--listen-addr value`
 | 
			
		||||
 | 
			
		||||
The node listens for inbound Swarm manager traffic on this IP:PORT
 | 
			
		||||
 | 
			
		||||
### `--secret string`
 | 
			
		||||
 | 
			
		||||
Secret value needed to accept nodes into the Swarm
 | 
			
		||||
The node listens for inbound swarm manager traffic on this IP:PORT
 | 
			
		||||
 | 
			
		||||
### `--task-history-limit`
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -120,5 +85,5 @@ This flag sets up task history retention limit.
 | 
			
		|||
* [swarm join](swarm_join.md)
 | 
			
		||||
* [swarm leave](swarm_leave.md)
 | 
			
		||||
* [swarm update](swarm_update.md)
 | 
			
		||||
* [node accept](node_accept.md)
 | 
			
		||||
* [swarm join-token](swarm_join_token.md)
 | 
			
		||||
* [node rm](node_rm.md)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,55 +14,54 @@ parent = "smn_cli"
 | 
			
		|||
```markdown
 | 
			
		||||
Usage:  docker swarm join [OPTIONS] HOST:PORT
 | 
			
		||||
 | 
			
		||||
Join a Swarm as a node and/or manager
 | 
			
		||||
Join a swarm as a node and/or manager
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
      --ca-hash string      Hash of the Root Certificate Authority certificate used for trusted join
 | 
			
		||||
      --help                Print usage
 | 
			
		||||
      --listen-addr value   Listen address (default 0.0.0.0:2377)
 | 
			
		||||
      --manager             Try joining as a manager.
 | 
			
		||||
      --secret string       Secret for node acceptance
 | 
			
		||||
      --token string        Token for entry into the swarm
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Join a node to a Swarm cluster. If the `--manager` flag is specified, the docker engine
 | 
			
		||||
targeted by this command becomes a `manager`. If it is not specified, it becomes a `worker`.
 | 
			
		||||
Join a node to a swarm. The node joins as a manager node or worker node based upon the token you
 | 
			
		||||
pass with the `--token` flag. If you pass a manager token, the node joins as a manager. If you
 | 
			
		||||
pass a worker token, the node joins as a worker.
 | 
			
		||||
 | 
			
		||||
### Join a node to swarm as a manager
 | 
			
		||||
 | 
			
		||||
The example below demonstrates joining a manager node using a manager token.
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ docker swarm join --secret 4ao565v9jsuogtq5t8s379ulb --manager --listen-addr 192.168.99.122:2377 192.168.99.121:2377
 | 
			
		||||
This node joined a Swarm as a manager.
 | 
			
		||||
$ docker swarm join --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 --listen-addr 192.168.99.122:2377 192.168.99.121:2377
 | 
			
		||||
This node joined a swarm as a manager.
 | 
			
		||||
$ docker node ls
 | 
			
		||||
ID                           HOSTNAME  MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS         LEADER
 | 
			
		||||
dkp8vy1dq1kxleu9g4u78tlag *  manager2  Accepted    Ready   Active        Reachable
 | 
			
		||||
dvfxp4zseq4s0rih1selh0d20    manager1  Accepted    Ready   Active        Reachable              Yes
 | 
			
		||||
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
 | 
			
		||||
dkp8vy1dq1kxleu9g4u78tlag *  manager2  Ready   Active        Reachable
 | 
			
		||||
dvfxp4zseq4s0rih1selh0d20    manager1  Ready   Active        Leader
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
A cluster should only have 3-7 managers at most, because a majority of managers must be available
 | 
			
		||||
for the cluster to function. Nodes that aren't meant to participate in this management quorum
 | 
			
		||||
should join as workers instead. Managers should be stable hosts that have static IP addresses.
 | 
			
		||||
 | 
			
		||||
### Join a node to swarm as a worker
 | 
			
		||||
 | 
			
		||||
The example below demonstrates joining a worker node using a worker token.
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ docker swarm join --secret 4ao565v9jsuogtq5t8s379ulb --listen-addr 192.168.99.123:2377 192.168.99.121:2377
 | 
			
		||||
This node joined a Swarm as a worker.
 | 
			
		||||
$ docker swarm join --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx --listen-addr 192.168.99.123:2377 192.168.99.121:2377
 | 
			
		||||
This node joined a swarm as a worker.
 | 
			
		||||
$ docker node ls
 | 
			
		||||
ID                           HOSTNAME  MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS         LEADER
 | 
			
		||||
7ln70fl22uw2dvjn2ft53m3q5    worker2   Accepted    Ready   Active
 | 
			
		||||
dkp8vy1dq1kxleu9g4u78tlag    worker1   Accepted    Ready   Active        Reachable
 | 
			
		||||
dvfxp4zseq4s0rih1selh0d20 *  manager1  Accepted    Ready   Active        Reachable              Yes
 | 
			
		||||
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
 | 
			
		||||
7ln70fl22uw2dvjn2ft53m3q5    worker2   Ready   Active
 | 
			
		||||
dkp8vy1dq1kxleu9g4u78tlag    worker1   Ready   Active        Reachable
 | 
			
		||||
dvfxp4zseq4s0rih1selh0d20 *  manager1  Ready   Active        Leader
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### `--ca-hash`
 | 
			
		||||
 | 
			
		||||
Hash of the Root Certificate Authority certificate used for trusted join.
 | 
			
		||||
 | 
			
		||||
### `--listen-addr value`
 | 
			
		||||
 | 
			
		||||
The node listens for inbound Swarm manager traffic on this IP:PORT
 | 
			
		||||
The node listens for inbound swarm manager traffic on this IP:PORT
 | 
			
		||||
 | 
			
		||||
### `--manager`
 | 
			
		||||
 | 
			
		||||
Joins the node as a manager
 | 
			
		||||
 | 
			
		||||
### `--secret string`
 | 
			
		||||
### `--token string`
 | 
			
		||||
 | 
			
		||||
Secret value required for nodes to join the swarm
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,76 @@
 | 
			
		|||
<!--[metadata]>
 | 
			
		||||
+++
 | 
			
		||||
title = "swarm join-token"
 | 
			
		||||
description = "The swarm join-token command description and usage"
 | 
			
		||||
keywords = ["swarm, join-token"]
 | 
			
		||||
advisory = "rc"
 | 
			
		||||
[menu.main]
 | 
			
		||||
parent = "smn_cli"
 | 
			
		||||
+++
 | 
			
		||||
<![end-metadata]-->
 | 
			
		||||
 | 
			
		||||
# swarm join-token
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
Usage:	docker swarm join-token [--rotate] (worker|manager)
 | 
			
		||||
 | 
			
		||||
Manage join tokens
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
      --help     Print usage
 | 
			
		||||
  -q, --quiet    Only display token
 | 
			
		||||
      --rotate   Rotate join token
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Join tokens are secrets that determine whether or not a node will join the swarm as a manager node
 | 
			
		||||
or a worker node. You pass the token using the `--token flag` when you run
 | 
			
		||||
[swarm join](swarm_join.md). You can access the current tokens or rotate the tokens using
 | 
			
		||||
`swarm join-token`.
 | 
			
		||||
 | 
			
		||||
Run with only a single `worker` or `manager` argument, it will print a command for joining a new
 | 
			
		||||
node to the swarm, including the necessary token:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ docker swarm join-token worker
 | 
			
		||||
To add a worker to this swarm, run the following command:
 | 
			
		||||
    docker swarm join \
 | 
			
		||||
    --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx \
 | 
			
		||||
    172.17.0.2:2377
 | 
			
		||||
 | 
			
		||||
$ docker swarm join-token manager
 | 
			
		||||
To add a manager to this swarm, run the following command:
 | 
			
		||||
    docker swarm join \
 | 
			
		||||
    --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 \
 | 
			
		||||
    172.17.0.2:2377
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Use the `--rotate` flag to generate a new join token for the specified role:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ docker swarm join-token --rotate worker
 | 
			
		||||
To add a worker to this swarm, run the following command:
 | 
			
		||||
    docker swarm join \
 | 
			
		||||
    --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-b30ljddcqhef9b9v4rs7mel7t \
 | 
			
		||||
    172.17.0.2:2377
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
After using `--rotate`, only the new token will be valid for joining with the specified role.
 | 
			
		||||
 | 
			
		||||
The `-q` (or `--quiet`) flag only prints the token:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ docker swarm join-token -q worker
 | 
			
		||||
SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-b30ljddcqhef9b9v4rs7mel7t
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### `--rotate`
 | 
			
		||||
 | 
			
		||||
Update the join token for a specified role with a new token and print the token.
 | 
			
		||||
 | 
			
		||||
### `--quiet`
 | 
			
		||||
 | 
			
		||||
Only print the token. Do not print a complete command for joining.
 | 
			
		||||
 | 
			
		||||
## Related information
 | 
			
		||||
 | 
			
		||||
* [swarm join](swarm_join.md)
 | 
			
		||||
| 
						 | 
				
			
			@ -14,7 +14,7 @@ parent = "smn_cli"
 | 
			
		|||
```markdown
 | 
			
		||||
Usage:  docker swarm leave [OPTIONS]
 | 
			
		||||
 | 
			
		||||
Leave a Swarm
 | 
			
		||||
Leave a swarm
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
      --force   Force leave ignoring warnings.
 | 
			
		||||
| 
						 | 
				
			
			@ -26,10 +26,10 @@ This command causes the node to leave the swarm.
 | 
			
		|||
On a manager node:
 | 
			
		||||
```bash
 | 
			
		||||
$ docker node ls
 | 
			
		||||
ID                           HOSTNAME  MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS         LEADER
 | 
			
		||||
7ln70fl22uw2dvjn2ft53m3q5    worker2   Accepted    Ready   Active
 | 
			
		||||
dkp8vy1dq1kxleu9g4u78tlag    worker1   Accepted    Ready   Active        Reachable
 | 
			
		||||
dvfxp4zseq4s0rih1selh0d20 *  manager1  Accepted    Ready   Active        Reachable              Yes
 | 
			
		||||
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
 | 
			
		||||
7ln70fl22uw2dvjn2ft53m3q5    worker2   Ready   Active
 | 
			
		||||
dkp8vy1dq1kxleu9g4u78tlag    worker1   Ready   Active        Reachable
 | 
			
		||||
dvfxp4zseq4s0rih1selh0d20 *  manager1  Ready   Active        Leader
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
On a worker node:
 | 
			
		||||
| 
						 | 
				
			
			@ -41,10 +41,10 @@ Node left the default swarm.
 | 
			
		|||
On a manager node:
 | 
			
		||||
```bash
 | 
			
		||||
$ docker node ls
 | 
			
		||||
ID                           HOSTNAME  MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS         LEADER
 | 
			
		||||
7ln70fl22uw2dvjn2ft53m3q5    worker2   Accepted    Down    Active
 | 
			
		||||
dkp8vy1dq1kxleu9g4u78tlag    worker1   Accepted    Ready   Active        Reachable
 | 
			
		||||
dvfxp4zseq4s0rih1selh0d20 *  manager1  Accepted    Ready   Active        Reachable              Yes
 | 
			
		||||
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
 | 
			
		||||
7ln70fl22uw2dvjn2ft53m3q5    worker2   Down    Active
 | 
			
		||||
dkp8vy1dq1kxleu9g4u78tlag    worker1   Ready   Active        Reachable
 | 
			
		||||
dvfxp4zseq4s0rih1selh0d20 *  manager1  Ready   Active        Leader
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Related information
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,23 +14,21 @@ parent = "smn_cli"
 | 
			
		|||
```markdown
 | 
			
		||||
Usage:  docker swarm update [OPTIONS]
 | 
			
		||||
 | 
			
		||||
Update the Swarm
 | 
			
		||||
Update the swarm
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
      --auto-accept value               Auto acceptance policy (worker, manager or none)
 | 
			
		||||
      --cert-expiry duration            Validity period for node certificates (default 2160h0m0s)
 | 
			
		||||
      --dispatcher-heartbeat duration   Dispatcher heartbeat period (default 5s)
 | 
			
		||||
      --external-ca value               Specifications of one or more certificate signing endpoints
 | 
			
		||||
      --help                            Print usage
 | 
			
		||||
      --secret string                   Set secret value needed to accept nodes into cluster
 | 
			
		||||
      --task-history-limit int          Task history retention limit (default 10)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Updates a Swarm cluster with new parameter values. This command must target a manager node.
 | 
			
		||||
Updates a swarm cluster with new parameter values. This command must target a manager node.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ docker swarm update --auto-accept manager
 | 
			
		||||
$ docker swarm update --cert-expirty 4000h0m0s
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Related information
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue