`.
-## version 2.2.2 (30 August 2017)
+## version 2.2.2
+
+2017-08-30
### Bug fixes
@@ -820,7 +876,9 @@ for volumes.
include `external: true`, otherwise the deployment fails with the error
`unable to inspect secret`.
-## Version 2.2.0 (16 August 2017)
+## Version 2.2.0
+
+2017-08-16
### New features
diff --git a/ee/ucp/ucp-architecture.md b/ee/ucp/ucp-architecture.md
index 2d4f981269..a662831cca 100644
--- a/ee/ucp/ucp-architecture.md
+++ b/ee/ucp/ucp-architecture.md
@@ -68,8 +68,8 @@ on a node depend on whether the node is a manager or a worker.
Internally, UCP uses the following components:
-* Calico 3.0.8
-* Kubernetes 1.8.15
+* Calico v3.2.3
+* Kubernetes v1.11.5
### UCP components in manager nodes
diff --git a/engine/api/latest/index.html b/engine/api/latest/index.html
index 408ac7a573..c3db336aee 100644
--- a/engine/api/latest/index.html
+++ b/engine/api/latest/index.html
@@ -1,6 +1,6 @@
---
---
-
+
Redirecting to the latest version of the Docker Engine API reference.
\ No newline at end of file
diff --git a/engine/reference/commandline/README.md b/engine/reference/commandline/README.md
index 442020068a..244a8ba282 100644
--- a/engine/reference/commandline/README.md
+++ b/engine/reference/commandline/README.md
@@ -21,7 +21,7 @@ The output files are composed from two sources:
# Updating the YAML files
The process for generating the YAML files is still in flux. Check with
-@thajestah or @frenchben. Be sure to generate the YAML files with the correct
+@thaJeztah. Be sure to generate the YAML files with the correct
branch of `docker/docker` checked out (probably not `master`).
After generating the YAML files, replace the YAML files in
diff --git a/engine/reference/commandline/attach.md b/engine/reference/commandline/attach.md
index 6b1076c5c8..76b175e7fd 100644
--- a/engine/reference/commandline/attach.md
+++ b/engine/reference/commandline/attach.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_attach
title: docker attach
+redirect_from:
+ - /edge/engine/reference/commandline/attach/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
-
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/build.md b/engine/reference/commandline/build.md
index b1b71c7cdc..3f9b5c761a 100644
--- a/engine/reference/commandline/build.md
+++ b/engine/reference/commandline/build.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_build
title: docker build
+redirect_from:
+ - /edge/engine/reference/commandline/build/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/checkpoint.md b/engine/reference/commandline/checkpoint.md
index 2b22f68a31..b31b7cb9fc 100644
--- a/engine/reference/commandline/checkpoint.md
+++ b/engine/reference/commandline/checkpoint.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_checkpoint
title: docker checkpoint
+redirect_from:
+ - /edge/engine/reference/commandline/checkpoint/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/checkpoint_create.md b/engine/reference/commandline/checkpoint_create.md
index 465c8752e1..7c415a905a 100644
--- a/engine/reference/commandline/checkpoint_create.md
+++ b/engine/reference/commandline/checkpoint_create.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_checkpoint_create
title: docker checkpoint create
+redirect_from:
+ - /edge/engine/reference/commandline/checkpoint_create/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/checkpoint_ls.md b/engine/reference/commandline/checkpoint_ls.md
index 803668d2bd..6317d9cbff 100644
--- a/engine/reference/commandline/checkpoint_ls.md
+++ b/engine/reference/commandline/checkpoint_ls.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_checkpoint_ls
title: docker checkpoint ls
+redirect_from:
+ - /edge/engine/reference/commandline/checkpoint_ls/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/checkpoint_rm.md b/engine/reference/commandline/checkpoint_rm.md
index 7edbaa5fde..f003cf9b33 100644
--- a/engine/reference/commandline/checkpoint_rm.md
+++ b/engine/reference/commandline/checkpoint_rm.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_checkpoint_rm
title: docker checkpoint rm
+redirect_from:
+ - /edge/engine/reference/commandline/checkpoint_rm/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/commit.md b/engine/reference/commandline/commit.md
index bf4d879b36..21235c409f 100644
--- a/engine/reference/commandline/commit.md
+++ b/engine/reference/commandline/commit.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_commit
title: docker commit
+redirect_from:
+ - /edge/engine/reference/commandline/commit/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/config.md b/engine/reference/commandline/config.md
index d9794c6616..3d7f3712ec 100644
--- a/engine/reference/commandline/config.md
+++ b/engine/reference/commandline/config.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_config
title: docker config
+redirect_from:
+ - /edge/engine/reference/commandline/config/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
## More info
diff --git a/engine/reference/commandline/config_create.md b/engine/reference/commandline/config_create.md
index 1d3963e325..0c44ae5605 100644
--- a/engine/reference/commandline/config_create.md
+++ b/engine/reference/commandline/config_create.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_config_create
title: docker config create
+redirect_from:
+ - /edge/engine/reference/commandline/config_create/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/config_inspect.md b/engine/reference/commandline/config_inspect.md
index a9da060913..1994739168 100644
--- a/engine/reference/commandline/config_inspect.md
+++ b/engine/reference/commandline/config_inspect.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_config_inspect
title: docker config inspect
+redirect_from:
+ - /edge/engine/reference/commandline/config_inspect/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/config_ls.md b/engine/reference/commandline/config_ls.md
index 33eb764c99..6773a4abfd 100644
--- a/engine/reference/commandline/config_ls.md
+++ b/engine/reference/commandline/config_ls.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_config_ls
title: docker config ls
+redirect_from:
+ - /edge/engine/reference/commandline/config_ls/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/config_rm.md b/engine/reference/commandline/config_rm.md
index 420e4decca..88617d9d36 100644
--- a/engine/reference/commandline/config_rm.md
+++ b/engine/reference/commandline/config_rm.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_config_rm
title: docker config rm
+redirect_from:
+ - /edge/engine/reference/commandline/config_rm/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container.md b/engine/reference/commandline/container.md
index 5ca93b1e7c..8804fd6921 100644
--- a/engine/reference/commandline/container.md
+++ b/engine/reference/commandline/container.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container
title: docker container
+redirect_from:
+ - /edge/engine/reference/commandline/container/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_attach.md b/engine/reference/commandline/container_attach.md
index 8020f15721..1c4af18e91 100644
--- a/engine/reference/commandline/container_attach.md
+++ b/engine/reference/commandline/container_attach.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_attach
title: docker container attach
+redirect_from:
+ - /edge/engine/reference/commandline/container_attach/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_commit.md b/engine/reference/commandline/container_commit.md
index fb56423bdf..dcb19e8c24 100644
--- a/engine/reference/commandline/container_commit.md
+++ b/engine/reference/commandline/container_commit.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_commit
title: docker container commit
+redirect_from:
+ - /edge/engine/reference/commandline/container_commit/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_cp.md b/engine/reference/commandline/container_cp.md
index 8a1a8c102d..bf6dec0d86 100644
--- a/engine/reference/commandline/container_cp.md
+++ b/engine/reference/commandline/container_cp.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_cp
title: docker container cp
+redirect_from:
+ - /edge/engine/reference/commandline/container_cp/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_create.md b/engine/reference/commandline/container_create.md
index 15da683f4a..7032c1b1bd 100644
--- a/engine/reference/commandline/container_create.md
+++ b/engine/reference/commandline/container_create.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_create
title: docker container create
+redirect_from:
+ - /edge/engine/reference/commandline/container_create/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_diff.md b/engine/reference/commandline/container_diff.md
index ec5a5d4c9c..3b205082ce 100644
--- a/engine/reference/commandline/container_diff.md
+++ b/engine/reference/commandline/container_diff.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_diff
title: docker container diff
+redirect_from:
+ - /edge/engine/reference/commandline/container_diff/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_exec.md b/engine/reference/commandline/container_exec.md
index b147e67e47..8d79a325aa 100644
--- a/engine/reference/commandline/container_exec.md
+++ b/engine/reference/commandline/container_exec.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_exec
title: docker container exec
+redirect_from:
+ - /edge/engine/reference/commandline/container_exec/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_export.md b/engine/reference/commandline/container_export.md
index 12eba3504e..3f809a496f 100644
--- a/engine/reference/commandline/container_export.md
+++ b/engine/reference/commandline/container_export.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_export
title: docker container export
+redirect_from:
+ - /edge/engine/reference/commandline/container_export/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_inspect.md b/engine/reference/commandline/container_inspect.md
index f55e2d11b6..6561a14977 100644
--- a/engine/reference/commandline/container_inspect.md
+++ b/engine/reference/commandline/container_inspect.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_inspect
title: docker container inspect
+redirect_from:
+ - /edge/engine/reference/commandline/container_inspect/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_kill.md b/engine/reference/commandline/container_kill.md
index f06495404d..a96448e216 100644
--- a/engine/reference/commandline/container_kill.md
+++ b/engine/reference/commandline/container_kill.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_kill
title: docker container kill
+redirect_from:
+ - /edge/engine/reference/commandline/container_kill/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_logs.md b/engine/reference/commandline/container_logs.md
index f9e27e89b9..8c358819a7 100644
--- a/engine/reference/commandline/container_logs.md
+++ b/engine/reference/commandline/container_logs.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_logs
title: docker container logs
+redirect_from:
+ - /edge/engine/reference/commandline/container_logs/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_ls.md b/engine/reference/commandline/container_ls.md
index ab144762ef..4b34f40f62 100644
--- a/engine/reference/commandline/container_ls.md
+++ b/engine/reference/commandline/container_ls.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_ls
title: docker container ls
+redirect_from:
+ - /edge/engine/reference/commandline/container_ls/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_pause.md b/engine/reference/commandline/container_pause.md
index 86451a95e4..21d1ad20e9 100644
--- a/engine/reference/commandline/container_pause.md
+++ b/engine/reference/commandline/container_pause.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_pause
title: docker container pause
+redirect_from:
+ - /edge/engine/reference/commandline/container_pause/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_port.md b/engine/reference/commandline/container_port.md
index 61e841bed4..bc77559bbd 100644
--- a/engine/reference/commandline/container_port.md
+++ b/engine/reference/commandline/container_port.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_port
title: docker container port
+redirect_from:
+ - /edge/engine/reference/commandline/container_port/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_prune.md b/engine/reference/commandline/container_prune.md
index 14c65b7eab..b1ae082f99 100644
--- a/engine/reference/commandline/container_prune.md
+++ b/engine/reference/commandline/container_prune.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_prune
title: docker container prune
+redirect_from:
+ - /edge/engine/reference/commandline/container_prune/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_rename.md b/engine/reference/commandline/container_rename.md
index 1b6bf6069b..a107497da5 100644
--- a/engine/reference/commandline/container_rename.md
+++ b/engine/reference/commandline/container_rename.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_rename
title: docker container rename
+redirect_from:
+ - /edge/engine/reference/commandline/container_rename/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_restart.md b/engine/reference/commandline/container_restart.md
index 1974b98820..6c1b117762 100644
--- a/engine/reference/commandline/container_restart.md
+++ b/engine/reference/commandline/container_restart.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_restart
title: docker container restart
+redirect_from:
+ - /edge/engine/reference/commandline/container_restart/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_rm.md b/engine/reference/commandline/container_rm.md
index ba46e5bbbb..e180edf83d 100644
--- a/engine/reference/commandline/container_rm.md
+++ b/engine/reference/commandline/container_rm.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_rm
title: docker container rm
+redirect_from:
+ - /edge/engine/reference/commandline/container_rm/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_run.md b/engine/reference/commandline/container_run.md
index c48003fb6f..a7feed5c3a 100644
--- a/engine/reference/commandline/container_run.md
+++ b/engine/reference/commandline/container_run.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_run
title: docker container run
+redirect_from:
+ - /edge/engine/reference/commandline/container_rm/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_start.md b/engine/reference/commandline/container_start.md
index ffcbbc6005..619b927f03 100644
--- a/engine/reference/commandline/container_start.md
+++ b/engine/reference/commandline/container_start.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_start
title: docker container start
+redirect_from:
+ - /edge/engine/reference/commandline/container_start/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_stats.md b/engine/reference/commandline/container_stats.md
index 5fe93e0069..aa4b9deba5 100644
--- a/engine/reference/commandline/container_stats.md
+++ b/engine/reference/commandline/container_stats.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_stats
title: docker container stats
+redirect_from:
+ - /edge/engine/reference/commandline/container_stats/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_stop.md b/engine/reference/commandline/container_stop.md
index 30c51e181e..6331bbb934 100644
--- a/engine/reference/commandline/container_stop.md
+++ b/engine/reference/commandline/container_stop.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_stop
title: docker container stop
+redirect_from:
+ - /edge/engine/reference/commandline/container_stop/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_top.md b/engine/reference/commandline/container_top.md
index 3e892b85ce..1ebefd9d6a 100644
--- a/engine/reference/commandline/container_top.md
+++ b/engine/reference/commandline/container_top.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_top
title: docker container top
+redirect_from:
+ - /edge/engine/reference/commandline/container_top/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_unpause.md b/engine/reference/commandline/container_unpause.md
index b3433167a8..ab4d07fd4d 100644
--- a/engine/reference/commandline/container_unpause.md
+++ b/engine/reference/commandline/container_unpause.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_unpause
title: docker container unpause
+redirect_from:
+ - /edge/engine/reference/commandline/container_unpause/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_update.md b/engine/reference/commandline/container_update.md
index 4a1adb38ad..b285f75d04 100644
--- a/engine/reference/commandline/container_update.md
+++ b/engine/reference/commandline/container_update.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_update
title: docker container update
+redirect_from:
+ - /edge/engine/reference/commandline/container_update/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/container_wait.md b/engine/reference/commandline/container_wait.md
index 8a04fdb86f..959f29fc1b 100644
--- a/engine/reference/commandline/container_wait.md
+++ b/engine/reference/commandline/container_wait.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_container_wait
title: docker container wait
+redirect_from:
+ - /edge/engine/reference/commandline/container_wait/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/cp.md b/engine/reference/commandline/cp.md
index 24fe321de0..3beea2d554 100644
--- a/engine/reference/commandline/cp.md
+++ b/engine/reference/commandline/cp.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_cp
title: docker cp
+redirect_from:
+ - /edge/engine/reference/commandline/cp/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/create.md b/engine/reference/commandline/create.md
index 44264fd7bd..8b85488c62 100644
--- a/engine/reference/commandline/create.md
+++ b/engine/reference/commandline/create.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_create
title: docker create
+redirect_from:
+ - /edge/engine/reference/commandline/create/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/deploy.md b/engine/reference/commandline/deploy.md
index e146686b0c..7ed86e2a59 100644
--- a/engine/reference/commandline/deploy.md
+++ b/engine/reference/commandline/deploy.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_deploy
title: docker deploy
+redirect_from:
+ - /edge/engine/reference/commandline/deploy/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/diff.md b/engine/reference/commandline/diff.md
index f16c3b9b40..a9162fcfc3 100644
--- a/engine/reference/commandline/diff.md
+++ b/engine/reference/commandline/diff.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_diff
title: docker diff
+redirect_from:
+ - /edge/engine/reference/commandline/diff/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/docker.md b/engine/reference/commandline/docker.md
index 34c6098340..9dc9ee773e 100644
--- a/engine/reference/commandline/docker.md
+++ b/engine/reference/commandline/docker.md
@@ -3,7 +3,8 @@ datafolder: engine-cli
datafile: docker
title: docker
redirect_from:
-- /engine/reference/commandline/
+ - /engine/reference/commandline/
+ - /edge/engine/reference/commandline/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/edge/engine/reference/commandline/ps.md b/engine/reference/commandline/engine.md
similarity index 66%
rename from edge/engine/reference/commandline/ps.md
rename to engine/reference/commandline/engine.md
index c6addac8ff..e28feb22ef 100644
--- a/edge/engine/reference/commandline/ps.md
+++ b/engine/reference/commandline/engine.md
@@ -1,8 +1,9 @@
---
-datafolder: engine-cli-edge
-datafile: docker_ps
-title: docker ps
+datafolder: engine-cli
+datafile: docker_engine
+title: docker engine
---
+
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
+
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/edge/engine/reference/commandline/rm.md b/engine/reference/commandline/engine_activate.md
similarity index 66%
rename from edge/engine/reference/commandline/rm.md
rename to engine/reference/commandline/engine_activate.md
index 4ce0c98d46..bc4a8cc9f6 100644
--- a/edge/engine/reference/commandline/rm.md
+++ b/engine/reference/commandline/engine_activate.md
@@ -1,8 +1,9 @@
---
-datafolder: engine-cli-edge
-datafile: docker_rm
-title: docker rm
+datafolder: engine-cli
+datafile: docker_engine_activate
+title: docker engine activate
---
+
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
+
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/edge/engine/reference/commandline/cp.md b/engine/reference/commandline/engine_check.md
similarity index 66%
rename from edge/engine/reference/commandline/cp.md
rename to engine/reference/commandline/engine_check.md
index 97b7df8667..e8de2c9dfb 100644
--- a/edge/engine/reference/commandline/cp.md
+++ b/engine/reference/commandline/engine_check.md
@@ -1,8 +1,9 @@
---
-datafolder: engine-cli-edge
-datafile: docker_cp
-title: docker cp
+datafolder: engine-cli
+datafile: docker_engine_check
+title: docker engine check
---
+
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
+
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/edge/engine/reference/commandline/tag.md b/engine/reference/commandline/engine_update.md
similarity index 66%
rename from edge/engine/reference/commandline/tag.md
rename to engine/reference/commandline/engine_update.md
index aaff464367..79edccf5da 100644
--- a/edge/engine/reference/commandline/tag.md
+++ b/engine/reference/commandline/engine_update.md
@@ -1,7 +1,7 @@
---
-datafolder: engine-cli-edge
-datafile: docker_tag
-title: docker tag
+datafolder: engine-cli
+datafile: docker_engine_update
+title: docker engine update
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/events.md b/engine/reference/commandline/events.md
index 20d5110873..a63936798b 100644
--- a/engine/reference/commandline/events.md
+++ b/engine/reference/commandline/events.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_events
title: docker events
+redirect_from:
+ - /edge/engine/reference/commandline/events/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/exec.md b/engine/reference/commandline/exec.md
index 61c9cfc52b..b6261918f5 100644
--- a/engine/reference/commandline/exec.md
+++ b/engine/reference/commandline/exec.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_exec
title: docker exec
+redirect_from:
+ - /edge/engine/reference/commandline/exec/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/export.md b/engine/reference/commandline/export.md
index de3478e6e3..ca9e03589b 100644
--- a/engine/reference/commandline/export.md
+++ b/engine/reference/commandline/export.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_export
title: docker export
+redirect_from:
+ - /edge/engine/reference/commandline/export/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/history.md b/engine/reference/commandline/history.md
index b6ee3d2ab0..4f95279640 100644
--- a/engine/reference/commandline/history.md
+++ b/engine/reference/commandline/history.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_history
title: docker history
+redirect_from:
+ - /edge/engine/reference/commandline/history/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/image.md b/engine/reference/commandline/image.md
index c74bc2277c..28a85c9c9d 100644
--- a/engine/reference/commandline/image.md
+++ b/engine/reference/commandline/image.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_image
title: docker image
+redirect_from:
+ - /edge/engine/reference/commandline/image/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/image_build.md b/engine/reference/commandline/image_build.md
index ca8f518357..c9e1def920 100644
--- a/engine/reference/commandline/image_build.md
+++ b/engine/reference/commandline/image_build.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_image_build
title: docker image build
+redirect_from:
+ - /edge/engine/reference/commandline/image_build/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/image_history.md b/engine/reference/commandline/image_history.md
index 26d683d097..f09c533183 100644
--- a/engine/reference/commandline/image_history.md
+++ b/engine/reference/commandline/image_history.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_image_history
title: docker image history
+redirect_from:
+ - /edge/engine/reference/commandline/image_history/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/image_import.md b/engine/reference/commandline/image_import.md
index 9df7e69c0a..7455aab1c3 100644
--- a/engine/reference/commandline/image_import.md
+++ b/engine/reference/commandline/image_import.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_image_import
title: docker image import
+redirect_from:
+ - /edge/engine/reference/commandline/image_import/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/image_inspect.md b/engine/reference/commandline/image_inspect.md
index e22e0f4586..bf14b5b4c4 100644
--- a/engine/reference/commandline/image_inspect.md
+++ b/engine/reference/commandline/image_inspect.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_image_inspect
title: docker image inspect
+redirect_from:
+ - /edge/engine/reference/commandline/image_inspect/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/image_load.md b/engine/reference/commandline/image_load.md
index e0ba9e31f2..9ca03928d7 100644
--- a/engine/reference/commandline/image_load.md
+++ b/engine/reference/commandline/image_load.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_image_load
title: docker image load
+redirect_from:
+ - /edge/engine/reference/commandline/image_load/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/image_ls.md b/engine/reference/commandline/image_ls.md
index 8b1b077dba..7c8a3f9fdd 100644
--- a/engine/reference/commandline/image_ls.md
+++ b/engine/reference/commandline/image_ls.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_image_ls
title: docker image ls
+redirect_from:
+ - /edge/engine/reference/commandline/image_ls/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/image_prune.md b/engine/reference/commandline/image_prune.md
index 50906dd4a1..9464650cdd 100644
--- a/engine/reference/commandline/image_prune.md
+++ b/engine/reference/commandline/image_prune.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_image_prune
title: docker image prune
+redirect_from:
+ - /edge/engine/reference/commandline/image_prune/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/image_pull.md b/engine/reference/commandline/image_pull.md
index 5c4a04ced0..c6ffcb9c31 100644
--- a/engine/reference/commandline/image_pull.md
+++ b/engine/reference/commandline/image_pull.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_image_pull
title: docker image pull
+redirect_from:
+ - /edge/engine/reference/commandline/image_pull/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/image_push.md b/engine/reference/commandline/image_push.md
index 29986debe6..c26c88ec13 100644
--- a/engine/reference/commandline/image_push.md
+++ b/engine/reference/commandline/image_push.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_image_push
title: docker image push
+redirect_from:
+ - /edge/engine/reference/commandline/image_push/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/image_rm.md b/engine/reference/commandline/image_rm.md
index a5ddbe4089..688dda8e6d 100644
--- a/engine/reference/commandline/image_rm.md
+++ b/engine/reference/commandline/image_rm.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_image_rm
title: docker image rm
+redirect_from:
+ - /edge/engine/reference/commandline/image_rm/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/image_save.md b/engine/reference/commandline/image_save.md
index aac3202f69..f0eb444fcf 100644
--- a/engine/reference/commandline/image_save.md
+++ b/engine/reference/commandline/image_save.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_image_save
title: docker image save
+redirect_from:
+ - /edge/engine/reference/commandline/image_save/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/image_tag.md b/engine/reference/commandline/image_tag.md
index 620dcddf5c..41780aab32 100644
--- a/engine/reference/commandline/image_tag.md
+++ b/engine/reference/commandline/image_tag.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_image_tag
title: docker image tag
+redirect_from:
+ - /edge/engine/reference/commandline/image_tag/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/images.md b/engine/reference/commandline/images.md
index c697167639..7b52dcf2f3 100644
--- a/engine/reference/commandline/images.md
+++ b/engine/reference/commandline/images.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_images
title: docker images
+redirect_from:
+ - /edge/engine/reference/commandline/images/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/import.md b/engine/reference/commandline/import.md
index 505b847153..41b84984e9 100644
--- a/engine/reference/commandline/import.md
+++ b/engine/reference/commandline/import.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_import
title: docker import
+redirect_from:
+ - /edge/engine/reference/commandline/import/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/info.md b/engine/reference/commandline/info.md
index 0666d8c7ae..14d1732db3 100644
--- a/engine/reference/commandline/info.md
+++ b/engine/reference/commandline/info.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_info
title: docker info
+redirect_from:
+ - /edge/engine/reference/commandline/info/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
## Warnings about kernel support
diff --git a/engine/reference/commandline/inspect.md b/engine/reference/commandline/inspect.md
index 5a795764bf..7cf47b30de 100644
--- a/engine/reference/commandline/inspect.md
+++ b/engine/reference/commandline/inspect.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_inspect
title: docker inspect
+redirect_from:
+ - /edge/engine/reference/commandline/inspect/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/kill.md b/engine/reference/commandline/kill.md
index 756a13b2a0..ddb19d04f3 100644
--- a/engine/reference/commandline/kill.md
+++ b/engine/reference/commandline/kill.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_kill
title: docker kill
+redirect_from:
+ - /edge/engine/reference/commandline/kill/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/load.md b/engine/reference/commandline/load.md
index df9a37be43..3cd2552e0b 100644
--- a/engine/reference/commandline/load.md
+++ b/engine/reference/commandline/load.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_load
title: docker load
+redirect_from:
+ - /edge/engine/reference/commandline/load/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/login.md b/engine/reference/commandline/login.md
index 062b1cd605..77e8cb1081 100644
--- a/engine/reference/commandline/login.md
+++ b/engine/reference/commandline/login.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_login
title: docker login
+redirect_from:
+ - /edge/engine/reference/commandline/login/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/logout.md b/engine/reference/commandline/logout.md
index 15b29f00a8..45bd1439d4 100644
--- a/engine/reference/commandline/logout.md
+++ b/engine/reference/commandline/logout.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_logout
title: docker logout
+redirect_from:
+ - /edge/engine/reference/commandline/logout/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/logs.md b/engine/reference/commandline/logs.md
index e56721e6c3..7c732a81a6 100644
--- a/engine/reference/commandline/logs.md
+++ b/engine/reference/commandline/logs.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_logs
title: docker logs
+redirect_from:
+ - /edge/engine/reference/commandline/logs/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/manifest.md b/engine/reference/commandline/manifest.md
index 724c41ef7f..eddc4a797f 100644
--- a/engine/reference/commandline/manifest.md
+++ b/engine/reference/commandline/manifest.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_manifest
title: docker manifest
+redirect_from:
+ - /edge/engine/reference/commandline/manifest/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
-
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/manifest_annotate.md b/engine/reference/commandline/manifest_annotate.md
index 22ee38a8ff..95632bd709 100644
--- a/engine/reference/commandline/manifest_annotate.md
+++ b/engine/reference/commandline/manifest_annotate.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_manifest_annotate
title: docker manifest annotate
+redirect_from:
+ - /edge/engine/reference/commandline/manifest_annotate/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
-
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/manifest_create.md b/engine/reference/commandline/manifest_create.md
index e1b6871667..9ef3dfa0cd 100644
--- a/engine/reference/commandline/manifest_create.md
+++ b/engine/reference/commandline/manifest_create.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_manifest_create
title: docker manifest create
+redirect_from:
+ - /edge/engine/reference/commandline/manifest_create/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
-
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/manifest_inspect.md b/engine/reference/commandline/manifest_inspect.md
index 166a33ae1f..2ee0af7623 100644
--- a/engine/reference/commandline/manifest_inspect.md
+++ b/engine/reference/commandline/manifest_inspect.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_manifest_inspect
title: docker manifest inspect
+redirect_from:
+ - /edge/engine/reference/commandline/manifest_inspect/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
-
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/manifest_push.md b/engine/reference/commandline/manifest_push.md
index 641c965603..145af12dd8 100644
--- a/engine/reference/commandline/manifest_push.md
+++ b/engine/reference/commandline/manifest_push.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_manifest_push
title: docker manifest push
+redirect_from:
+ - /edge/engine/reference/commandline/manifest_push/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
-
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/network.md b/engine/reference/commandline/network.md
index 5e6fabf23e..e5c61e980c 100644
--- a/engine/reference/commandline/network.md
+++ b/engine/reference/commandline/network.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_network
title: docker network
+redirect_from:
+ - /edge/engine/reference/commandline/network/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/network_connect.md b/engine/reference/commandline/network_connect.md
index 86bbcf26eb..5ae1a21b40 100644
--- a/engine/reference/commandline/network_connect.md
+++ b/engine/reference/commandline/network_connect.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_network_connect
title: docker network connect
+redirect_from:
+ - /edge/engine/reference/commandline/network_connect/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/network_create.md b/engine/reference/commandline/network_create.md
index afb0411b72..1a0119b9de 100644
--- a/engine/reference/commandline/network_create.md
+++ b/engine/reference/commandline/network_create.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_network_create
title: docker network create
+redirect_from:
+ - /edge/engine/reference/commandline/network_create/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/network_disconnect.md b/engine/reference/commandline/network_disconnect.md
index 0b225020d7..19537829a6 100644
--- a/engine/reference/commandline/network_disconnect.md
+++ b/engine/reference/commandline/network_disconnect.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_network_disconnect
title: docker network disconnect
+redirect_from:
+ - /edge/engine/reference/commandline/network_disconnect/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/network_inspect.md b/engine/reference/commandline/network_inspect.md
index c3a6355962..7465e85c64 100644
--- a/engine/reference/commandline/network_inspect.md
+++ b/engine/reference/commandline/network_inspect.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_network_inspect
title: docker network inspect
+redirect_from:
+ - /edge/engine/reference/commandline/network_inspect/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/network_ls.md b/engine/reference/commandline/network_ls.md
index 3a8df0c16d..7eac24f04d 100644
--- a/engine/reference/commandline/network_ls.md
+++ b/engine/reference/commandline/network_ls.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_network_ls
title: docker network ls
+redirect_from:
+ - /edge/engine/reference/commandline/network_ls/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/network_prune.md b/engine/reference/commandline/network_prune.md
index fc9a2bf884..3154e6c69a 100644
--- a/engine/reference/commandline/network_prune.md
+++ b/engine/reference/commandline/network_prune.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_network_prune
title: docker network prune
+redirect_from:
+ - /edge/engine/reference/commandline/network_prune/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/network_rm.md b/engine/reference/commandline/network_rm.md
index f09acbfb08..b2e9bddbb8 100644
--- a/engine/reference/commandline/network_rm.md
+++ b/engine/reference/commandline/network_rm.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_network_rm
title: docker network rm
+redirect_from:
+ - /edge/engine/reference/commandline/network_rm/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/node.md b/engine/reference/commandline/node.md
index 68821f37e9..12f532d523 100644
--- a/engine/reference/commandline/node.md
+++ b/engine/reference/commandline/node.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_node
title: docker node
+redirect_from:
+ - /edge/engine/reference/commandline/node/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/node_demote.md b/engine/reference/commandline/node_demote.md
index dd72ace717..96880db934 100644
--- a/engine/reference/commandline/node_demote.md
+++ b/engine/reference/commandline/node_demote.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_node_demote
title: docker node demote
+redirect_from:
+ - /edge/engine/reference/commandline/node_demote/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/node_inspect.md b/engine/reference/commandline/node_inspect.md
index 1f5bf09d01..29d5c14147 100644
--- a/engine/reference/commandline/node_inspect.md
+++ b/engine/reference/commandline/node_inspect.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_node_inspect
title: docker node inspect
+redirect_from:
+ - /edge/engine/reference/commandline/node_inspect/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/node_ls.md b/engine/reference/commandline/node_ls.md
index d18eaedb22..ed94baf653 100644
--- a/engine/reference/commandline/node_ls.md
+++ b/engine/reference/commandline/node_ls.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_node_ls
title: docker node ls
+redirect_from:
+ - /edge/engine/reference/commandline/node_ls/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/node_promote.md b/engine/reference/commandline/node_promote.md
index 3521c2ddeb..bcaf158c72 100644
--- a/engine/reference/commandline/node_promote.md
+++ b/engine/reference/commandline/node_promote.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_node_promote
title: docker node promote
+redirect_from:
+ - /edge/engine/reference/commandline/node_promote/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/node_ps.md b/engine/reference/commandline/node_ps.md
index d83ad83e28..799dcf5c70 100644
--- a/engine/reference/commandline/node_ps.md
+++ b/engine/reference/commandline/node_ps.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_node_ps
title: docker node ps
+redirect_from:
+ - /edge/engine/reference/commandline/node_ps/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/node_rm.md b/engine/reference/commandline/node_rm.md
index 342c4a3e88..67974bd3c4 100644
--- a/engine/reference/commandline/node_rm.md
+++ b/engine/reference/commandline/node_rm.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_node_rm
title: docker node rm
+redirect_from:
+ - /edge/engine/reference/commandline/node_rm/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/node_update.md b/engine/reference/commandline/node_update.md
index 4401a54e53..2787b6d60b 100644
--- a/engine/reference/commandline/node_update.md
+++ b/engine/reference/commandline/node_update.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_node_update
title: docker node update
+redirect_from:
+ - /edge/engine/reference/commandline/node_update/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/pause.md b/engine/reference/commandline/pause.md
index 40115be5d3..b5ff42c913 100644
--- a/engine/reference/commandline/pause.md
+++ b/engine/reference/commandline/pause.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_pause
title: docker pause
+redirect_from:
+ - /edge/engine/reference/commandline/pause/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/plugin.md b/engine/reference/commandline/plugin.md
index 57d8bb7597..264d1758b5 100644
--- a/engine/reference/commandline/plugin.md
+++ b/engine/reference/commandline/plugin.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_plugin
title: docker plugin
+redirect_from:
+ - /edge/engine/reference/commandline/plugin/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/plugin_create.md b/engine/reference/commandline/plugin_create.md
index 35b15f8c3b..7118972cf0 100644
--- a/engine/reference/commandline/plugin_create.md
+++ b/engine/reference/commandline/plugin_create.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_plugin_create
title: docker plugin create
+redirect_from:
+ - /edge/engine/reference/commandline/plugin_create/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/plugin_disable.md b/engine/reference/commandline/plugin_disable.md
index d37cd5dd36..1f82d8fb9f 100644
--- a/engine/reference/commandline/plugin_disable.md
+++ b/engine/reference/commandline/plugin_disable.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_plugin_disable
title: docker plugin disable
+redirect_from:
+ - /edge/engine/reference/commandline/plugin_disable/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/plugin_enable.md b/engine/reference/commandline/plugin_enable.md
index 901755b0de..78d7c13f62 100644
--- a/engine/reference/commandline/plugin_enable.md
+++ b/engine/reference/commandline/plugin_enable.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_plugin_enable
title: docker plugin enable
+redirect_from:
+ - /edge/engine/reference/commandline/plugin_enable/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/plugin_inspect.md b/engine/reference/commandline/plugin_inspect.md
index 00102a5f15..7454b99b37 100644
--- a/engine/reference/commandline/plugin_inspect.md
+++ b/engine/reference/commandline/plugin_inspect.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_plugin_inspect
title: docker plugin inspect
+redirect_from:
+ - /edge/engine/reference/commandline/plugin_inspect/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/plugin_install.md b/engine/reference/commandline/plugin_install.md
index 29d9b554b5..014ad83de2 100644
--- a/engine/reference/commandline/plugin_install.md
+++ b/engine/reference/commandline/plugin_install.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_plugin_install
title: docker plugin install
+redirect_from:
+ - /edge/engine/reference/commandline/plugin_install/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/plugin_ls.md b/engine/reference/commandline/plugin_ls.md
index 869f4d7d96..4b27f4202d 100644
--- a/engine/reference/commandline/plugin_ls.md
+++ b/engine/reference/commandline/plugin_ls.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_plugin_ls
title: docker plugin ls
+redirect_from:
+ - /edge/engine/reference/commandline/plugin_ls/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/plugin_push.md b/engine/reference/commandline/plugin_push.md
index 3f0ed4ab4e..79bea124c0 100644
--- a/engine/reference/commandline/plugin_push.md
+++ b/engine/reference/commandline/plugin_push.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_plugin_push
title: docker plugin push
+redirect_from:
+ - /edge/engine/reference/commandline/plugin_push/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/plugin_rm.md b/engine/reference/commandline/plugin_rm.md
index 29bdb0beef..357195fdd4 100644
--- a/engine/reference/commandline/plugin_rm.md
+++ b/engine/reference/commandline/plugin_rm.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_plugin_rm
title: docker plugin rm
+redirect_from:
+ - /edge/engine/reference/commandline/plugin_rm/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/plugin_set.md b/engine/reference/commandline/plugin_set.md
index 777facb08d..839df289b5 100644
--- a/engine/reference/commandline/plugin_set.md
+++ b/engine/reference/commandline/plugin_set.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_plugin_set
title: docker plugin set
+redirect_from:
+ - /edge/engine/reference/commandline/plugin_set/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/plugin_upgrade.md b/engine/reference/commandline/plugin_upgrade.md
index 0822094bdd..7e95267863 100644
--- a/engine/reference/commandline/plugin_upgrade.md
+++ b/engine/reference/commandline/plugin_upgrade.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_plugin_upgrade
title: docker plugin upgrade
+redirect_from:
+ - /edge/engine/reference/commandline/plugin_upgrade/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/port.md b/engine/reference/commandline/port.md
index 02b3d9fbcc..ee12cc1cbc 100644
--- a/engine/reference/commandline/port.md
+++ b/engine/reference/commandline/port.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_port
title: docker port
+redirect_from:
+ - /edge/engine/reference/commandline/port/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/ps.md b/engine/reference/commandline/ps.md
index f9fbff474e..28f2d15055 100644
--- a/engine/reference/commandline/ps.md
+++ b/engine/reference/commandline/ps.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_ps
title: docker ps
+redirect_from:
+ - /edge/engine/reference/commandline/ps/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/pull.md b/engine/reference/commandline/pull.md
index 7e6a1434d3..e34602bb3e 100644
--- a/engine/reference/commandline/pull.md
+++ b/engine/reference/commandline/pull.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_pull
title: docker pull
+redirect_from:
+ - /edge/engine/reference/commandline/pull/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/push.md b/engine/reference/commandline/push.md
index 44d48dd34c..33ca856f57 100644
--- a/engine/reference/commandline/push.md
+++ b/engine/reference/commandline/push.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_push
title: docker push
+redirect_from:
+ - /edge/engine/reference/commandline/push/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/rename.md b/engine/reference/commandline/rename.md
index c1c9753a1b..088d2a5645 100644
--- a/engine/reference/commandline/rename.md
+++ b/engine/reference/commandline/rename.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_rename
title: docker rename
+redirect_from:
+ - /edge/engine/reference/commandline/rename/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/restart.md b/engine/reference/commandline/restart.md
index 3e9e8e7d14..c15337857e 100644
--- a/engine/reference/commandline/restart.md
+++ b/engine/reference/commandline/restart.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_restart
title: docker restart
+redirect_from:
+ - /edge/engine/reference/commandline/restart/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/rm.md b/engine/reference/commandline/rm.md
index 89400a02b8..7a0da8ac35 100644
--- a/engine/reference/commandline/rm.md
+++ b/engine/reference/commandline/rm.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_rm
title: docker rm
+redirect_from:
+ - /edge/engine/reference/commandline/rm/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/rmi.md b/engine/reference/commandline/rmi.md
index 7f3e7a1008..4a09c3e902 100644
--- a/engine/reference/commandline/rmi.md
+++ b/engine/reference/commandline/rmi.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_rmi
title: docker rmi
+redirect_from:
+ - /edge/engine/reference/commandline/rmi/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/run.md b/engine/reference/commandline/run.md
index 1a30739ae6..1aa878c473 100644
--- a/engine/reference/commandline/run.md
+++ b/engine/reference/commandline/run.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_run
title: docker run
+redirect_from:
+ - /edge/engine/reference/commandline/run/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/save.md b/engine/reference/commandline/save.md
index 886775d2a4..018d196e08 100644
--- a/engine/reference/commandline/save.md
+++ b/engine/reference/commandline/save.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_save
title: docker save
+redirect_from:
+ - /edge/engine/reference/commandline/save/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/search.md b/engine/reference/commandline/search.md
index ac000d6be7..804f50137f 100644
--- a/engine/reference/commandline/search.md
+++ b/engine/reference/commandline/search.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_search
title: docker search
+redirect_from:
+ - /edge/engine/reference/commandline/search/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/secret.md b/engine/reference/commandline/secret.md
index 8dc4ab8d92..7bd5d6cad7 100644
--- a/engine/reference/commandline/secret.md
+++ b/engine/reference/commandline/secret.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_secret
title: docker secret
+redirect_from:
+ - /edge/engine/reference/commandline/secret/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/secret_create.md b/engine/reference/commandline/secret_create.md
index 0aab035c2a..448690326d 100644
--- a/engine/reference/commandline/secret_create.md
+++ b/engine/reference/commandline/secret_create.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_secret_create
title: docker secret create
+redirect_from:
+ - /edge/engine/reference/commandline/secret_create/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/secret_inspect.md b/engine/reference/commandline/secret_inspect.md
index af0e26b1b9..9b52a2243d 100644
--- a/engine/reference/commandline/secret_inspect.md
+++ b/engine/reference/commandline/secret_inspect.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_secret_inspect
title: docker secret inspect
+redirect_from:
+ - /edge/engine/reference/commandline/secret_inspect/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/secret_ls.md b/engine/reference/commandline/secret_ls.md
index 074469b32b..282b5d5173 100644
--- a/engine/reference/commandline/secret_ls.md
+++ b/engine/reference/commandline/secret_ls.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_secret_ls
title: docker secret ls
+redirect_from:
+ - /edge/engine/reference/commandline/secret_ls/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/secret_rm.md b/engine/reference/commandline/secret_rm.md
index bbe60a9f62..0852ad1d6f 100644
--- a/engine/reference/commandline/secret_rm.md
+++ b/engine/reference/commandline/secret_rm.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_secret_rm
title: docker secret rm
+redirect_from:
+ - /edge/engine/reference/commandline/secret_rm/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/service.md b/engine/reference/commandline/service.md
index e3cdfd5bc7..ad9efbf4e9 100644
--- a/engine/reference/commandline/service.md
+++ b/engine/reference/commandline/service.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_service
title: docker service
+redirect_from:
+ - /edge/engine/reference/commandline/service/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/service_create.md b/engine/reference/commandline/service_create.md
index b7836161f2..eef8f82333 100644
--- a/engine/reference/commandline/service_create.md
+++ b/engine/reference/commandline/service_create.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_service_create
title: docker service create
+redirect_from:
+ - /edge/engine/reference/commandline/service_create/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/service_inspect.md b/engine/reference/commandline/service_inspect.md
index ea5be9ac77..e90b6db9fd 100644
--- a/engine/reference/commandline/service_inspect.md
+++ b/engine/reference/commandline/service_inspect.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_service_inspect
title: docker service inspect
+redirect_from:
+ - /edge/engine/reference/commandline/service_inspect/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/service_logs.md b/engine/reference/commandline/service_logs.md
index f1c57f5c86..3a88ec06ba 100644
--- a/engine/reference/commandline/service_logs.md
+++ b/engine/reference/commandline/service_logs.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_service_logs
title: docker service logs
+redirect_from:
+ - /edge/engine/reference/commandline/service_logs/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/service_ls.md b/engine/reference/commandline/service_ls.md
index 8579247016..9a5a088f85 100644
--- a/engine/reference/commandline/service_ls.md
+++ b/engine/reference/commandline/service_ls.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_service_ls
title: docker service ls
+redirect_from:
+ - /edge/engine/reference/commandline/service_ls/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/service_ps.md b/engine/reference/commandline/service_ps.md
index efcdc90d64..ce8766b809 100644
--- a/engine/reference/commandline/service_ps.md
+++ b/engine/reference/commandline/service_ps.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_service_ps
title: docker service ps
+redirect_from:
+ - /edge/engine/reference/commandline/service_ps/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/service_rm.md b/engine/reference/commandline/service_rm.md
index 6c0d591e91..9eea8c79a7 100644
--- a/engine/reference/commandline/service_rm.md
+++ b/engine/reference/commandline/service_rm.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_service_rm
title: docker service rm
+redirect_from:
+ - /edge/engine/reference/commandline/service_rm/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/service_rollback.md b/engine/reference/commandline/service_rollback.md
index afc2eeea99..68522ccefb 100644
--- a/engine/reference/commandline/service_rollback.md
+++ b/engine/reference/commandline/service_rollback.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_service_rollback
title: docker service rollback
+redirect_from:
+ - /edge/engine/reference/commandline/service_rollback/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/service_scale.md b/engine/reference/commandline/service_scale.md
index 290115c6d2..6abbbc625d 100644
--- a/engine/reference/commandline/service_scale.md
+++ b/engine/reference/commandline/service_scale.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_service_scale
title: docker service scale
+redirect_from:
+ - /edge/engine/reference/commandline/service_scale/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/service_update.md b/engine/reference/commandline/service_update.md
index 2018d808db..df2b4df63a 100644
--- a/engine/reference/commandline/service_update.md
+++ b/engine/reference/commandline/service_update.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_service_update
title: docker service update
+redirect_from:
+ - /edge/engine/reference/commandline/service_update/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/stack.md b/engine/reference/commandline/stack.md
index f71c392066..8b38a485d5 100644
--- a/engine/reference/commandline/stack.md
+++ b/engine/reference/commandline/stack.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_stack
title: docker stack
+redirect_from:
+ - /edge/engine/reference/commandline/stack/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/stack_deploy.md b/engine/reference/commandline/stack_deploy.md
index 8d66f0b058..4b956e9b37 100644
--- a/engine/reference/commandline/stack_deploy.md
+++ b/engine/reference/commandline/stack_deploy.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_stack_deploy
title: docker stack deploy
+redirect_from:
+ - /edge/engine/reference/commandline/stack_deploy/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/stack_ls.md b/engine/reference/commandline/stack_ls.md
index 3058ecc2f0..35b6978265 100644
--- a/engine/reference/commandline/stack_ls.md
+++ b/engine/reference/commandline/stack_ls.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_stack_ls
title: docker stack ls
+redirect_from:
+ - /edge/engine/reference/commandline/stack_ls/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/stack_ps.md b/engine/reference/commandline/stack_ps.md
index 762a380a8c..91d880dec4 100644
--- a/engine/reference/commandline/stack_ps.md
+++ b/engine/reference/commandline/stack_ps.md
@@ -3,7 +3,9 @@ datafolder: engine-cli
datafile: docker_stack_ps
title: docker stack ps
redirect_from:
-- /engine/reference/commandline/stack_tasks/
+ - /engine/reference/commandline/stack_tasks/
+ - /edge/engine/reference/commandline/stack_ps/
+ - /edge/engine/reference/commandline/stack_tasks/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/stack_rm.md b/engine/reference/commandline/stack_rm.md
index c0669b9ff9..ee463247c2 100644
--- a/engine/reference/commandline/stack_rm.md
+++ b/engine/reference/commandline/stack_rm.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_stack_rm
title: docker stack rm
+redirect_from:
+ - /edge/engine/reference/commandline/stack_rm/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/stack_services.md b/engine/reference/commandline/stack_services.md
index 6486b3efc2..4d13a1bb93 100644
--- a/engine/reference/commandline/stack_services.md
+++ b/engine/reference/commandline/stack_services.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_stack_services
title: docker stack services
+redirect_from:
+ - /edge/engine/reference/commandline/stack_services/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/start.md b/engine/reference/commandline/start.md
index 5f564189db..1e0ed24cde 100644
--- a/engine/reference/commandline/start.md
+++ b/engine/reference/commandline/start.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_start
title: docker start
+redirect_from:
+ - /edge/engine/reference/commandline/start/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/stats.md b/engine/reference/commandline/stats.md
index 2b8400ed19..bdef7d0e0c 100644
--- a/engine/reference/commandline/stats.md
+++ b/engine/reference/commandline/stats.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_stats
title: docker stats
+redirect_from:
+ - /edge/engine/reference/commandline/stats/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/stop.md b/engine/reference/commandline/stop.md
index 0fb5b536ec..78d68de9dc 100644
--- a/engine/reference/commandline/stop.md
+++ b/engine/reference/commandline/stop.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_stop
title: docker stop
+redirect_from:
+ - /edge/engine/reference/commandline/stop/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/swarm.md b/engine/reference/commandline/swarm.md
index 90099b8fe9..466a0ff6b6 100644
--- a/engine/reference/commandline/swarm.md
+++ b/engine/reference/commandline/swarm.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_swarm
title: docker swarm
+redirect_from:
+ - /edge/engine/reference/commandline/swarm/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/swarm_ca.md b/engine/reference/commandline/swarm_ca.md
index edfc4f1d29..611ce8c0b4 100644
--- a/engine/reference/commandline/swarm_ca.md
+++ b/engine/reference/commandline/swarm_ca.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_swarm_ca
title: docker swarm ca
+redirect_from:
+ - /edge/engine/reference/commandline/swarm_ca/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/swarm_init.md b/engine/reference/commandline/swarm_init.md
index 4e986c44e1..a55df61c92 100644
--- a/engine/reference/commandline/swarm_init.md
+++ b/engine/reference/commandline/swarm_init.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_swarm_init
title: docker swarm init
+redirect_from:
+ - /edge/engine/reference/commandline/swarm_init/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/swarm_join-token.md b/engine/reference/commandline/swarm_join-token.md
index 5391721565..52478d42ee 100644
--- a/engine/reference/commandline/swarm_join-token.md
+++ b/engine/reference/commandline/swarm_join-token.md
@@ -3,7 +3,9 @@ datafolder: engine-cli
datafile: docker_swarm_join-token
title: docker swarm join-token
redirect_from:
-- /engine/reference/commandline/swarm_join_token/
+ - /engine/reference/commandline/swarm_join_token/
+ - /edge/engine/reference/commandline/swarm_join_token/
+ - /edge/engine/reference/commandline/swarm_join-token/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/swarm_join.md b/engine/reference/commandline/swarm_join.md
index 57e4382149..b421191801 100644
--- a/engine/reference/commandline/swarm_join.md
+++ b/engine/reference/commandline/swarm_join.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_swarm_join
title: docker swarm join
+redirect_from:
+ - /edge/engine/reference/commandline/swarm_join/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/swarm_leave.md b/engine/reference/commandline/swarm_leave.md
index 77ed17e2ca..6349241118 100644
--- a/engine/reference/commandline/swarm_leave.md
+++ b/engine/reference/commandline/swarm_leave.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_swarm_leave
title: docker swarm leave
+redirect_from:
+ - /edge/engine/reference/commandline/swarm_leave/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/swarm_unlock-key.md b/engine/reference/commandline/swarm_unlock-key.md
index caca9aec2d..2a6aca455f 100644
--- a/engine/reference/commandline/swarm_unlock-key.md
+++ b/engine/reference/commandline/swarm_unlock-key.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_swarm_unlock-key
title: docker swarm unlock-key
+redirect_from:
+ - /edge/engine/reference/commandline/swarm_unlock-key/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/swarm_unlock.md b/engine/reference/commandline/swarm_unlock.md
index 41a893f6ba..f4c5847dcf 100644
--- a/engine/reference/commandline/swarm_unlock.md
+++ b/engine/reference/commandline/swarm_unlock.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_swarm_unlock
title: docker swarm unlock
+redirect_from:
+ - /edge/engine/reference/commandline/swarm_unlock/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/swarm_update.md b/engine/reference/commandline/swarm_update.md
index 6d5fc2bf1a..e99fb3d37c 100644
--- a/engine/reference/commandline/swarm_update.md
+++ b/engine/reference/commandline/swarm_update.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_swarm_update
title: docker swarm update
+redirect_from:
+ - /edge/engine/reference/commandline/swarm_update/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/system.md b/engine/reference/commandline/system.md
index c2c46ffccf..f4e1a5588a 100644
--- a/engine/reference/commandline/system.md
+++ b/engine/reference/commandline/system.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_system
title: docker system
+redirect_from:
+ - /edge/engine/reference/commandline/system/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/system_df.md b/engine/reference/commandline/system_df.md
index c9ed3c2e4f..0ce85da4c8 100644
--- a/engine/reference/commandline/system_df.md
+++ b/engine/reference/commandline/system_df.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_system_df
title: docker system df
+redirect_from:
+ - /edge/engine/reference/commandline/system_df/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/system_events.md b/engine/reference/commandline/system_events.md
index 26aa4a0f74..32820dd1ca 100644
--- a/engine/reference/commandline/system_events.md
+++ b/engine/reference/commandline/system_events.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_system_events
title: docker system events
+redirect_from:
+ - /edge/engine/reference/commandline/system_events/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/system_info.md b/engine/reference/commandline/system_info.md
index 01e0200bf5..388a34d108 100644
--- a/engine/reference/commandline/system_info.md
+++ b/engine/reference/commandline/system_info.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_system_info
title: docker system info
+redirect_from:
+ - /edge/engine/reference/commandline/system_info/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/system_prune.md b/engine/reference/commandline/system_prune.md
index af7bb36af3..73494c9cc7 100644
--- a/engine/reference/commandline/system_prune.md
+++ b/engine/reference/commandline/system_prune.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_system_prune
title: docker system prune
+redirect_from:
+ - /edge/engine/reference/commandline/system_prune/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/tag.md b/engine/reference/commandline/tag.md
index 1ba9a241d3..0509960e04 100644
--- a/engine/reference/commandline/tag.md
+++ b/engine/reference/commandline/tag.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_tag
title: docker tag
+redirect_from:
+ - /edge/engine/reference/commandline/tag/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/top.md b/engine/reference/commandline/top.md
index 5632a140b3..586dd1aa6c 100644
--- a/engine/reference/commandline/top.md
+++ b/engine/reference/commandline/top.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_top
title: docker top
+redirect_from:
+ - /edge/engine/reference/commandline/top/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/trust.md b/engine/reference/commandline/trust.md
index 9a7a424c71..1c3b34f75b 100644
--- a/engine/reference/commandline/trust.md
+++ b/engine/reference/commandline/trust.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_trust
title: docker trust
+redirect_from:
+ - /edge/engine/reference/commandline/trust/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/trust_inspect.md b/engine/reference/commandline/trust_inspect.md
index 9c32315863..13f264b7ef 100644
--- a/engine/reference/commandline/trust_inspect.md
+++ b/engine/reference/commandline/trust_inspect.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_trust_inspect
title: docker trust inspect
+redirect_from:
+ - /edge/engine/reference/commandline/trust_inspect/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/trust_key.md b/engine/reference/commandline/trust_key.md
index 632023ffec..0f48a454aa 100644
--- a/engine/reference/commandline/trust_key.md
+++ b/engine/reference/commandline/trust_key.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_trust_key
title: docker trust key
+redirect_from:
+ - /edge/engine/reference/commandline/trust_key/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/trust_key_generate.md b/engine/reference/commandline/trust_key_generate.md
index bf075f2084..74f3ef7a7b 100644
--- a/engine/reference/commandline/trust_key_generate.md
+++ b/engine/reference/commandline/trust_key_generate.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_trust_key_generate
title: docker trust key generate
+redirect_from:
+ - /edge/engine/reference/commandline/trust_key_generate/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/trust_key_load.md b/engine/reference/commandline/trust_key_load.md
index a32c7793b5..b94ce87113 100644
--- a/engine/reference/commandline/trust_key_load.md
+++ b/engine/reference/commandline/trust_key_load.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_trust_key_load
title: docker trust key load
+redirect_from:
+ - /edge/engine/reference/commandline/trust_key_load/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/trust_revoke.md b/engine/reference/commandline/trust_revoke.md
index cecad510d6..bdfb5622b3 100644
--- a/engine/reference/commandline/trust_revoke.md
+++ b/engine/reference/commandline/trust_revoke.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_trust_revoke
title: docker trust revoke
+redirect_from:
+ - /edge/engine/reference/commandline/trust_revoke/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/trust_sign.md b/engine/reference/commandline/trust_sign.md
index 4ea65ca034..6048b27a1b 100644
--- a/engine/reference/commandline/trust_sign.md
+++ b/engine/reference/commandline/trust_sign.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_trust_sign
title: docker trust sign
+redirect_from:
+ - /edge/engine/reference/commandline/trust_sign/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/trust_signer.md b/engine/reference/commandline/trust_signer.md
index 0f0c7dc3ec..fe58376cde 100644
--- a/engine/reference/commandline/trust_signer.md
+++ b/engine/reference/commandline/trust_signer.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_trust_signer
title: docker trust signer
+redirect_from:
+ - /edge/engine/reference/commandline/trust_signer/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/trust_signer_add.md b/engine/reference/commandline/trust_signer_add.md
index cca8b8786c..101c304420 100644
--- a/engine/reference/commandline/trust_signer_add.md
+++ b/engine/reference/commandline/trust_signer_add.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_trust_signer_add
title: docker trust signer add
+redirect_from:
+ - /edge/engine/reference/commandline/trust_signer_add/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/trust_signer_remove.md b/engine/reference/commandline/trust_signer_remove.md
index 3fda4948d8..232e99c5b6 100644
--- a/engine/reference/commandline/trust_signer_remove.md
+++ b/engine/reference/commandline/trust_signer_remove.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_trust_signer_remove
title: docker trust signer remove
+redirect_from:
+ - /edge/engine/reference/commandline/trust_signer_remove/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/unpause.md b/engine/reference/commandline/unpause.md
index 5af98fec94..35515c6ad0 100644
--- a/engine/reference/commandline/unpause.md
+++ b/engine/reference/commandline/unpause.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_unpause
title: docker unpause
+redirect_from:
+ - /edge/engine/reference/commandline/unpause/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/update.md b/engine/reference/commandline/update.md
index f67c10da2a..5197c8a9a9 100644
--- a/engine/reference/commandline/update.md
+++ b/engine/reference/commandline/update.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_update
title: docker update
+redirect_from:
+ - /edge/engine/reference/commandline/update/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/version.md b/engine/reference/commandline/version.md
index 4a1f7ab836..7ac197f3d8 100644
--- a/engine/reference/commandline/version.md
+++ b/engine/reference/commandline/version.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_version
title: docker version
+redirect_from:
+ - /edge/engine/reference/commandline/version/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/volume.md b/engine/reference/commandline/volume.md
index 8a57e8b1e4..b1b72ed26b 100644
--- a/engine/reference/commandline/volume.md
+++ b/engine/reference/commandline/volume.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_volume
title: docker volume
+redirect_from:
+ - /edge/engine/reference/commandline/volume/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/volume_create.md b/engine/reference/commandline/volume_create.md
index 2c645b74dc..305eeb59d8 100644
--- a/engine/reference/commandline/volume_create.md
+++ b/engine/reference/commandline/volume_create.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_volume_create
title: docker volume create
+redirect_from:
+ - /edge/engine/reference/commandline/volume_create/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/volume_inspect.md b/engine/reference/commandline/volume_inspect.md
index ae32cefd14..2a8d336f18 100644
--- a/engine/reference/commandline/volume_inspect.md
+++ b/engine/reference/commandline/volume_inspect.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_volume_inspect
title: docker volume inspect
+redirect_from:
+ - /edge/engine/reference/commandline/volume_inspect/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/volume_ls.md b/engine/reference/commandline/volume_ls.md
index c495de9403..11946608df 100644
--- a/engine/reference/commandline/volume_ls.md
+++ b/engine/reference/commandline/volume_ls.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_volume_ls
title: docker volume ls
+redirect_from:
+ - /edge/engine/reference/commandline/volume_ls/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/volume_prune.md b/engine/reference/commandline/volume_prune.md
index 902a3e1fa5..7a6ae469f2 100644
--- a/engine/reference/commandline/volume_prune.md
+++ b/engine/reference/commandline/volume_prune.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_volume_prune
title: docker volume prune
+redirect_from:
+ - /edge/engine/reference/commandline/volume_prune/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/volume_rm.md b/engine/reference/commandline/volume_rm.md
index 40740f26da..6edc57f3be 100644
--- a/engine/reference/commandline/volume_rm.md
+++ b/engine/reference/commandline/volume_rm.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_volume_rm
title: docker volume rm
+redirect_from:
+ - /edge/engine/reference/commandline/volume_rm/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/reference/commandline/wait.md b/engine/reference/commandline/wait.md
index 985b044d51..bcbe405db0 100644
--- a/engine/reference/commandline/wait.md
+++ b/engine/reference/commandline/wait.md
@@ -2,6 +2,8 @@
datafolder: engine-cli
datafile: docker_wait
title: docker wait
+redirect_from:
+ - /edge/engine/reference/commandline/wait/
---
-{% if page.datafolder contains '-edge' %}
- {% include edge_only.md section="cliref" %}
-{% endif %}
{% include cli.md datafolder=page.datafolder datafile=page.datafile %}
diff --git a/engine/release-notes.md b/engine/release-notes.md
index 1f3e8d8f86..094aeda2f8 100644
--- a/engine/release-notes.md
+++ b/engine/release-notes.md
@@ -23,6 +23,7 @@ consistency and compatibility reasons.
> will ship concurrently with the same x patch version based on the same code base.
## 18.09.1
+
2019-01-09
#### Important notes about this release
@@ -72,7 +73,11 @@ Update your configuration if this command prints a non-empty value for `MountFla
* Add socket activation for RHEL-based distributions. [docker/docker-ce-packaging#274](https://github.com/docker/docker-ce-packaging/pull/274)
* Add libseccomp requirement for RPM packages. [docker/docker-ce-packaging#266](https://github.com/docker/docker-ce-packaging/pull/266)
-## 18.09.0
+### Known Issues
+* When upgrading from 18.09.0 to 18.09.1, `containerd` is not upgraded to the correct version on Ubuntu. [Learn more](https://success.docker.com/article/error-upgrading-to-engine-18091-with-containerd).
+
+## 18.09.0
+
2018-11-08
#### Important notes about this release
@@ -245,6 +250,7 @@ Ubuntu 14.04 "Trusty Tahr" [docker-ce-packaging#255](https://github.com/docker/d
## Older Docker Engine EE Release notes
### 18.03.1-ee-4
+<<<<<<< HEAD
2018-10-25
> *** NOTE: *** If you're deploying UCP or DTR, use Docker EE Engine 18.09 or higher. 18.03 is an engine only release.
@@ -296,6 +302,59 @@ Ubuntu 14.04 "Trusty Tahr" [docker-ce-packaging#255](https://github.com/docker/d
* Clean up tasks in dirty list for which the service has been deleted. [docker/swarmkit#2694](https://github.com/docker/swarmkit/pull/2694)
* Propagate the provided external CA certificate to the external CA object in swarm. [docker/cli#1178](https://github.com/docker/cli/pull/1178)
+=======
+2018-10-25
+
+> ***NOTE:*** If you're deploying UCP or DTR, use Docker EE Engine 18.09 or higher. 18.03 is an engine only release.
+
+#### Client
+
+* Fixed help message flags on docker stack commands and child commands. [docker/cli#1251](https://github.com/docker/cli/pull/1251)
+* Fixed typo breaking zsh docker update autocomplete. [docker/cli#1232](https://github.com/docker/cli/pull/1232)
+
+### Networking
+
+* Added optimizations to reduce the messages in the NetworkDB queue. [docker/libnetwork#2225](https://github.com/docker/libnetwork/pull/2225)
+* Fixed a very rare condition where managers are not correctly triggering the reconnection logic. [docker/libnetwork#2226](https://github.com/docker/libnetwork/pull/2226)
+* Changed loglevel from error to warning for missing disable_ipv6 file. [docker/libnetwork#2224](https://github.com/docker/libnetwork/pull/2224)
+
+#### Runtime
+
+* Fixed denial of service with large numbers in cpuset-cpus and cpuset-mems. [moby/moby#37967](https://github.com/moby/moby/pull/37967)
+* Added stability improvements for devicemapper shutdown. [moby/moby#36307](https://github.com/moby/moby/pull/36307) [moby/moby#36438](https://github.com/moby/moby/pull/36438)
+
+#### Swarm Mode
+
+* Fixed the logic used for skipping over running tasks. [docker/swarmkit#2724](https://github.com/docker/swarmkit/pull/2724)
+* Addressed unassigned task leak when a service is removed. [docker/swarmkit#2709](https://github.com/docker/swarmkit/pull/2709)
+
+### 18.03.1-ee-3
+2018-08-30
+
+#### Builder
+
+* Fix: no error if build args are missing during docker build. [docker/engine#25](https://github.com/docker/engine/pull/25)
+* Ensure RUN instruction to run without healthcheck. [moby/moby#37413](https://github.com/moby/moby/pull/37413)
+
+#### Client
+
+* Fix manifest list to always use correct size. [docker/cli#1156](https://github.com/docker/cli/pull/1156)
+* Various shell completion script updates. [docker/cli#1159](https://github.com/docker/cli/pull/1159) [docker/cli#1227](https://github.com/docker/cli/pull/1227)
+* Improve version output alignment. [docker/cli#1204](https://github.com/docker/cli/pull/1204)
+
+#### Runtime
+
+* Disable CRI plugin listening on port 10010 by default. [docker/engine#29](https://github.com/docker/engine/pull/29)
+* Update containerd to v1.1.2. [docker/engine#33](https://github.com/docker/engine/pull/33)
+* Windows: Pass back system errors on container exit. [moby/moby#35967](https://github.com/moby/moby/pull/35967)
+* Windows: Fix named pipe support for hyper-v isolated containers. [docker/engine#2](https://github.com/docker/engine/pull/2) [docker/cli#1165](https://github.com/docker/cli/pull/1165)
+* Register OCI media types. [docker/engine#4](https://github.com/docker/engine/pull/4)
+
+#### Swarm Mode
+
+* Clean up tasks in dirty list for which the service has been deleted. [docker/swarmkit#2694](https://github.com/docker/swarmkit/pull/2694)
+* Propagate the provided external CA certificate to the external CA object in swarm. [docker/cli#1178](https://github.com/docker/cli/pull/1178)
+>>>>>>> 6292ef3ac708f00e7ba13a706bcb7225c34ddb19
### 18.03.1-ee-2
2018-07-10
diff --git a/engine/security/antivirus.md b/engine/security/antivirus.md
index 7fba98d866..326103fb78 100644
--- a/engine/security/antivirus.md
+++ b/engine/security/antivirus.md
@@ -8,7 +8,7 @@ When antivirus software scans files used by Docker, these files may be locked
in a way that causes Docker commands to hang.
One way to reduce these problems is to add the Docker data directory
-(`/var/lib/docker` on Linux, `$Env:ProgramData` on Windows Server, or `$HOME/Library/Containers/com.docker.docker/` on Mac) to the
+(`/var/lib/docker` on Linux, `%ProgramData%\docker` on Windows Server, or `$HOME/Library/Containers/com.docker.docker/` on Mac) to the
antivirus's exclusion list. However, this comes with the trade-off that viruses
or malware in Docker images, writable layers of containers, or volumes are not
detected. If you do choose to exclude Docker's data directory from background
diff --git a/engine/security/trust/content_trust.md b/engine/security/trust/content_trust.md
index 6f27039a8f..c33870d652 100644
--- a/engine/security/trust/content_trust.md
+++ b/engine/security/trust/content_trust.md
@@ -7,27 +7,22 @@ title: Content trust in Docker
When transferring data among networked systems, *trust* is a central concern. In
particular, when communicating over an untrusted medium such as the internet, it
is critical to ensure the integrity and the publisher of all the data a system
-operates on. You use Docker Engine to push and pull images (data) to a public or private registry. Content trust
-gives you the ability to verify both the integrity and the publisher of all the
-data received from a registry over any channel.
+operates on. You use the Docker Engine to push and pull images (data) to a
+public or private registry. Content trust gives you the ability to verify both
+the integrity and the publisher of all the data received from a registry over
+any channel.
-## About trust in Docker
+## About Docker Content Trust (DCT)
-Docker Content Trust (DCT) allows operations with a remote Docker registry to enforce
-client-side signing and verification of image tags. DCT provides the
-ability to use digital signatures for data sent to and received from remote
-Docker registries. These signatures allow client-side verification of the
-integrity and publisher of specific image tags.
+Docker Content Trust (DCT) provides the ability to use digital signatures for
+data sent to and received from remote Docker registries. These signatures allow
+client-side or runtime verification of the integrity and publisher of specific
+image tags.
-Once DCT is enabled, image publishers can sign their images. Image consumers
-can ensure that the images they use are signed. Publishers and consumers can
-either be individuals or organizations. DCT supports users and automated processes
-such as builds.
-
-When you enable DCT, signing occurs on the client after push and verification
-happens on the client after pull if you use Docker CE. If you use UCP, and you
-have configured UCP to require images to be signed before deploying, signing is
-verified by UCP.
+Through DCT, image publishers can sign their images and image consumers can
+ensure that the images they use are signed. Publishers could be be individuals
+or organizations manually signing their content or automated software supply
+chains signing content as part of their release process.
### Image tags and DCT
@@ -41,9 +36,9 @@ A particular image `REPOSITORY` can have multiple tags. For example, `latest` an
`3.1.2` are both tags on the `mongo` image. An image publisher can build an image
and tag combination many times changing the image with each build.
-DCT is associated with the `TAG` portion of an image. Each image
-repository has a set of keys that image publishers use to sign an image tag.
-Image publishers have discretion on which tags they sign.
+DCT is associated with the `TAG` portion of an image. Each image repository has
+a set of keys that image publishers use to sign an image tag. Image publishers
+have discretion on which tags they sign.
An image repository can contain an image with one tag that is signed and another
tag that is not. For example, consider [the Mongo image
@@ -62,38 +57,19 @@ push replaces the last unsigned tag `latest` but does not affect the signed `lat
The ability to choose which tags they can sign, allows publishers to iterate over
the unsigned version of an image before officially signing it.
-Image consumers can enable DCT to ensure that images they use were
-signed. If a consumer enables DCT, they can only pull, run, or build
-with trusted images. Enabling DCT is like wearing a pair of
-rose-colored glasses. Consumers "see" only signed image tags and the less
-desirable, unsigned image tags are "invisible" to them.
+Image consumers can enable DCT to ensure that images they use were signed. If a
+consumer enables DCT, they can only pull, run, or build with trusted images.
+Enabling DCT is a bit like applying a "filter" to your registry. Consumers "see"
+only signed image tags and the less desirable, unsigned image tags are
+"invisible" to them.

-To the consumer who has not enabled DCT, nothing about how they
-work with Docker images changes. Every image is visible regardless of whether it
-is signed or not.
+To the consumer who has not enabled DCT, nothing about how they work with Docker
+images changes. Every image is visible regardless of whether it is signed or
+not.
-
-### DCT operations and keys
-
-When DCT is enabled, `docker` CLI commands that operate on tagged images must
-either have content signatures or explicit content hashes. The commands that
-operate with DCT are:
-
-* `push`
-* `build`
-* `create`
-* `pull`
-* `run`
-
-For example, with DCT enabled a `docker pull someimage:latest` only
-succeeds if `someimage:latest` is signed. However, an operation with an explicit
-content hash always succeeds as long as the hash exists:
-
-```bash
-$ docker pull someimage@sha256:d149ab53f8718e987c3a3024bb8aa0e2caadf6c0328f1d9d850b2a2a67f2819a
-```
+### Docker Content Trust Keys
Trust for an image tag is managed through the use of signing keys. A key set is
created when an operation using DCT is first invoked. A key set consists
@@ -116,231 +92,333 @@ The following image depicts the various signing keys and their relationships:
>tag from this repository prior to the loss.
{:.warning}
-You should backup the root key somewhere safe. Given that it is only required
+You should back up the root key somewhere safe. Given that it is only required
to create new repositories, it is a good idea to store it offline in hardware.
For details on securing, and backing up your keys, make sure you
read how to [manage keys for DCT](trust_key_mng.md).
-## Survey of typical DCT operations
+## Signing Images with Docker Content Trust
-This section surveys the typical trusted operations users perform with Docker
-images. Specifically, we go through the following steps to help us exercise
-these various trusted operations:
+> Note this applies to Docker Community Engine 17.12 and newer, and Docker
+> Enterprise Engine 18.03 and newer.
-* Build and push an unsigned image
-* Pull an unsigned image
-* Build and push a signed image
-* Pull the signed image pushed above
-* Pull unsigned image pushed above
+Within the Docker CLI we can sign and push a container image with the
+`$ docker trust` command syntax. This is built on top of the Notary feature
+set, more information on Notary can be found [here](/notary/getting_started/).
-### Enabling DCT in Docker Engine Configuration
+A prerequisite for signing an image is a Docker Registry with a Notary server
+attached (Such as the Docker Hub or Docker Trusted Registry). Instructions for
+standing up a self-hosted environment can be found [here](/engine/security/trust/deploying_notary/).
-Engine Signature Verification prevents the following behaviors on an image:
-* Running a container to build an image (the base image must be signed, or must be scratch)
-* Creating a container from an image that is not signed
+To sign a Docker Image you will need a delegation key pair. These keys
+can be generated locally using `$ docker trust key generate`, generated
+by a certificate authority, or if you are using Docker Enterprise's
+Universal Control Plane (UCP), a user's Client Bundle provides adequate keys for a
+delegation. Find more information on Delegation Keys
+[here](trust_delegation/#creating-delegation-keys).
-DCT does not verify that a running container’s filesystem has not been altered from what
-was in the image. For example, it does not prevent a container from writing to the filesystem, nor
-the container’s filesystem from being altered on disk.
+First we will add the delegation private key to the local Docker trust
+repository. (By default this is stored in `~/.docker/trust/`). If you are
+generating delegation keys with `$ docker trust key generate`, the private key
+is automatically added to the local trust store. If you are importing a separate
+key, such as one from the UCP you will need to use the
+`$ docker trust key load` command.
-It will also pull and run signed images from registries, but will not prevent unsigned images from being
-imported, loaded, or created.
+```
+$ docker trust key generate jeff
+Generating key for jeff...
+Enter passphrase for new jeff key with ID 9deed25:
+Repeat passphrase for new jeff key with ID 9deed25:
+Successfully generated and loaded private key. Corresponding public key available: /home/ubuntu/Documents/mytrustdir/jeff.pub
+```
-The image name, digest, or tag must be verified if DCT is enabled. The latest DCT metadata for
-an image must be downloaded from the trust server associated with the registry:
-* If an image tag does not have a digest, the DCT metadata translates the name to an image digest
-* If an image tag has an image digest, the DCT metadata verifies that the name matches the provided digest
-* If an image digest does not have an image tag, the DCT metadata does a reverse lookup and provides the image tag as well as the digest.
+Or if you have an existing key:
-The signature verification feature is configured in the Docker daemon configuration file
-`daemon.json`.
+```
+$ docker trust key load key.pem --name jeff
+Loading key from "key.pem"...
+Enter passphrase for new jeff key with ID 8ae710e:
+Repeat passphrase for new jeff key with ID 8ae710e:
+Successfully imported key from key.pem
+```
+
+Next we will need to add the delegation public key to the Notary server;
+this is specific to a particular image repository in Notary known as a Global
+Unique Name (GUN). If this is the first time you are adding a delegation to that
+repository, this command will also initiate the repository, using a local Notary
+canonical root key. To understand more about initiating a repository, and the
+role of delegations, head to
+[delegations for content trust](trust_delegation/#managing-delegations-in-a-notary-server)
+
+```
+$ docker trust signer add --key cert.pem jeff dtr.example.com/admin/demo
+Adding signer "jeff" to dtr.example.com/admin/demo...
+Enter passphrase for new repository key with ID 10b5e94:
+```
+
+
+Finally, we will use the delegation private key to sign a particular tag and
+push it up to the registry.
+
+```
+$ docker trust sign dtr.example.com/admin/demo:1
+Signing and pushing trust data for local image dtr.example.com/admin/demo:1, may overwrite remote trust data
+The push refers to repository [dtr.example.com/admin/demo]
+7bff100f35cb: Pushed
+1: digest: sha256:3d2e482b82608d153a374df3357c0291589a61cc194ec4a9ca2381073a17f58e size: 528
+Signing and pushing trust metadata
+Enter passphrase for signer key with ID 8ae710e:
+Successfully signed dtr.example.com/admin/demo:1
+```
+
+Alternatively, once the keys have been imported an image can be pushed with the
+`$ docker push` command, by exporting the DCT environmental variable.
+
+```
+$ export DOCKER_CONTENT_TRUST=1
+
+$ docker push dtr.example.com/admin/demo:1
+The push refers to repository [dtr.example.com/admin/demo:1]
+7bff100f35cb: Pushed
+1: digest: sha256:3d2e482b82608d153a374df3357c0291589a61cc194ec4a9ca2381073a17f58e size: 528
+Signing and pushing trust metadata
+Enter passphrase for signer key with ID 8ae710e:
+Successfully signed dtr.example.com/admin/demo:1
+```
+
+Remote trust data for a tag or a repository can be viewed by the
+`$ docker trust inspect` command:
+
+```
+$ docker trust inspect --pretty dtr.example.com/admin/demo:1
+
+Signatures for dtr.example.com/admin/demo:1
+
+SIGNED TAG DIGEST SIGNERS
+1 3d2e482b82608d153a374df3357c0291589a61cc194ec4a9ca2381073a17f58e jeff
+
+List of signers and their keys for dtr.example.com/admin/demo:1
+
+SIGNER KEYS
+jeff 8ae710e3ba82
+
+Administrative keys for dtr.example.com/admin/demo:1
+
+ Repository Key: 10b5e94c916a0977471cc08fa56c1a5679819b2005ba6a257aa78ce76d3a1e27
+ Root Key: 84ca6e4416416d78c4597e754f38517bea95ab427e5f95871f90d460573071fc
+```
+
+Remote Trust data for a tag can be removed by the `$ docker trust revoke` command:
+
+```
+$ docker trust revoke dtr.example.com/admin/demo:1
+Enter passphrase for signer key with ID 8ae710e:
+Successfully deleted signature for dtr.example.com/admin/demo:1
+```
+
+
+## Runtime Enforcement with Docker Content Trust
+
+> Note this only applies to Docker Enterprise Engine 18.09 or newer. This
+> implementation is also separate from the `only run signed images` feature of
+> [Universal Control Plane](/ee/ucp/admin/configure/run-only-the-images-you-trust/)
+
+Docker Content Trust within the Docker Enterprise Engine prevents a user from
+using a container image from an unknown source, it will also prevent a user from
+building a container image from a base layer from an unknown source. Trusted
+sources could include Official Docker Images, found on the [Docker
+Hub](https://hub.docker.com/search?image_filter=official&type=image), or User
+trusted sources, with repositories and tags signed with the commands [above](#signing-images-with-docker-content-trust).
+
+Engine Signature Verification prevents the following:
+* `$ docker container run` of an unsigned image.
+* `$ docker build` where the `FROM` image is not signed or is not scratch.
+
+DCT does not verify that a running container’s filesystem has not been altered
+from what was in the image. For example, it does not prevent a container from
+writing to the filesystem, once the container is running, nor does it prevent
+the container’s filesystem from being altered on disk. DCT will also not prevent
+unsigned images from being imported, loaded, or created.
+
+### Enabling DCT within the Docker Enterprise Engine
+
+DCT is controlled by the Docker Engine's configuration file. By default this is
+found at `/etc/docker/daemon.json`. More details on this file can be found
+[here](/engine/reference/commandline/dockerd/#daemon-configuration-file)
+
+The `content-trust` flag is based around a `mode` variable instructing
+the engine whether to enforce signed images, and a `trust-pinning` variable
+instructing the engine which sources to trust.
+
+`Mode` can take 3 variables:
+
+* `Disabled` - Verification is not active and the remainder of the content-trust
+related metadata will be ignored. This is the default value if `mode` is not
+specified.
+* `Permissive` - Verification will be performed, but only failures will be
+logged and remain unenforced. This configuration is intended for testing of
+changes related to content-trust. The results of the signature verification
+is displayed in the Docker Engine's daemon logs.
+* `Enforced` - Content trust will be enforced and an image that cannot be
+verified successfully will not be pulled or run.
```
{
- ...
- “content-trust”: {
- “trust-pinning”: {
- “root-keys”: {
- “myregistry.com/myorg/*”: [“keyID1”, “keyID2”],
- “myregistry.com/otherorg/repo”: [“keyID3”]
- },
- “official-images”: true,
- },
- “mode”: “disabled” | “permissive” | “enforced”,
- “allow-expired-trust-cache”: true,
+ "content-trust": {
+ "mode": "enforced"
}
}
```
-| **Stanza** | **Description** |
-|--------------------------------|----------------------------------------|
-| `trust-pinning:root-keys` | Root key IDs are canonical IDs that sign the root metadata of the image trust data. In Docker Certified Trust (DCT), the root keys are unique certificates tying the name of the image to the repo metadata. The private key ID (the canonical key ID) corresponding to the certificate does not depend on the image name. If an image’s name matches more than one glob, then the most specific (longest) one is chosen. |
-| `trust-pinning:library-images` | This option pins the official libraries (`docker.io/library/*`) to the hard-coded Docker official images root key. DCT trusts the official images by default. This is in addition to whatever images are specified by `trust-pinning:root-keys`. If `trustpinning:root-keys` specifies a key mapping for `docker.io/library/*`, those keys will be preferred for trust pinning. Otherwise, if a more general `docker.io/*` or `*` are specified, the official images key will be preferred. |
-| `allow-expired-trust-cache` | Specifies whether cached locally expired metadata validates images if an external server is unreachable or does not have image trust metadata. This is necessary for machines which may be often offline, as may be the case for edge. This does not provide mitigations against freeze attacks, which is a necessary to provide availability in low-connectivity environments. |
-| `mode` | Specifies whether DCT is enabled and enforced. Valid modes are: `disabled`: Verification is not active and the remainder of the content-trust related metadata will be ignored. *NOTE* that this is the default configuration if `mode` is not specified. `permissive`: Verification will be performed, but only failures will only be logged and remain unenforced. This configuration is intended for testing of changes related to content-trust. `enforced`: DCT will be enforced and an image that cannot be verified successfully will not be pulled or run. |
+### Official Docker Images
-***Note:*** The DCT configuration defined here is agnostic of any policy defined in
-[UCP](https://docs.docker.com/v17.09/datacenter/ucp/2.0/guides/content-trust/#configure-ucp).
-Images that can be deployed by the UCP trust policy but are disallowed by the Docker Engine
-configuration will not successfully be deployed or run on that engine.
-
-### Enable and disable DCT per-shell or per-invocation
-
-Instead of enabling DCT through the system-wide configuration, DCT can be enabled or disabled
-on a per-shell or per-invocation basis.
-
-To enable on a per-shell basis, enable the `DOCKER_CONTENT_TRUST` environment variable.
-Enabling per-shell is useful because you can have one shell configured for trusted operations
-and another terminal shell for untrusted operations. You can also add this declaration to
-your shell profile to have it enabled by default.
-
-To enable DCT in a `bash` shell enter the following command:
-
-```bash
-export DOCKER_CONTENT_TRUST=1
-```
-
-Once set, each of the "tag" operations requires a key for a trusted tag.
-
-In an environment where `DOCKER_CONTENT_TRUST` is set, you can use the
-`--disable-content-trust` flag to run individual operations on tagged images
-without DCT on an as-needed basis.
-
-Consider the following Dockerfile that uses an untrusted parent image:
+All official Docker library images found on the Docker Hub (docker.io/library/*)
+are signed by the same Notary root key. This root key's ID has been embedded
+inside of the Docker Enterprise Engine. Therefore, to enforce that, only official
+Docker images can be used. Specify:
```
-$ cat Dockerfile
-FROM docker/trusttest:latest
-RUN echo
+{
+ "content-trust": {
+ "trust-pinning": {
+ "official-library-images": true
+ },
+ "mode": "enforced"
+ }
+}
```
-To build a container successfully using this Dockerfile, one can do:
+### User-Signed Images
+
+There are 2 options for trust pinning user-signed images:
+
+* Notary Canonical Root Key ID (DCT Root Key) is an ID that describes *just* the
+root key used to sign a repository (or rather its respective keys). This is the
+root key on the host that originally signed the repository (i.e. your workstation).
+This can be retrieved from the workstation that signed the repository through
+`$ grep -r "root" ~/.docker/trust/private/` (Assuming your trust data is
+at `~/.docker/trust/*`). It is expected that this canonical ID has initiated
+multiple image repositories (`mydtr/user1/image1` and `mydtr/user1/image2`).
```
-$ docker build --disable-content-trust -t /nottrusttest:latest .
-Sending build context to Docker daemon 42.84 MB
-...
-Successfully built f21b872447dc
+# Retrieving Root ID
+$ grep -r "root" ~/.docker/trust/private
+/home/ubuntu/.docker/trust/private/0b6101527b2ac766702e4b40aa2391805b70e5031c04714c748f914e89014403.key:role: root
+
+# Using a Canonical ID that has signed 2 repos (mydtr/user1/repo1 and mydtr/user1/repo2). Note you can use a Wildcard.
+
+{
+ "content-trust": {
+ "trust-pinning": {
+ "root-keys": {
+ "mydtr/user1/*": [
+ "0b6101527b2ac766702e4b40aa2391805b70e5031c04714c748f914e89014403"
+ ]
+ }
+ },
+ "mode": "enforced"
+ }
+}
```
-The same is true for all the other commands, such as `pull` and `push`:
-
+* Notary Root key ID (DCT Certificate ID) is an ID that describes the same, but
+the ID is unique per repository. For example, `mydtr/user1/image1` and `mydtr/usr1/image2`
+will have unique certificate IDs. A certificate ID can be retrieved through a
+`$ docker trust inspect` command and is labelled as a root-key (referring back
+to the Notary key name). This is designed for when different users are signing
+their own repositories, for example, when there is no central signing server. As a cert-id
+is more granular, it would take priority if a conflict occurs over a root ID.
+
```
-$ docker pull --disable-content-trust docker/trusttest:latest
-...
-$ docker push --disable-content-trust /nottrusttest:latest
-...
+# Retrieving Cert ID
+$ docker trust inspect mydtr/user1/repo1 | jq -r '.[].AdministrativeKeys[] | select(.Name=="Root") | .Keys[].ID'
+9430d6e31e3b3e240957a1b62bbc2d436aafa33726d0fcb50addbf7e2dfa2168
+
+# Using Cert Ids, by specifying 2 repositories by their DCT root ID. Example for using this may be different DTRs or maybe because the repository was initiated on different hosts, therefore having different canonical IDs.
+
+{
+ "content-trust": {
+ "trust-pinning": {
+ "cert-ids": {
+ "mydtr/user1/repo1": [
+ "9430d6e31e3b3e240957a1b62bbc2d436aafa33726d0fcb50addbf7e2dfa2168"
+ ],
+ "mydtr/user2/repo1": [
+ "544cf09f294860f9d5bc953ad80b386063357fd206b37b541bb2c54166f38d08"
+ ]
+ }
+ },
+ "mode": "enforced"
+ }
+}
```
-To invoke a command with DCT enabled regardless of whether or how the `DOCKER_CONTENT_TRUST` variable is set:
+### Using DCT in an offline environment
-```bash
-$ docker build --disable-content-trust=false -t /trusttest:testing .
-```
-
-All of the trusted operations support the `--disable-content-trust` flag.
-
-
-### Push trusted content
-
-To create signed content for a specific image tag, simply enable DCT
-and push a tagged image. If this is the first time you have pushed an image
-using DCT on your system, the session looks like this:
-
-```bash
-$ docker push /trusttest:testing
-The push refers to a repository [docker.io//trusttest] (len: 1)
-9a61b6b1315e: Image already exists
-902b87aaaec9: Image already exists
-latest: digest: sha256:d02adacee0ac7a5be140adb94fa1dae64f4e71a68696e7f8e7cbf9db8dd49418 size: 3220
-Signing and pushing trust metadata
-You are about to create a new root signing key passphrase. This passphrase
-will be used to protect the most sensitive key in your signing system. Please
-choose a long, complex passphrase and be careful to keep the password and the
-key file itself secure and backed up. It is highly recommended that you use a
-password manager to generate the passphrase and keep it safe. There will be no
-way to recover this key. You can find the key in your config directory.
-Enter passphrase for new root key with id a1d96fb:
-Repeat passphrase for new root key with id a1d96fb:
-Enter passphrase for new repository key with id docker.io//trusttest (3a932f1):
-Repeat passphrase for new repository key with id docker.io//trusttest (3a932f1):
-Finished initializing "docker.io//trusttest"
-```
-
-When you push your first tagged image with DCT enabled, the `docker`
-client recognizes this is your first push and:
-
- - alerts you that it is creating a new root key
- - requests a passphrase for the root key
- - generates a root key in the `~/.docker/trust` directory
- - requests a passphrase for the repository key
- - generates a repository key in the `~/.docker/trust` directory
-
-The passphrase you chose for both the root key and your repository key-pair
-should be randomly generated and stored in a *password manager*.
-
-> **NOTE**: If you omit the `testing` tag, DCT is skipped. This is true
-even if DCT is enabled and even if this is your first push.
-
-```bash
-$ docker push /trusttest
-The push refers to a repository [docker.io//trusttest] (len: 1)
-9a61b6b1315e: Image successfully pushed
-902b87aaaec9: Image successfully pushed
-latest: digest: sha256:a9a9c4402604b703bed1c847f6d85faac97686e48c579bd9c3b0fa6694a398fc size: 3220
-No tag specified, skipping trust metadata push
-```
-
-It is skipped because as the message states, you did not supply an image `TAG`
-value. In DCT, signatures are associated with tags.
-
-Once you have a root key on your system, subsequent images repositories
-you create can use that same root key:
-
-```bash
-$ docker push docker.io//otherimage:latest
-The push refers to a repository [docker.io//otherimage] (len: 1)
-a9539b34a6ab: Image successfully pushed
-b3dbab3810fc: Image successfully pushed
-latest: digest: sha256:d2ba1e603661a59940bfad7072eba698b79a8b20ccbb4e3bfb6f9e367ea43939 size: 3346
-Signing and pushing trust metadata
-Enter key passphrase for root key with id a1d96fb:
-Enter passphrase for new repository key with id docker.io//otherimage (bb045e3):
-Repeat passphrase for new repository key with id docker.io//otherimage (bb045e3):
-Finished initializing "docker.io//otherimage"
-```
-
-The new image has its own repository key and timestamp key. The `latest` tag is signed with both of
-these.
-
-
-### Pull image content
-
-A common way to consume an image is to `pull` it. With DCT enabled, the Docker
-client only allows `docker pull` to retrieve signed images. Let's try to pull the image
-you signed and pushed earlier:
+If your engine is unable to communicate to the registry, we can enable DCT to
+trust cached signature data. This is done through the
+`allow-expired-cached-trust-data` variable.
```
-$ docker pull /trusttest:testing
-Pull (1 of 1): /trusttest:testing@sha256:d149ab53f871
-...
-Tagging /trusttest@sha256:d149ab53f871 as docker/trusttest:testing
+{
+ "content-trust": {
+ "trust-pinning": {
+ "official-library-images": true,
+ "root-keys": {
+ "mydtr/user1/*": [
+ "0b6101527b2ac766702e4b40aa2391805b70e5031c04714c748f914e89014403"
+ ]
+ },
+ "cert-ids": {
+ "mydtr/user2/repo1": [
+ "9430d6e31e3b3e240957a1b62bbc2d436aafa33726d0fcb50addbf7e2dfa2168"
+ ],
+ }
+ },
+ "mode": "enforced",
+ "allow-expired-cached-trust-data": true
+ }
+}
```
-In the following example, the command does not specify a tag, so the system uses
-the `latest` tag by default again and the `docker/trusttest:latest` tag is not signed.
+## Client Enforcement with Docker Content Trust
+
+> Note this is supported on Docker Community and Enterprise Engines newer than
+> 17.03.
+
+Currently, content trust is disabled by default in the Docker Client. To enable
+it, set the `DOCKER_CONTENT_TRUST` environment variable to `1`. This prevents
+users from working with tagged images unless they contain a signature.
+
+When DCT is enabled in the Docker client, `docker` CLI commands that operate on
+tagged images must either have content signatures or explicit content hashes.
+The commands that operate with DCT are:
+
+* `push`
+* `build`
+* `create`
+* `pull`
+* `run`
+
+For example, with DCT enabled a `docker pull someimage:latest` only
+succeeds if `someimage:latest` is signed. However, an operation with an explicit
+content hash always succeeds as long as the hash exists:
-```bash
-$ docker pull docker/trusttest
-Using default tag: latest
-no trust data available
```
+$ docker pull dtr.example.com/user/image:1
+Error: remote trust data does not exist for dtr.example.com/user/image: dtr.example.com does not have trust data for dtr.example.com/user/image
-Because the tag `docker/trusttest:latest` is not trusted, the `pull` fails.
+$ docker pull dtr.example.com/user/image@sha256:d149ab53f8718e987c3a3024bb8aa0e2caadf6c0328f1d9d850b2a2a67f2819a
+sha256:ee7491c9c31db1ffb7673d91e9fac5d6354a89d0e97408567e09df069a1687c1: Pulling from user/image
+ff3a5c916c92: Pull complete
+a59a168caba3: Pull complete
+Digest: sha256:ee7491c9c31db1ffb7673d91e9fac5d6354a89d0e97408567e09df069a1687c1
+Status: Downloaded newer image for dtr.example.com/user/image@sha256:ee7491c9c31db1ffb7673d91e9fac5d6354a89d0e97408567e09df069a1687c1
+```
## Related information
-* [Manage keys for content trust](trust_key_mng.md)
-* [Automation with content trust](trust_automation.md)
* [Delegations for content trust](trust_delegation.md)
+* [Automation with content trust](trust_automation.md)
+* [Manage keys for content trust](trust_key_mng.md)
* [Play in a content trust sandbox](trust_sandbox.md)
diff --git a/engine/security/trust/trust_automation.md b/engine/security/trust/trust_automation.md
index 8f57196193..ec40980d0e 100644
--- a/engine/security/trust/trust_automation.md
+++ b/engine/security/trust/trust_automation.md
@@ -4,42 +4,75 @@ keywords: trust, security, docker, documentation, automation
title: Automation with content trust
---
-Your automation systems that pull or build images can also work with trust. Any automation environment must set `DOCKER_CONTENT_TRUST` either manually or in a scripted fashion before processing images.
+It is very common for Docker Content Trust to be built into existing automation
+systems. To allow tools to wrap Docker and push trusted content, there are
+environment variables that can be passed through to the client.
-## Bypass requests for passphrases
-
-To allow tools to wrap docker and push trusted content, there are two
-environment variables that allow you to provide the passphrases without an
-expect script, or typing them in:
-
- - `DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE`
- - `DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE`
-
-Docker attempts to use the contents of these environment variables as passphrase
-for the keys. For example, an image publisher can export the repository `target`
-and `snapshot` passphrases:
-
-```bash
-$ export DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE="u7pEQcGoebUHm6LHe6"
-$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="l7pEQcTKJjUHm6Lpe4"
-```
-
-Then, when pushing a new tag the Docker client does not request these values but signs automatically:
-
-```bash
-$ docker push docker/trusttest:latest
-The push refers to a repository [docker.io/docker/trusttest] (len: 1)
-a9539b34a6ab: Image already exists
-b3dbab3810fc: Image already exists
-latest: digest: sha256:d149ab53f871 size: 3355
-Signing and pushing trust metadata
-```
+This guide follows the steps as described
+[here](content_trust/#signing-images-with-docker-content-trust) so please read
+that and understand its prerequisites.
When working directly with the Notary client, it uses its [own set of environment variables](/notary/reference/client-config.md#environment-variables-optional).
+## Adding a Delegation Private Key
+
+To automate importing a delegation private key to the local Docker trust store, we
+need to pass a passphrase for the new key. This passphrase will be required
+everytime that delegation signs a tag.
+
+```
+$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="mypassphrase123"
+
+$ docker trust key load delegation.key --name jeff
+Loading key from "delegation.key"...
+Successfully imported key from delegation.key
+```
+
+## Adding a Delegation Public Key
+
+If you initialising a repository at the same time as adding a Delegation
+public key, then you will need to use the local Notary Canonical Root Key's
+passphrase to create the repositories trust data. If the repository has already
+been initiated then you only need the repositories passphrase.
+
+```
+# Export the Local Root Key Passphrase if required.
+$ export DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE="rootpassphrase123"
+
+# Export the Repository Passphrase
+$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="repopassphrase123"
+
+# Initialise Repo and Push Delegation
+$ docker trust signer add --key delegation.crt jeff dtr.example.com/admin/demo
+Adding signer "jeff" to dtr.example.com/admin/demo...
+Initializing signed repository for dtr.example.com/admin/demo...
+Successfully initialized "dtr.example.com/admin/demo"
+Successfully added signer: dtr.example.com/admin/demo
+```
+
+## Signing an Image
+
+Finally when signing an image, we will need to export the passphrase of the
+signing key. This was created when the key was loaded into the local Docker
+trust store with `$ docker trust key load`.
+
+```
+$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="mypassphrase123"
+
+$ docker trust sign dtr.example.com/admin/demo:1
+Signing and pushing trust data for local image dtr.example.com/admin/demo:1, may overwrite remote trust data
+The push refers to repository [dtr.example.com/admin/demo]
+428c97da766c: Layer already exists
+2: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524
+Signing and pushing trust metadata
+Successfully signed dtr.example.com/admin/demo:1
+```
+
## Building with content trust
-You can also build with content trust. Before running the `docker build` command, you should set the environment variable `DOCKER_CONTENT_TRUST` either manually or in a scripted fashion. Consider the simple Dockerfile below.
+You can also build with content trust. Before running the `docker build` command,
+you should set the environment variable `DOCKER_CONTENT_TRUST` either manually or
+in a scripted fashion. Consider the simple Dockerfile below.
```Dockerfile
FROM docker/trusttest:latest
@@ -60,7 +93,8 @@ a9539b34a6ab: Pull complete
Digest: sha256:d149ab53f871
```
-If content trust is enabled, building from a Dockerfile that relies on tag without trust data, causes the build command to fail:
+If content trust is enabled, building from a Dockerfile that relies on tag
+without trust data, causes the build command to fail:
```bash
$ docker build -t docker/trusttest:testing .
@@ -69,7 +103,7 @@ unable to process Dockerfile: No trust data for notrust
## Related information
+* [Delegations for content trust](trust_delegation.md)
* [Content trust in Docker](content_trust.md)
* [Manage keys for content trust](trust_key_mng.md)
-* [Delegations for content trust](trust_delegation.md)
* [Play in a content trust sandbox](trust_sandbox.md)
diff --git a/engine/security/trust/trust_delegation.md b/engine/security/trust/trust_delegation.md
index 65803ed669..46a48639a4 100644
--- a/engine/security/trust/trust_delegation.md
+++ b/engine/security/trust/trust_delegation.md
@@ -4,48 +4,74 @@ keywords: trust, security, delegations, keys, repository
title: Delegations for content trust
---
-Docker Engine supports the usage of the `targets/releases` delegation as the
-canonical source of a trusted image tag.
+Delegations in Docker Content Trust (DCT) allow you to control who can and cannot sign
+an image tag. A delegation will have a pair of delegation keys, public and
+private. A delegation could contain multiple pairs of keys, contributors, to
+allow multiple users to be part of a delegation, and to support key rotation.
-Using this delegation allows you to collaborate with other publishers without
-sharing your repository key, which is a combination of your targets and snapshot keys.
-See [Manage keys for content trust](trust_key_mng.md) for more information).
-Collaborators can keep their own delegation keys private.
+The most important delegation within Docker Content Trust is `targets/releases`.
+This is seen as the canonical source of a trusted image tag, and without a
+contributor's key being under this delegation, they will be unable to sign a tag.
-The `targets/releases` delegation is currently an optional feature - in order
-to set up delegations, you must use the Notary CLI:
+Fortunately when using the `$ docker trust` commands, we will automatically
+initialise a repository, manage the repository keys, and when a collaborator
+gets added with `docker trust signer add` we will add their key to the
+`targets/releases` delegation automatically.
-1. [Download the client](https://github.com/docker/notary/releases) and ensure that it is
-available on your path
+## Configuring the Notary CLI
-2. Create a configuration file at `~/.notary/config.json` with the following content:
+Some of the more advanced features of DCT require the Notary
+CLI. To install and configure the Notary CLI:
- ```
- {
- "trust_dir" : "~/.docker/trust",
- "remote_server": {
- "url": "https://notary.docker.io"
- }
- }
- ```
+1) Download the [client](https://github.com/theupdateframework/notary/releases)
+and ensure that it is available on your path
- This tells Notary where the Docker Content Trust data is stored, and to use the
- Notary server used for images in Docker Hub.
+2) Create a configuration file at ~/.notary/config.json with the following content:
-For more detailed information about how to use Notary outside of the default
-Docker Content Trust use cases, refer to the
-[Notary CLI documentation](/notary/getting_started.md).
+```
+{
+ "trust_dir" : "~/.docker/trust",
+ "remote_server": {
+ "url": "https://dtr.example.com"
+ "root_ca": "../.docker/ca.pem"
+ }
+}
+```
-When publishing and listing delegation changes using the Notary client,
-your Docker Hub credentials are required.
+This configuration file will tell Notary where the local Docker Trust data is
+stored, as well as which Notary server to use by default.
-## Generating delegation keys
+For more detailed information about how to use Notary outside of the
+Docker Content Trust use cases, refer to the Notary Cli documentation
+[here](https://github.com/theupdateframework/notary/blob/master/docs/command_reference.md)
-Your collaborator needs to generate a private key (either RSA or ECDSA)
-and give you the public key so that you can add it to the `targets/releases`
-delegation.
+## Creating Delegation Keys
+
+A prerequisite to adding your first contributor is a pair of delegation keys.
+These keys can either be generated locally using `$ docker trust`, generated by
+a certificate authority, or can be taken from a Universal Control Plane's
+[Client Bundle](ee/ucp/user-access/cli/#download-client-certificates).
+
+### Using Docker Trust to Generate Keys
+
+Docker trust has a built-in generator for a delegation key pair,
+`$ docker trust generate `. Running this command will automatically load
+the delegation private key in to the local Docker trust store.
+
+```
+$ docker trust key generate jeff
+Generating key for jeff...
+Enter passphrase for new jeff key with ID 9deed25:
+Repeat passphrase for new jeff key with ID 9deed25:
+Successfully generated and loaded private key. Corresponding public key available: /home/ubuntu/Documents/mytrustdir/jeff.pub
+```
+
+### Manually Generating Keys
+
+If you need to manually generate a private key (either RSA or ECDSA) and a x509
+certificate containing the public key, you can use local tools like openssl or
+cfssl along with a local or company-wide Certificate Authority.
-The easiest way for them to generate these keys is with OpenSSL.
Here is an example of how to generate a 2048-bit RSA portion key (all RSA keys
must be at least 2048 bits):
@@ -79,137 +105,340 @@ $ openssl x509 -req -sha256 -days 365 -in delegation.csr -signkey delegation.key
Then they need to give you `delegation.crt`, whether it is self-signed or signed
by a CA.
-## Adding a delegation key to an existing repository
-
-If your repository was created using a version of Docker Engine prior to 1.11,
-then before adding any delegations, you should rotate the snapshot key to the server
-so that collaborators don't need your snapshot key to sign and publish tags:
+Finally you will need to add the private key into your local Docker trust store.
```
-$ notary key rotate docker.io// snapshot -r
+$ docker trust key load delegation.key --name jeff
+Loading key from "delegation.key"...
+Enter passphrase for new jeff key with ID 8ae710e:
+Repeat passphrase for new jeff key with ID 8ae710e:
+Successfully imported key from delegation.key
```
-This tells Notary to rotate a key for your particular image repository. The
-`docker.io/` prefix is required. `snapshot -r` specifies that you want
-to rotate the snapshot key and that you want the server to manage it (`-r`
-stands for "remote").
+### Using Universal Control Plane's Client Bundles
-When adding a delegation, your must acquire
-[the PEM-encoded x509 certificate with the public key](#generating-delegation-keys)
-of the collaborator you wish to delegate to.
+Universal Control Plane (UCP) manages CLI and API access to its clusters through
+certificates generated in a Client Bundle. These certificates and keys can be
+used as a delegation key pair. Within each client bundle there is a unique
+private key (`key.pem`) and x509 certificate containing a public key
+(`cert.pem`).
-Assuming you have the certificate `delegation.crt`, you can add a delegation
-for this user and then publish the delegation change:
+1) Download a user's client bundle from the
+[Universal Control Plane](ee/ucp/user-access/cli/#download-client-certificates).
+
+2) Extract the client bundle into your current directory
+
+3) Load the private key into your local Docker trust store
```
-$ notary delegation add docker.io// targets/releases delegation.crt --all-paths
-$ notary publish docker.io/