From 3933523acdaf977e3db236ac849c480d2000c7b6 Mon Sep 17 00:00:00 2001 From: Andy Clemenko Date: Thu, 10 Nov 2016 12:03:43 -0500 Subject: [PATCH 01/32] Updating the offline update the link for UCP 1.1.4 and DTR 2.0.4 --- datacenter/ucp/1.1/installation/install-offline.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datacenter/ucp/1.1/installation/install-offline.md b/datacenter/ucp/1.1/installation/install-offline.md index fba7f418f7..494dc7fd9b 100644 --- a/datacenter/ucp/1.1/installation/install-offline.md +++ b/datacenter/ucp/1.1/installation/install-offline.md @@ -23,7 +23,7 @@ all the images. Then you copy that package to the host where you’ll install UC Docker Datacenter components: ```none - $ wget https://packages.docker.com/caas/ucp-1.1.3_dtr-2.0.3.tar.gz -O docker-datacenter.tar.gz + $ wget https://packages.docker.com/caas/ucp-1.1.4_dtr-2.0.4.tar.gz -O docker-datacenter.tar.gz ``` 2. Transfer the package to the offline node. From 186dfbb3369d19a95d7a5cd3680c98c0379480a1 Mon Sep 17 00:00:00 2001 From: David Williamson Date: Fri, 11 Nov 2016 14:24:39 -0800 Subject: [PATCH 02/32] Update compose example to work better with swarm Update the compose example: * Remove the `links` directive. This allows swarm to distribute containers across available nodes. (with the `links` directive, swarm will be forced to run both containers on the same node.) Note that the `depends_on` directive is sufficient to ensure correct container start up sequence. * Use a docker volume instead of bind mounting a local directory. * Give docker-compose commands for shutting down the Wordpress app, showing how to preserve or remove the persisted data in the volume. Verified proposed change works correctly in both a swarm and a non-swarm environment. --- compose/wordpress.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/compose/wordpress.md b/compose/wordpress.md index ab057efb95..83cadb09eb 100644 --- a/compose/wordpress.md +++ b/compose/wordpress.md @@ -33,7 +33,7 @@ with Docker containers. This quick-start guide demonstrates how to use Compose t db: image: mysql:5.7 volumes: - - "./.data/db:/var/lib/mysql" + - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: wordpress @@ -45,19 +45,17 @@ with Docker containers. This quick-start guide demonstrates how to use Compose t depends_on: - db image: wordpress:latest - links: - - db ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_PASSWORD: wordpress + volumes: + db_data: ``` - **NOTE**: The folder `./.data/db` will be automatically created in the project directory - alongside the `docker-compose.yml` which will persist any updates made by wordpress to the - database. + **NOTE**: The docker volume `db_data` will persist any updates made by wordpress to the database. [Learn more about docker volumes](../engine/tutorials/dockervolumes.md) ### Build the project @@ -97,6 +95,10 @@ At this point, WordPress should be running on port `8000` of your Docker Host, a ![WordPress Welcome](images/wordpress-welcome.png) +### Shutdown/Clean up +`docker-compose down` will remove the containers and default network, but preserve your wordpress database. +`docker-compose down --volumes` will remove the containers, default network, and the wordpress database. + ## More Compose documentation - [User guide](index.md) @@ -105,4 +107,4 @@ At this point, WordPress should be running on port `8000` of your Docker Host, a - [Get started with Django](django.md) - [Get started with Rails](rails.md) - [Command line reference](./reference/index.md) -- [Compose file reference](compose-file.md) \ No newline at end of file +- [Compose file reference](compose-file.md) From c4d4069279c13ddecc80c18feb4742185b41dd77 Mon Sep 17 00:00:00 2001 From: Kevin Conboy Date: Tue, 15 Nov 2016 09:47:54 -0700 Subject: [PATCH 03/32] Update wordpress.md capital_P_dangit() --- compose/wordpress.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/compose/wordpress.md b/compose/wordpress.md index ab057efb95..f49e3f5636 100644 --- a/compose/wordpress.md +++ b/compose/wordpress.md @@ -23,7 +23,7 @@ with Docker containers. This quick-start guide demonstrates how to use Compose t cd my_wordpress/ 3. Create a `docker-compose.yml` file that will start your - `Wordpress` blog and a separate `MySQL` instance with a volume + `WordPress` blog and a separate `MySQL` instance with a volume mount for data persistence: ```none @@ -91,7 +91,7 @@ If you're using [Docker Machine](/machine/), then `docker-machine ip MACHINE_VM` At this point, WordPress should be running on port `8000` of your Docker Host, and you can complete the "famous five-minute installation" as a WordPress administrator. -**NOTE**: The Wordpress site will not be immediately available on port `8000` because the containers are still being initialized and may take a couple of minutes before the first load. +**NOTE**: The WordPress site will not be immediately available on port `8000` because the containers are still being initialized and may take a couple of minutes before the first load. ![Choose language for WordPress install](images/wordpress-lang.png) @@ -105,4 +105,4 @@ At this point, WordPress should be running on port `8000` of your Docker Host, a - [Get started with Django](django.md) - [Get started with Rails](rails.md) - [Command line reference](./reference/index.md) -- [Compose file reference](compose-file.md) \ No newline at end of file +- [Compose file reference](compose-file.md) From ebb924c3620cfce3b3f1d1a2e119cdbb322c6cba Mon Sep 17 00:00:00 2001 From: Xianlu Bird Date: Wed, 16 Nov 2016 15:40:53 +0800 Subject: [PATCH 04/32] Update reschedule on node fail Update reschedule on node fail --- swarm/scheduler/rescheduling.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/swarm/scheduler/rescheduling.md b/swarm/scheduler/rescheduling.md index 9215639202..d967a7019a 100644 --- a/swarm/scheduler/rescheduling.md +++ b/swarm/scheduler/rescheduling.md @@ -19,7 +19,7 @@ container when a node fails. To set the `on-node-failure` policy with a `reschedule` environment variable: ```bash -$ docker run -d -e "reschedule=on-node-failure" redis +$ docker run -d -e "reschedule:on-node-failure" redis ``` To set the same policy with a `com.docker.swarm.reschedule-policies` label: @@ -55,4 +55,4 @@ Failed to start rescheduled container 2362901cb213da321 ## Related information * [Apply custom metadata](/engine/userguide/labels-custom-metadata/) -* [Environment variables with run](/engine/reference/run/#env-environment-variables) \ No newline at end of file +* [Environment variables with run](/engine/reference/run/#env-environment-variables) From 260128dc73a3d7b5d6d15981eca88f4cfe5bd6aa Mon Sep 17 00:00:00 2001 From: LRubin Date: Wed, 16 Nov 2016 14:26:08 -0800 Subject: [PATCH 05/32] removes references to autotest on push Signed-off-by: LRubin --- docker-cloud/builds/advanced.md | 4 ++-- docker-cloud/builds/automated-build.md | 21 +++++++++++---------- docker-cloud/builds/automated-testing.md | 15 ++++++++------- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/docker-cloud/builds/advanced.md b/docker-cloud/builds/advanced.md index bfb7d1df4f..7649e6a04c 100644 --- a/docker-cloud/builds/advanced.md +++ b/docker-cloud/builds/advanced.md @@ -26,7 +26,7 @@ If you are using these build environment variables in a `docker-compose.test.yml` file for automated testing, declare them in your `sut` service's environment as shown below. -```yml +```none sut: build: . command: run_tests.sh @@ -110,4 +110,4 @@ If you needed to give the resulting image multiple tags, or push the same image ```none docker tag $IMAGE_NAME $DOCKER_REPO:$SOURCE_COMMIT docker push $DOCKER_REPO:$SOURCE_COMMIT -``` \ No newline at end of file +``` diff --git a/docker-cloud/builds/automated-build.md b/docker-cloud/builds/automated-build.md index ffcea8898f..3f8139bd03 100644 --- a/docker-cloud/builds/automated-build.md +++ b/docker-cloud/builds/automated-build.md @@ -13,16 +13,16 @@ repository and automatically push the built image to your Docker repositories. When you set up automated builds (also called autobuilds), you create a list of -branches and tags of the images that you want to build. When you push code to a -source code branch (for example in Github) for one of those listed image tags, -the push uses a webhook to trigger a new build, which produces a Docker image. -The built image is then pushed to the Docker Cloud registry or to an external -registry. +branches and tags that you want to build into Docker images. When you push code +to a source code branch (for example in Github) for one of those listed image +tags, the push uses a webhook to trigger a new build, which produces a Docker +image. The built image is then pushed to the Docker Cloud registry or to an +external registry. If you have automated tests configured, these run after building but before pushing to the registry. You can use these tests to create a continuous -integration workflow. Automated tests do not push images to the registry on -their own. [Learn more about automated image testing here.](automated-testing.md) +integration workflow where a build that fails its tests does not push the built +image. Automated tests do not push images to the registry on their own. [Learn more about automated image testing here.](automated-testing.md) You can also just use `docker push` to push pre-built images to these repositories, even if you have automatic builds set up. @@ -31,7 +31,7 @@ repositories, even if you have automatic builds set up. ## Configure automated build settings -You can configure your repositories in Docker Cloud so that they automatically +You can configure repositories in Docker Cloud so that they automatically build an image each time you push new code to your source provider. If you have [automated tests](automated-testing.md) configured, the new image is only pushed when the tests succeed. @@ -94,7 +94,8 @@ the code repository service where the image's source code is stored. Only branches or tags with autobuild enabled are built, tested, *and* have the resulting image pushed to the repository. Branches with autobuild - disabled will be built for test purposes (if enabled at the repository level), but not pushed. + disabled will be built for test purposes (if enabled at the repository + level), but the built Docker image is not pushed to the repository. 10. For each branch or tag, enable or disable the **Build Caching** toggle. @@ -355,4 +356,4 @@ Docker Cloud's [Autotest](automated-testing.md) feature which integrates seamlessly with autobuild and autoredeploy. > **Note**: While the Autotest feature builds an image for testing purposes, it -does not push the resulting image to Docker Cloud or the external registry. \ No newline at end of file +does not push the resulting image to Docker Cloud or the external registry. diff --git a/docker-cloud/builds/automated-testing.md b/docker-cloud/builds/automated-testing.md index c84e42b829..ccac3e0d5e 100644 --- a/docker-cloud/builds/automated-testing.md +++ b/docker-cloud/builds/automated-testing.md @@ -6,9 +6,9 @@ redirect_from: title: Automated repository tests --- -Docker Cloud can automatically test changes pushed to your source code -repositories using containers. You can enable `Autotest` on [any Docker Cloud repository](repos.md) to run tests at each push to the source code repository, -similar to a continuous integration testing service. +Docker Cloud can automatically test changes to your source code repositories +using containers. You can enable `Autotest` on [any Docker Cloud repository](repos.md) to run tests on each pull request to the source code +repository to create a continuous integration testing service. Enabling `Autotest` builds an image for testing purposes, but does **not** automatically push the built image to the Docker repository. If you want to push @@ -22,7 +22,7 @@ tests to be run. For example: -```yml +```none sut: build: . command: run_tests.sh @@ -78,8 +78,9 @@ Docker repository, regardless of the Autotest settings. > **Note**: For security purposes, autotest on _external pull requests_ is disabled on public repositories. If you select this option on a public - repository, tests will still run on pushes to the source code repository, - but not on pull requests. + repository, tests will still run on _internal_ pull requests (for example + from one branch into another inside the code repository) but not on for + external pull requests. 9. Click **Save** to save the settings, or click **Save and build** to save and run an initial test. @@ -91,4 +92,4 @@ From the repository's details page, click **Timeline**. From this tab you can see any pending, in-progress, successful, and failed builds and test runs for the repository. -You can click any timeline entry to view the logs for each test run. \ No newline at end of file +You can click any timeline entry to view the logs for each test run. From 8eaa59ff8bce35c1404b4e82de339d5313fdfde6 Mon Sep 17 00:00:00 2001 From: John Mulhausen Date: Wed, 16 Nov 2016 14:57:20 -0800 Subject: [PATCH 06/32] Make nav-sub persist in mobile --- css/allcss.css | 22993 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 22644 insertions(+), 349 deletions(-) diff --git a/css/allcss.css b/css/allcss.css index 532a6f0d89..d5063f16fb 100644 --- a/css/allcss.css +++ b/css/allcss.css @@ -4,7 +4,1860 @@ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ -.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,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");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} +.ui-helper-hidden { + display: none +} + +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px +} + +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none +} + +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse +} + +.ui-helper-clearfix:after { + clear: both +} + +.ui-helper-clearfix { + min-height: 0 +} + +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter: Alpha(Opacity=0) +} + +.ui-front { + z-index: 100 +} + +.ui-state-disabled { + cursor: default!important +} + +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat +} + +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100% +} + +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + min-height: 0; + font-size: 100% +} + +.ui-accordion .ui-accordion-icons { + padding-left: 2.2em +} + +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 2.2em +} + +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px +} + +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto +} + +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default +} + +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible +} + +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none +} + +.ui-button-icon-only { + width: 2.2em +} + +button.ui-button-icon-only { + width: 2.4em +} + +.ui-button-icons-only { + width: 3.4em +} + +button.ui-button-icons-only { + width: 3.7em +} + +.ui-button .ui-button-text { + display: block; + line-height: normal +} + +.ui-button-text-only .ui-button-text { + padding: .4em 1em +} + +.ui-button-icon-only .ui-button-text, +.ui-button-icons-only .ui-button-text { + padding: .4em; + text-indent: -9999999px +} + +.ui-button-text-icon-primary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 1em .4em 2.1em +} + +.ui-button-text-icon-secondary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 2.1em .4em 1em +} + +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em +} + +input.ui-button { + padding: .4em 1em +} + +.ui-button-icon-only .ui-icon, +.ui-button-text-icon-primary .ui-icon, +.ui-button-text-icon-secondary .ui-icon, +.ui-button-text-icons .ui-icon, +.ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px +} + +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px +} + +.ui-button-text-icon-primary .ui-button-icon-primary, +.ui-button-text-icons .ui-button-icon-primary, +.ui-button-icons-only .ui-button-icon-primary { + left: .5em +} + +.ui-button-text-icon-secondary .ui-button-icon-secondary, +.ui-button-text-icons .ui-button-icon-secondary, +.ui-button-icons-only .ui-button-icon-secondary { + right: .5em +} + +.ui-buttonset { + margin-right: 7px +} + +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em +} + +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0 +} + +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none +} + +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0 +} + +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em +} + +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px +} + +.ui-datepicker .ui-datepicker-prev { + left: 2px +} + +.ui-datepicker .ui-datepicker-next { + right: 2px +} + +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px +} + +.ui-datepicker .ui-datepicker-next-hover { + right: 1px +} + +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px +} + +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center +} + +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0 +} + +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45% +} + +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em +} + +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0 +} + +.ui-datepicker td { + border: 0; + padding: 1px +} + +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none +} + +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0 +} + +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible +} + +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left +} + +.ui-datepicker.ui-datepicker-multi { + width: auto +} + +.ui-datepicker-multi .ui-datepicker-group { + float: left +} + +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em +} + +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50% +} + +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3% +} + +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25% +} + +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0 +} + +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left +} + +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0 +} + +.ui-datepicker-rtl { + direction: rtl +} + +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto +} + +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto +} + +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto +} + +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right +} + +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px +} + +.ui-dialog { + overflow: hidden; + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0 +} + +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative +} + +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis +} + +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px +} + +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto +} + +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em +} + +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right +} + +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer +} + +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px +} + +.ui-draggable .ui-dialog-titlebar { + cursor: move +} + +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none +} + +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: none +} + +.ui-menu .ui-menu { + position: absolute +} + +.ui-menu .ui-menu-item { + position: relative; + margin: 0; + padding: 3px 1em 3px .4em; + cursor: pointer; + min-height: 0; + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7") +} + +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0 +} + +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px +} + +.ui-menu-icons { + position: relative +} + +.ui-menu-icons .ui-menu-item { + padding-left: 2em +} + +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0 +} + +.ui-menu .ui-menu-icon { + left: auto; + right: 0 +} + +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden +} + +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100% +} + +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,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"); + height: 100%; + filter: alpha(opacity=25); + opacity: 0.25 +} + +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none +} + +.ui-resizable { + position: relative +} + +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none +} + +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none +} + +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0 +} + +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0 +} + +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100% +} + +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100% +} + +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px +} + +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px +} + +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px +} + +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px +} + +.ui-selectable { + -ms-touch-action: none; + touch-action: none +} + +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black +} + +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none +} + +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px +} + +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0 +} + +.ui-selectmenu-open { + display: block +} + +.ui-selectmenu-button { + display: inline-block; + overflow: hidden; + position: relative; + text-decoration: none; + cursor: pointer +} + +.ui-selectmenu-button span.ui-icon { + right: 0.5em; + left: auto; + margin-top: -8px; + position: absolute; + top: 50% +} + +.ui-selectmenu-button span.ui-selectmenu-text { + text-align: left; + padding: 0.4em 2.1em 0.4em 1em; + display: block; + line-height: 1.4; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap +} + +.ui-slider { + position: relative; + text-align: left +} + +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none +} + +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0 +} + +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit +} + +.ui-slider-horizontal { + height: .8em +} + +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em +} + +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100% +} + +.ui-slider-horizontal .ui-slider-range-min { + left: 0 +} + +.ui-slider-horizontal .ui-slider-range-max { + right: 0 +} + +.ui-slider-vertical { + width: .8em; + height: 100px +} + +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em +} + +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100% +} + +.ui-slider-vertical .ui-slider-range-min { + bottom: 0 +} + +.ui-slider-vertical .ui-slider-range-max { + top: 0 +} + +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none +} + +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle +} + +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px +} + +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0 +} + +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none +} + +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0 +} + +.ui-spinner-up { + top: 0 +} + +.ui-spinner-down { + bottom: 0 +} + +.ui-spinner .ui-icon-triangle-1-s { + background-position: -65px -16px +} + +.ui-tabs { + position: relative; + padding: .2em +} + +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0 +} + +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap +} + +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text +} + +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer +} + +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none +} + +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa +} + +body .ui-tooltip { + border-width: 2px +} + +.ui-widget { + font-family: Verdana, Arial, sans-serif; + font-size: 1.1em +} + +.ui-widget .ui-widget { + font-size: 1em +} + +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Verdana, Arial, sans-serif; + font-size: 1em +} + +.ui-widget-content { + border: 1px solid #aaa; + background: #fff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x; + color: #222 +} + +.ui-widget-content a { + color: #222 +} + +.ui-widget-header { + border: 1px solid #aaa; + background: #ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; + color: #222; + font-weight: bold +} + +.ui-widget-header a { + color: #222 +} + +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #d3d3d3; + background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #555 +} + +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #555; + text-decoration: none +} + +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #999; + background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121 +} + +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited { + color: #212121; + text-decoration: none +} + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #aaa; + background: #fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121 +} + +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #212121; + text-decoration: none +} + +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fcefa1; + background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; + color: #363636 +} + +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636 +} + +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; + color: #cd0a0a +} + +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a +} + +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a +} + +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold +} + +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter: Alpha(Opacity=70); + font-weight: normal +} + +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter: Alpha(Opacity=35); + background-image: none +} + +.ui-state-disabled .ui-icon { + filter: Alpha(Opacity=35) +} + +.ui-icon { + width: 16px; + height: 16px +} + +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png") +} + +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png") +} + +.ui-state-default .ui-icon { + background-image: url("images/ui-icons_888888_256x240.png") +} + +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png") +} + +.ui-state-active .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png") +} + +.ui-state-highlight .ui-icon { + background-image: url("images/ui-icons_2e83ff_256x240.png") +} + +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cd0a0a_256x240.png") +} + +.ui-icon-blank { + background-position: 16px 16px +} + +.ui-icon-carat-1-n { + background-position: 0 0 +} + +.ui-icon-carat-1-ne { + background-position: -16px 0 +} + +.ui-icon-carat-1-e { + background-position: -32px 0 +} + +.ui-icon-carat-1-se { + background-position: -48px 0 +} + +.ui-icon-carat-1-s { + background-position: -64px 0 +} + +.ui-icon-carat-1-sw { + background-position: -80px 0 +} + +.ui-icon-carat-1-w { + background-position: -96px 0 +} + +.ui-icon-carat-1-nw { + background-position: -112px 0 +} + +.ui-icon-carat-2-n-s { + background-position: -128px 0 +} + +.ui-icon-carat-2-e-w { + background-position: -144px 0 +} + +.ui-icon-triangle-1-n { + background-position: 0 -16px +} + +.ui-icon-triangle-1-ne { + background-position: -16px -16px +} + +.ui-icon-triangle-1-e { + background-position: -32px -16px +} + +.ui-icon-triangle-1-se { + background-position: -48px -16px +} + +.ui-icon-triangle-1-s { + background-position: -64px -16px +} + +.ui-icon-triangle-1-sw { + background-position: -80px -16px +} + +.ui-icon-triangle-1-w { + background-position: -96px -16px +} + +.ui-icon-triangle-1-nw { + background-position: -112px -16px +} + +.ui-icon-triangle-2-n-s { + background-position: -128px -16px +} + +.ui-icon-triangle-2-e-w { + background-position: -144px -16px +} + +.ui-icon-arrow-1-n { + background-position: 0 -32px +} + +.ui-icon-arrow-1-ne { + background-position: -16px -32px +} + +.ui-icon-arrow-1-e { + background-position: -32px -32px +} + +.ui-icon-arrow-1-se { + background-position: -48px -32px +} + +.ui-icon-arrow-1-s { + background-position: -64px -32px +} + +.ui-icon-arrow-1-sw { + background-position: -80px -32px +} + +.ui-icon-arrow-1-w { + background-position: -96px -32px +} + +.ui-icon-arrow-1-nw { + background-position: -112px -32px +} + +.ui-icon-arrow-2-n-s { + background-position: -128px -32px +} + +.ui-icon-arrow-2-ne-sw { + background-position: -144px -32px +} + +.ui-icon-arrow-2-e-w { + background-position: -160px -32px +} + +.ui-icon-arrow-2-se-nw { + background-position: -176px -32px +} + +.ui-icon-arrowstop-1-n { + background-position: -192px -32px +} + +.ui-icon-arrowstop-1-e { + background-position: -208px -32px +} + +.ui-icon-arrowstop-1-s { + background-position: -224px -32px +} + +.ui-icon-arrowstop-1-w { + background-position: -240px -32px +} + +.ui-icon-arrowthick-1-n { + background-position: 0 -48px +} + +.ui-icon-arrowthick-1-ne { + background-position: -16px -48px +} + +.ui-icon-arrowthick-1-e { + background-position: -32px -48px +} + +.ui-icon-arrowthick-1-se { + background-position: -48px -48px +} + +.ui-icon-arrowthick-1-s { + background-position: -64px -48px +} + +.ui-icon-arrowthick-1-sw { + background-position: -80px -48px +} + +.ui-icon-arrowthick-1-w { + background-position: -96px -48px +} + +.ui-icon-arrowthick-1-nw { + background-position: -112px -48px +} + +.ui-icon-arrowthick-2-n-s { + background-position: -128px -48px +} + +.ui-icon-arrowthick-2-ne-sw { + background-position: -144px -48px +} + +.ui-icon-arrowthick-2-e-w { + background-position: -160px -48px +} + +.ui-icon-arrowthick-2-se-nw { + background-position: -176px -48px +} + +.ui-icon-arrowthickstop-1-n { + background-position: -192px -48px +} + +.ui-icon-arrowthickstop-1-e { + background-position: -208px -48px +} + +.ui-icon-arrowthickstop-1-s { + background-position: -224px -48px +} + +.ui-icon-arrowthickstop-1-w { + background-position: -240px -48px +} + +.ui-icon-arrowreturnthick-1-w { + background-position: 0 -64px +} + +.ui-icon-arrowreturnthick-1-n { + background-position: -16px -64px +} + +.ui-icon-arrowreturnthick-1-e { + background-position: -32px -64px +} + +.ui-icon-arrowreturnthick-1-s { + background-position: -48px -64px +} + +.ui-icon-arrowreturn-1-w { + background-position: -64px -64px +} + +.ui-icon-arrowreturn-1-n { + background-position: -80px -64px +} + +.ui-icon-arrowreturn-1-e { + background-position: -96px -64px +} + +.ui-icon-arrowreturn-1-s { + background-position: -112px -64px +} + +.ui-icon-arrowrefresh-1-w { + background-position: -128px -64px +} + +.ui-icon-arrowrefresh-1-n { + background-position: -144px -64px +} + +.ui-icon-arrowrefresh-1-e { + background-position: -160px -64px +} + +.ui-icon-arrowrefresh-1-s { + background-position: -176px -64px +} + +.ui-icon-arrow-4 { + background-position: 0 -80px +} + +.ui-icon-arrow-4-diag { + background-position: -16px -80px +} + +.ui-icon-extlink { + background-position: -32px -80px +} + +.ui-icon-newwin { + background-position: -48px -80px +} + +.ui-icon-refresh { + background-position: -64px -80px +} + +.ui-icon-shuffle { + background-position: -80px -80px +} + +.ui-icon-transfer-e-w { + background-position: -96px -80px +} + +.ui-icon-transferthick-e-w { + background-position: -112px -80px +} + +.ui-icon-folder-collapsed { + background-position: 0 -96px +} + +.ui-icon-folder-open { + background-position: -16px -96px +} + +.ui-icon-document { + background-position: -32px -96px +} + +.ui-icon-document-b { + background-position: -48px -96px +} + +.ui-icon-note { + background-position: -64px -96px +} + +.ui-icon-mail-closed { + background-position: -80px -96px +} + +.ui-icon-mail-open { + background-position: -96px -96px +} + +.ui-icon-suitcase { + background-position: -112px -96px +} + +.ui-icon-comment { + background-position: -128px -96px +} + +.ui-icon-person { + background-position: -144px -96px +} + +.ui-icon-print { + background-position: -160px -96px +} + +.ui-icon-trash { + background-position: -176px -96px +} + +.ui-icon-locked { + background-position: -192px -96px +} + +.ui-icon-unlocked { + background-position: -208px -96px +} + +.ui-icon-bookmark { + background-position: -224px -96px +} + +.ui-icon-tag { + background-position: -240px -96px +} + +.ui-icon-home { + background-position: 0 -112px +} + +.ui-icon-flag { + background-position: -16px -112px +} + +.ui-icon-calendar { + background-position: -32px -112px +} + +.ui-icon-cart { + background-position: -48px -112px +} + +.ui-icon-pencil { + background-position: -64px -112px +} + +.ui-icon-clock { + background-position: -80px -112px +} + +.ui-icon-disk { + background-position: -96px -112px +} + +.ui-icon-calculator { + background-position: -112px -112px +} + +.ui-icon-zoomin { + background-position: -128px -112px +} + +.ui-icon-zoomout { + background-position: -144px -112px +} + +.ui-icon-search { + background-position: -160px -112px +} + +.ui-icon-wrench { + background-position: -176px -112px +} + +.ui-icon-gear { + background-position: -192px -112px +} + +.ui-icon-heart { + background-position: -208px -112px +} + +.ui-icon-star { + background-position: -224px -112px +} + +.ui-icon-link { + background-position: -240px -112px +} + +.ui-icon-cancel { + background-position: 0 -128px +} + +.ui-icon-plus { + background-position: -16px -128px +} + +.ui-icon-plusthick { + background-position: -32px -128px +} + +.ui-icon-minus { + background-position: -48px -128px +} + +.ui-icon-minusthick { + background-position: -64px -128px +} + +.ui-icon-close { + background-position: -80px -128px +} + +.ui-icon-closethick { + background-position: -96px -128px +} + +.ui-icon-key { + background-position: -112px -128px +} + +.ui-icon-lightbulb { + background-position: -128px -128px +} + +.ui-icon-scissors { + background-position: -144px -128px +} + +.ui-icon-clipboard { + background-position: -160px -128px +} + +.ui-icon-copy { + background-position: -176px -128px +} + +.ui-icon-contact { + background-position: -192px -128px +} + +.ui-icon-image { + background-position: -208px -128px +} + +.ui-icon-video { + background-position: -224px -128px +} + +.ui-icon-script { + background-position: -240px -128px +} + +.ui-icon-alert { + background-position: 0 -144px +} + +.ui-icon-info { + background-position: -16px -144px +} + +.ui-icon-notice { + background-position: -32px -144px +} + +.ui-icon-help { + background-position: -48px -144px +} + +.ui-icon-check { + background-position: -64px -144px +} + +.ui-icon-bullet { + background-position: -80px -144px +} + +.ui-icon-radio-on { + background-position: -96px -144px +} + +.ui-icon-radio-off { + background-position: -112px -144px +} + +.ui-icon-pin-w { + background-position: -128px -144px +} + +.ui-icon-pin-s { + background-position: -144px -144px +} + +.ui-icon-play { + background-position: 0 -160px +} + +.ui-icon-pause { + background-position: -16px -160px +} + +.ui-icon-seek-next { + background-position: -32px -160px +} + +.ui-icon-seek-prev { + background-position: -48px -160px +} + +.ui-icon-seek-end { + background-position: -64px -160px +} + +.ui-icon-seek-start { + background-position: -80px -160px +} + +.ui-icon-seek-first { + background-position: -80px -160px +} + +.ui-icon-stop { + background-position: -96px -160px +} + +.ui-icon-eject { + background-position: -112px -160px +} + +.ui-icon-volume-off { + background-position: -128px -160px +} + +.ui-icon-volume-on { + background-position: -144px -160px +} + +.ui-icon-power { + background-position: 0 -176px +} + +.ui-icon-signal-diag { + background-position: -16px -176px +} + +.ui-icon-signal { + background-position: -32px -176px +} + +.ui-icon-battery-0 { + background-position: -48px -176px +} + +.ui-icon-battery-1 { + background-position: -64px -176px +} + +.ui-icon-battery-2 { + background-position: -80px -176px +} + +.ui-icon-battery-3 { + background-position: -96px -176px +} + +.ui-icon-circle-plus { + background-position: 0 -192px +} + +.ui-icon-circle-minus { + background-position: -16px -192px +} + +.ui-icon-circle-close { + background-position: -32px -192px +} + +.ui-icon-circle-triangle-e { + background-position: -48px -192px +} + +.ui-icon-circle-triangle-s { + background-position: -64px -192px +} + +.ui-icon-circle-triangle-w { + background-position: -80px -192px +} + +.ui-icon-circle-triangle-n { + background-position: -96px -192px +} + +.ui-icon-circle-arrow-e { + background-position: -112px -192px +} + +.ui-icon-circle-arrow-s { + background-position: -128px -192px +} + +.ui-icon-circle-arrow-w { + background-position: -144px -192px +} + +.ui-icon-circle-arrow-n { + background-position: -160px -192px +} + +.ui-icon-circle-zoomin { + background-position: -176px -192px +} + +.ui-icon-circle-zoomout { + background-position: -192px -192px +} + +.ui-icon-circle-check { + background-position: -208px -192px +} + +.ui-icon-circlesmall-plus { + background-position: 0 -208px +} + +.ui-icon-circlesmall-minus { + background-position: -16px -208px +} + +.ui-icon-circlesmall-close { + background-position: -32px -208px +} + +.ui-icon-squaresmall-plus { + background-position: -48px -208px +} + +.ui-icon-squaresmall-minus { + background-position: -64px -208px +} + +.ui-icon-squaresmall-close { + background-position: -80px -208px +} + +.ui-icon-grip-dotted-vertical { + background-position: 0 -224px +} + +.ui-icon-grip-dotted-horizontal { + background-position: -16px -224px +} + +.ui-icon-grip-solid-vertical { + background-position: -32px -224px +} + +.ui-icon-grip-solid-horizontal { + background-position: -48px -224px +} + +.ui-icon-gripsmall-diagonal-se { + background-position: -64px -224px +} + +.ui-icon-grip-diagonal-se { + background-position: -80px -224px +} + +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 4px +} + +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 4px +} + +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 4px +} + +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 4px +} + +.ui-widget-overlay { + background: #aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30) +} + +.ui-widget-shadow { + margin: -8px 0 0 -8px; + padding: 8px; + background: #aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); + border-radius: 8px +} + /*! * Bootstrap v3.3.5 (http://getbootstrap.com) @@ -12,21 +1865,10730 @@ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ + /*! * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=16e68b741b5a0f146a4d) * Config saved to config.json and https://gist.github.com/16e68b741b5a0f146a4d - *//*! + */ + + +/*! * Bootstrap v3.3.5 (http://getbootstrap.com) * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover,a.text-primary:focus{color:#286090}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover,a.bg-primary:focus{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.333333px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#fff;background-color:#398439;border-color:#255625}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}} + */ - /*! + +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ + +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100% +} + +body { + margin: 0 +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block +} + +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline +} + +audio:not([controls]) { + display: none; + height: 0 +} + +[hidden], +template { + display: none +} + +a { + background-color: transparent +} + +a:active, +a:hover { + outline: 0 +} + +abbr[title] { + border-bottom: 1px dotted +} + +b, +strong { + font-weight: bold +} + +dfn { + font-style: italic +} + +h1 { + font-size: 2em; + margin: 0.67em 0 +} + +mark { + background: #ff0; + color: #000 +} + +small { + font-size: 80% +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline +} + +sup { + top: -0.5em +} + +sub { + bottom: -0.25em +} + +img { + border: 0 +} + +svg:not(:root) { + overflow: hidden +} + +figure { + margin: 1em 40px +} + +hr { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0 +} + +pre { + overflow: auto +} + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em +} + +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0 +} + +button { + overflow: visible +} + +button, +select { + text-transform: none +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer +} + +button[disabled], +html input[disabled] { + cursor: default +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0 +} + +input { + line-height: normal +} + +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0 +} + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto +} + +input[type="search"] { + -webkit-appearance: textfield; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none +} + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em +} + +legend { + border: 0; + padding: 0 +} + +textarea { + overflow: auto +} + +optgroup { + font-weight: bold +} + +table { + border-collapse: collapse; + border-spacing: 0 +} + +td, +th { + padding: 0 +} + + +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ + +@media print { + *, + *:before, + *:after { + background: transparent !important; + color: #000 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: none !important + } + a, + a:visited { + text-decoration: underline + } + a[href]:after { + content: " (" attr(href) ")" + } + abbr[title]:after { + content: " (" attr(title) ")" + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: "" + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid + } + thead { + display: table-header-group + } + tr, + img { + page-break-inside: avoid + } + img { + max-width: 100% !important + } + p, + h2, + h3 { + orphans: 3; + widows: 3 + } + h2, + h3 { + page-break-after: avoid + } + .navbar { + display: none + } + .btn>.caret, + .dropup>.btn>.caret { + border-top-color: #000 !important + } + .label { + border: 1px solid #000 + } + .table { + border-collapse: collapse !important + } + .table td, + .table th { + background-color: #fff !important + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important + } +} + +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg') +} + +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale +} + +.glyphicon-asterisk:before { + content: "\2a" +} + +.glyphicon-plus:before { + content: "\2b" +} + +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac" +} + +.glyphicon-minus:before { + content: "\2212" +} + +.glyphicon-cloud:before { + content: "\2601" +} + +.glyphicon-envelope:before { + content: "\2709" +} + +.glyphicon-pencil:before { + content: "\270f" +} + +.glyphicon-glass:before { + content: "\e001" +} + +.glyphicon-music:before { + content: "\e002" +} + +.glyphicon-search:before { + content: "\e003" +} + +.glyphicon-heart:before { + content: "\e005" +} + +.glyphicon-star:before { + content: "\e006" +} + +.glyphicon-star-empty:before { + content: "\e007" +} + +.glyphicon-user:before { + content: "\e008" +} + +.glyphicon-film:before { + content: "\e009" +} + +.glyphicon-th-large:before { + content: "\e010" +} + +.glyphicon-th:before { + content: "\e011" +} + +.glyphicon-th-list:before { + content: "\e012" +} + +.glyphicon-ok:before { + content: "\e013" +} + +.glyphicon-remove:before { + content: "\e014" +} + +.glyphicon-zoom-in:before { + content: "\e015" +} + +.glyphicon-zoom-out:before { + content: "\e016" +} + +.glyphicon-off:before { + content: "\e017" +} + +.glyphicon-signal:before { + content: "\e018" +} + +.glyphicon-cog:before { + content: "\e019" +} + +.glyphicon-trash:before { + content: "\e020" +} + +.glyphicon-home:before { + content: "\e021" +} + +.glyphicon-file:before { + content: "\e022" +} + +.glyphicon-time:before { + content: "\e023" +} + +.glyphicon-road:before { + content: "\e024" +} + +.glyphicon-download-alt:before { + content: "\e025" +} + +.glyphicon-download:before { + content: "\e026" +} + +.glyphicon-upload:before { + content: "\e027" +} + +.glyphicon-inbox:before { + content: "\e028" +} + +.glyphicon-play-circle:before { + content: "\e029" +} + +.glyphicon-repeat:before { + content: "\e030" +} + +.glyphicon-refresh:before { + content: "\e031" +} + +.glyphicon-list-alt:before { + content: "\e032" +} + +.glyphicon-lock:before { + content: "\e033" +} + +.glyphicon-flag:before { + content: "\e034" +} + +.glyphicon-headphones:before { + content: "\e035" +} + +.glyphicon-volume-off:before { + content: "\e036" +} + +.glyphicon-volume-down:before { + content: "\e037" +} + +.glyphicon-volume-up:before { + content: "\e038" +} + +.glyphicon-qrcode:before { + content: "\e039" +} + +.glyphicon-barcode:before { + content: "\e040" +} + +.glyphicon-tag:before { + content: "\e041" +} + +.glyphicon-tags:before { + content: "\e042" +} + +.glyphicon-book:before { + content: "\e043" +} + +.glyphicon-bookmark:before { + content: "\e044" +} + +.glyphicon-print:before { + content: "\e045" +} + +.glyphicon-camera:before { + content: "\e046" +} + +.glyphicon-font:before { + content: "\e047" +} + +.glyphicon-bold:before { + content: "\e048" +} + +.glyphicon-italic:before { + content: "\e049" +} + +.glyphicon-text-height:before { + content: "\e050" +} + +.glyphicon-text-width:before { + content: "\e051" +} + +.glyphicon-align-left:before { + content: "\e052" +} + +.glyphicon-align-center:before { + content: "\e053" +} + +.glyphicon-align-right:before { + content: "\e054" +} + +.glyphicon-align-justify:before { + content: "\e055" +} + +.glyphicon-list:before { + content: "\e056" +} + +.glyphicon-indent-left:before { + content: "\e057" +} + +.glyphicon-indent-right:before { + content: "\e058" +} + +.glyphicon-facetime-video:before { + content: "\e059" +} + +.glyphicon-picture:before { + content: "\e060" +} + +.glyphicon-map-marker:before { + content: "\e062" +} + +.glyphicon-adjust:before { + content: "\e063" +} + +.glyphicon-tint:before { + content: "\e064" +} + +.glyphicon-edit:before { + content: "\e065" +} + +.glyphicon-share:before { + content: "\e066" +} + +.glyphicon-check:before { + content: "\e067" +} + +.glyphicon-move:before { + content: "\e068" +} + +.glyphicon-step-backward:before { + content: "\e069" +} + +.glyphicon-fast-backward:before { + content: "\e070" +} + +.glyphicon-backward:before { + content: "\e071" +} + +.glyphicon-play:before { + content: "\e072" +} + +.glyphicon-pause:before { + content: "\e073" +} + +.glyphicon-stop:before { + content: "\e074" +} + +.glyphicon-forward:before { + content: "\e075" +} + +.glyphicon-fast-forward:before { + content: "\e076" +} + +.glyphicon-step-forward:before { + content: "\e077" +} + +.glyphicon-eject:before { + content: "\e078" +} + +.glyphicon-chevron-left:before { + content: "\e079" +} + +.glyphicon-chevron-right:before { + content: "\e080" +} + +.glyphicon-plus-sign:before { + content: "\e081" +} + +.glyphicon-minus-sign:before { + content: "\e082" +} + +.glyphicon-remove-sign:before { + content: "\e083" +} + +.glyphicon-ok-sign:before { + content: "\e084" +} + +.glyphicon-question-sign:before { + content: "\e085" +} + +.glyphicon-info-sign:before { + content: "\e086" +} + +.glyphicon-screenshot:before { + content: "\e087" +} + +.glyphicon-remove-circle:before { + content: "\e088" +} + +.glyphicon-ok-circle:before { + content: "\e089" +} + +.glyphicon-ban-circle:before { + content: "\e090" +} + +.glyphicon-arrow-left:before { + content: "\e091" +} + +.glyphicon-arrow-right:before { + content: "\e092" +} + +.glyphicon-arrow-up:before { + content: "\e093" +} + +.glyphicon-arrow-down:before { + content: "\e094" +} + +.glyphicon-share-alt:before { + content: "\e095" +} + +.glyphicon-resize-full:before { + content: "\e096" +} + +.glyphicon-resize-small:before { + content: "\e097" +} + +.glyphicon-exclamation-sign:before { + content: "\e101" +} + +.glyphicon-gift:before { + content: "\e102" +} + +.glyphicon-leaf:before { + content: "\e103" +} + +.glyphicon-fire:before { + content: "\e104" +} + +.glyphicon-eye-open:before { + content: "\e105" +} + +.glyphicon-eye-close:before { + content: "\e106" +} + +.glyphicon-warning-sign:before { + content: "\e107" +} + +.glyphicon-plane:before { + content: "\e108" +} + +.glyphicon-calendar:before { + content: "\e109" +} + +.glyphicon-random:before { + content: "\e110" +} + +.glyphicon-comment:before { + content: "\e111" +} + +.glyphicon-magnet:before { + content: "\e112" +} + +.glyphicon-chevron-up:before { + content: "\e113" +} + +.glyphicon-chevron-down:before { + content: "\e114" +} + +.glyphicon-retweet:before { + content: "\e115" +} + +.glyphicon-shopping-cart:before { + content: "\e116" +} + +.glyphicon-folder-close:before { + content: "\e117" +} + +.glyphicon-folder-open:before { + content: "\e118" +} + +.glyphicon-resize-vertical:before { + content: "\e119" +} + +.glyphicon-resize-horizontal:before { + content: "\e120" +} + +.glyphicon-hdd:before { + content: "\e121" +} + +.glyphicon-bullhorn:before { + content: "\e122" +} + +.glyphicon-bell:before { + content: "\e123" +} + +.glyphicon-certificate:before { + content: "\e124" +} + +.glyphicon-thumbs-up:before { + content: "\e125" +} + +.glyphicon-thumbs-down:before { + content: "\e126" +} + +.glyphicon-hand-right:before { + content: "\e127" +} + +.glyphicon-hand-left:before { + content: "\e128" +} + +.glyphicon-hand-up:before { + content: "\e129" +} + +.glyphicon-hand-down:before { + content: "\e130" +} + +.glyphicon-circle-arrow-right:before { + content: "\e131" +} + +.glyphicon-circle-arrow-left:before { + content: "\e132" +} + +.glyphicon-circle-arrow-up:before { + content: "\e133" +} + +.glyphicon-circle-arrow-down:before { + content: "\e134" +} + +.glyphicon-globe:before { + content: "\e135" +} + +.glyphicon-wrench:before { + content: "\e136" +} + +.glyphicon-tasks:before { + content: "\e137" +} + +.glyphicon-filter:before { + content: "\e138" +} + +.glyphicon-briefcase:before { + content: "\e139" +} + +.glyphicon-fullscreen:before { + content: "\e140" +} + +.glyphicon-dashboard:before { + content: "\e141" +} + +.glyphicon-paperclip:before { + content: "\e142" +} + +.glyphicon-heart-empty:before { + content: "\e143" +} + +.glyphicon-link:before { + content: "\e144" +} + +.glyphicon-phone:before { + content: "\e145" +} + +.glyphicon-pushpin:before { + content: "\e146" +} + +.glyphicon-usd:before { + content: "\e148" +} + +.glyphicon-gbp:before { + content: "\e149" +} + +.glyphicon-sort:before { + content: "\e150" +} + +.glyphicon-sort-by-alphabet:before { + content: "\e151" +} + +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152" +} + +.glyphicon-sort-by-order:before { + content: "\e153" +} + +.glyphicon-sort-by-order-alt:before { + content: "\e154" +} + +.glyphicon-sort-by-attributes:before { + content: "\e155" +} + +.glyphicon-sort-by-attributes-alt:before { + content: "\e156" +} + +.glyphicon-unchecked:before { + content: "\e157" +} + +.glyphicon-expand:before { + content: "\e158" +} + +.glyphicon-collapse-down:before { + content: "\e159" +} + +.glyphicon-collapse-up:before { + content: "\e160" +} + +.glyphicon-log-in:before { + content: "\e161" +} + +.glyphicon-flash:before { + content: "\e162" +} + +.glyphicon-log-out:before { + content: "\e163" +} + +.glyphicon-new-window:before { + content: "\e164" +} + +.glyphicon-record:before { + content: "\e165" +} + +.glyphicon-save:before { + content: "\e166" +} + +.glyphicon-open:before { + content: "\e167" +} + +.glyphicon-saved:before { + content: "\e168" +} + +.glyphicon-import:before { + content: "\e169" +} + +.glyphicon-export:before { + content: "\e170" +} + +.glyphicon-send:before { + content: "\e171" +} + +.glyphicon-floppy-disk:before { + content: "\e172" +} + +.glyphicon-floppy-saved:before { + content: "\e173" +} + +.glyphicon-floppy-remove:before { + content: "\e174" +} + +.glyphicon-floppy-save:before { + content: "\e175" +} + +.glyphicon-floppy-open:before { + content: "\e176" +} + +.glyphicon-credit-card:before { + content: "\e177" +} + +.glyphicon-transfer:before { + content: "\e178" +} + +.glyphicon-cutlery:before { + content: "\e179" +} + +.glyphicon-header:before { + content: "\e180" +} + +.glyphicon-compressed:before { + content: "\e181" +} + +.glyphicon-earphone:before { + content: "\e182" +} + +.glyphicon-phone-alt:before { + content: "\e183" +} + +.glyphicon-tower:before { + content: "\e184" +} + +.glyphicon-stats:before { + content: "\e185" +} + +.glyphicon-sd-video:before { + content: "\e186" +} + +.glyphicon-hd-video:before { + content: "\e187" +} + +.glyphicon-subtitles:before { + content: "\e188" +} + +.glyphicon-sound-stereo:before { + content: "\e189" +} + +.glyphicon-sound-dolby:before { + content: "\e190" +} + +.glyphicon-sound-5-1:before { + content: "\e191" +} + +.glyphicon-sound-6-1:before { + content: "\e192" +} + +.glyphicon-sound-7-1:before { + content: "\e193" +} + +.glyphicon-copyright-mark:before { + content: "\e194" +} + +.glyphicon-registration-mark:before { + content: "\e195" +} + +.glyphicon-cloud-download:before { + content: "\e197" +} + +.glyphicon-cloud-upload:before { + content: "\e198" +} + +.glyphicon-tree-conifer:before { + content: "\e199" +} + +.glyphicon-tree-deciduous:before { + content: "\e200" +} + +.glyphicon-cd:before { + content: "\e201" +} + +.glyphicon-save-file:before { + content: "\e202" +} + +.glyphicon-open-file:before { + content: "\e203" +} + +.glyphicon-level-up:before { + content: "\e204" +} + +.glyphicon-copy:before { + content: "\e205" +} + +.glyphicon-paste:before { + content: "\e206" +} + +.glyphicon-alert:before { + content: "\e209" +} + +.glyphicon-equalizer:before { + content: "\e210" +} + +.glyphicon-king:before { + content: "\e211" +} + +.glyphicon-queen:before { + content: "\e212" +} + +.glyphicon-pawn:before { + content: "\e213" +} + +.glyphicon-bishop:before { + content: "\e214" +} + +.glyphicon-knight:before { + content: "\e215" +} + +.glyphicon-baby-formula:before { + content: "\e216" +} + +.glyphicon-tent:before { + content: "\26fa" +} + +.glyphicon-blackboard:before { + content: "\e218" +} + +.glyphicon-bed:before { + content: "\e219" +} + +.glyphicon-apple:before { + content: "\f8ff" +} + +.glyphicon-erase:before { + content: "\e221" +} + +.glyphicon-hourglass:before { + content: "\231b" +} + +.glyphicon-lamp:before { + content: "\e223" +} + +.glyphicon-duplicate:before { + content: "\e224" +} + +.glyphicon-piggy-bank:before { + content: "\e225" +} + +.glyphicon-scissors:before { + content: "\e226" +} + +.glyphicon-bitcoin:before { + content: "\e227" +} + +.glyphicon-btc:before { + content: "\e227" +} + +.glyphicon-xbt:before { + content: "\e227" +} + +.glyphicon-yen:before { + content: "\00a5" +} + +.glyphicon-jpy:before { + content: "\00a5" +} + +.glyphicon-ruble:before { + content: "\20bd" +} + +.glyphicon-rub:before { + content: "\20bd" +} + +.glyphicon-scale:before { + content: "\e230" +} + +.glyphicon-ice-lolly:before { + content: "\e231" +} + +.glyphicon-ice-lolly-tasted:before { + content: "\e232" +} + +.glyphicon-education:before { + content: "\e233" +} + +.glyphicon-option-horizontal:before { + content: "\e234" +} + +.glyphicon-option-vertical:before { + content: "\e235" +} + +.glyphicon-menu-hamburger:before { + content: "\e236" +} + +.glyphicon-modal-window:before { + content: "\e237" +} + +.glyphicon-oil:before { + content: "\e238" +} + +.glyphicon-grain:before { + content: "\e239" +} + +.glyphicon-sunglasses:before { + content: "\e240" +} + +.glyphicon-text-size:before { + content: "\e241" +} + +.glyphicon-text-color:before { + content: "\e242" +} + +.glyphicon-text-background:before { + content: "\e243" +} + +.glyphicon-object-align-top:before { + content: "\e244" +} + +.glyphicon-object-align-bottom:before { + content: "\e245" +} + +.glyphicon-object-align-horizontal:before { + content: "\e246" +} + +.glyphicon-object-align-left:before { + content: "\e247" +} + +.glyphicon-object-align-vertical:before { + content: "\e248" +} + +.glyphicon-object-align-right:before { + content: "\e249" +} + +.glyphicon-triangle-right:before { + content: "\e250" +} + +.glyphicon-triangle-left:before { + content: "\e251" +} + +.glyphicon-triangle-bottom:before { + content: "\e252" +} + +.glyphicon-triangle-top:before { + content: "\e253" +} + +.glyphicon-console:before { + content: "\e254" +} + +.glyphicon-superscript:before { + content: "\e255" +} + +.glyphicon-subscript:before { + content: "\e256" +} + +.glyphicon-menu-left:before { + content: "\e257" +} + +.glyphicon-menu-right:before { + content: "\e258" +} + +.glyphicon-menu-down:before { + content: "\e259" +} + +.glyphicon-menu-up:before { + content: "\e260" +} + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0) +} + +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit +} + +a { + color: #337ab7; + text-decoration: none +} + +a:hover, +a:focus { + color: #23527c; + text-decoration: underline +} + +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px +} + +figure { + margin: 0 +} + +img { + vertical-align: middle +} + +.img-responsive, +.thumbnail>img, +.thumbnail a>img, +.carousel-inner>.item>img, +.carousel-inner>.item>a>img { + display: block; + max-width: 100%; + height: auto +} + +.img-rounded { + border-radius: 6px +} + +.img-thumbnail { + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto +} + +.img-circle { + border-radius: 50% +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0 +} + +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto +} + +[role="button"] { + cursor: pointer +} + +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777 +} + +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px +} + +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65% +} + +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px +} + +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75% +} + +h1, +.h1 { + font-size: 36px +} + +h2, +.h2 { + font-size: 30px +} + +h3, +.h3 { + font-size: 24px +} + +h4, +.h4 { + font-size: 18px +} + +h5, +.h5 { + font-size: 14px +} + +h6, +.h6 { + font-size: 12px +} + +p { + margin: 0 0 10px +} + +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4 +} + +@media (min-width:768px) { + .lead { + font-size: 21px + } +} + +small, +.small { + font-size: 85% +} + +mark, +.mark { + background-color: #fcf8e3; + padding: .2em +} + +.text-left { + text-align: left +} + +.text-right { + text-align: right +} + +.text-center { + text-align: center +} + +.text-justify { + text-align: justify +} + +.text-nowrap { + white-space: nowrap +} + +.text-lowercase { + text-transform: lowercase +} + +.text-uppercase { + text-transform: uppercase +} + +.text-capitalize { + text-transform: capitalize +} + +.text-muted { + color: #777 +} + +.text-primary { + color: #337ab7 +} + +a.text-primary:hover, +a.text-primary:focus { + color: #286090 +} + +.text-success { + color: #3c763d +} + +a.text-success:hover, +a.text-success:focus { + color: #2b542c +} + +.text-info { + color: #31708f +} + +a.text-info:hover, +a.text-info:focus { + color: #245269 +} + +.text-warning { + color: #8a6d3b +} + +a.text-warning:hover, +a.text-warning:focus { + color: #66512c +} + +.text-danger { + color: #a94442 +} + +a.text-danger:hover, +a.text-danger:focus { + color: #843534 +} + +.bg-primary { + color: #fff; + background-color: #337ab7 +} + +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #286090 +} + +.bg-success { + background-color: #dff0d8 +} + +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3 +} + +.bg-info { + background-color: #d9edf7 +} + +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee +} + +.bg-warning { + background-color: #fcf8e3 +} + +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5 +} + +.bg-danger { + background-color: #f2dede +} + +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9 +} + +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee +} + +ul, +ol { + margin-top: 0; + margin-bottom: 10px +} + +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0 +} + +.list-unstyled { + padding-left: 0; + list-style: none +} + +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px +} + +.list-inline>li { + display: inline-block; + padding-left: 5px; + padding-right: 5px +} + +dl { + margin-top: 0; + margin-bottom: 20px +} + +dt, +dd { + line-height: 1.42857143 +} + +dt { + font-weight: bold +} + +dd { + margin-left: 0 +} + +@media (min-width:768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap + } + .dl-horizontal dd { + margin-left: 180px + } +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777 +} + +.initialism { + font-size: 90%; + text-transform: uppercase +} + +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee +} + +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0 +} + +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777 +} + +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0' +} + +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eee; + border-left: 0; + text-align: right +} + +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: '' +} + +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014' +} + +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143 +} + +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace +} + +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25) +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + word-break: break-all; + word-wrap: break-word; + color: #333; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0 +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll +} + +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px +} + +@media (min-width:768px) { + .container { + width: 750px + } +} + +@media (min-width:992px) { + .container { + width: 970px + } +} + +@media (min-width:1200px) { + .container { + width: 1170px + } +} + +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px +} + +.row { + margin-left: -15px; + margin-right: -15px +} + +.col-xs-1, +.col-sm-1, +.col-md-1, +.col-lg-1, +.col-xs-2, +.col-sm-2, +.col-md-2, +.col-lg-2, +.col-xs-3, +.col-sm-3, +.col-md-3, +.col-lg-3, +.col-xs-4, +.col-sm-4, +.col-md-4, +.col-lg-4, +.col-xs-5, +.col-sm-5, +.col-md-5, +.col-lg-5, +.col-xs-6, +.col-sm-6, +.col-md-6, +.col-lg-6, +.col-xs-7, +.col-sm-7, +.col-md-7, +.col-lg-7, +.col-xs-8, +.col-sm-8, +.col-md-8, +.col-lg-8, +.col-xs-9, +.col-sm-9, +.col-md-9, +.col-lg-9, +.col-xs-10, +.col-sm-10, +.col-md-10, +.col-lg-10, +.col-xs-11, +.col-sm-11, +.col-md-11, +.col-lg-11, +.col-xs-12, +.col-sm-12, +.col-md-12, +.col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px +} + +.col-xs-1, +.col-xs-2, +.col-xs-3, +.col-xs-4, +.col-xs-5, +.col-xs-6, +.col-xs-7, +.col-xs-8, +.col-xs-9, +.col-xs-10, +.col-xs-11, +.col-xs-12 { + float: left +} + +.col-xs-12 { + width: 100% +} + +.col-xs-11 { + width: 91.66666667% +} + +.col-xs-10 { + width: 83.33333333% +} + +.col-xs-9 { + width: 75% +} + +.col-xs-8 { + width: 66.66666667% +} + +.col-xs-7 { + width: 58.33333333% +} + +.col-xs-6 { + width: 50% +} + +.col-xs-5 { + width: 41.66666667% +} + +.col-xs-4 { + width: 33.33333333% +} + +.col-xs-3 { + width: 25% +} + +.col-xs-2 { + width: 16.66666667% +} + +.col-xs-1 { + width: 8.33333333% +} + +.col-xs-pull-12 { + right: 100% +} + +.col-xs-pull-11 { + right: 91.66666667% +} + +.col-xs-pull-10 { + right: 83.33333333% +} + +.col-xs-pull-9 { + right: 75% +} + +.col-xs-pull-8 { + right: 66.66666667% +} + +.col-xs-pull-7 { + right: 58.33333333% +} + +.col-xs-pull-6 { + right: 50% +} + +.col-xs-pull-5 { + right: 41.66666667% +} + +.col-xs-pull-4 { + right: 33.33333333% +} + +.col-xs-pull-3 { + right: 25% +} + +.col-xs-pull-2 { + right: 16.66666667% +} + +.col-xs-pull-1 { + right: 8.33333333% +} + +.col-xs-pull-0 { + right: auto +} + +.col-xs-push-12 { + left: 100% +} + +.col-xs-push-11 { + left: 91.66666667% +} + +.col-xs-push-10 { + left: 83.33333333% +} + +.col-xs-push-9 { + left: 75% +} + +.col-xs-push-8 { + left: 66.66666667% +} + +.col-xs-push-7 { + left: 58.33333333% +} + +.col-xs-push-6 { + left: 50% +} + +.col-xs-push-5 { + left: 41.66666667% +} + +.col-xs-push-4 { + left: 33.33333333% +} + +.col-xs-push-3 { + left: 25% +} + +.col-xs-push-2 { + left: 16.66666667% +} + +.col-xs-push-1 { + left: 8.33333333% +} + +.col-xs-push-0 { + left: auto +} + +.col-xs-offset-12 { + margin-left: 100% +} + +.col-xs-offset-11 { + margin-left: 91.66666667% +} + +.col-xs-offset-10 { + margin-left: 83.33333333% +} + +.col-xs-offset-9 { + margin-left: 75% +} + +.col-xs-offset-8 { + margin-left: 66.66666667% +} + +.col-xs-offset-7 { + margin-left: 58.33333333% +} + +.col-xs-offset-6 { + margin-left: 50% +} + +.col-xs-offset-5 { + margin-left: 41.66666667% +} + +.col-xs-offset-4 { + margin-left: 33.33333333% +} + +.col-xs-offset-3 { + margin-left: 25% +} + +.col-xs-offset-2 { + margin-left: 16.66666667% +} + +.col-xs-offset-1 { + margin-left: 8.33333333% +} + +.col-xs-offset-0 { + margin-left: 0 +} + +@media (min-width:768px) { + .col-sm-1, + .col-sm-2, + .col-sm-3, + .col-sm-4, + .col-sm-5, + .col-sm-6, + .col-sm-7, + .col-sm-8, + .col-sm-9, + .col-sm-10, + .col-sm-11, + .col-sm-12 { + float: left + } + .col-sm-12 { + width: 100% + } + .col-sm-11 { + width: 91.66666667% + } + .col-sm-10 { + width: 83.33333333% + } + .col-sm-9 { + width: 75% + } + .col-sm-8 { + width: 66.66666667% + } + .col-sm-7 { + width: 58.33333333% + } + .col-sm-6 { + width: 50% + } + .col-sm-5 { + width: 41.66666667% + } + .col-sm-4 { + width: 33.33333333% + } + .col-sm-3 { + width: 25% + } + .col-sm-2 { + width: 16.66666667% + } + .col-sm-1 { + width: 8.33333333% + } + .col-sm-pull-12 { + right: 100% + } + .col-sm-pull-11 { + right: 91.66666667% + } + .col-sm-pull-10 { + right: 83.33333333% + } + .col-sm-pull-9 { + right: 75% + } + .col-sm-pull-8 { + right: 66.66666667% + } + .col-sm-pull-7 { + right: 58.33333333% + } + .col-sm-pull-6 { + right: 50% + } + .col-sm-pull-5 { + right: 41.66666667% + } + .col-sm-pull-4 { + right: 33.33333333% + } + .col-sm-pull-3 { + right: 25% + } + .col-sm-pull-2 { + right: 16.66666667% + } + .col-sm-pull-1 { + right: 8.33333333% + } + .col-sm-pull-0 { + right: auto + } + .col-sm-push-12 { + left: 100% + } + .col-sm-push-11 { + left: 91.66666667% + } + .col-sm-push-10 { + left: 83.33333333% + } + .col-sm-push-9 { + left: 75% + } + .col-sm-push-8 { + left: 66.66666667% + } + .col-sm-push-7 { + left: 58.33333333% + } + .col-sm-push-6 { + left: 50% + } + .col-sm-push-5 { + left: 41.66666667% + } + .col-sm-push-4 { + left: 33.33333333% + } + .col-sm-push-3 { + left: 25% + } + .col-sm-push-2 { + left: 16.66666667% + } + .col-sm-push-1 { + left: 8.33333333% + } + .col-sm-push-0 { + left: auto + } + .col-sm-offset-12 { + margin-left: 100% + } + .col-sm-offset-11 { + margin-left: 91.66666667% + } + .col-sm-offset-10 { + margin-left: 83.33333333% + } + .col-sm-offset-9 { + margin-left: 75% + } + .col-sm-offset-8 { + margin-left: 66.66666667% + } + .col-sm-offset-7 { + margin-left: 58.33333333% + } + .col-sm-offset-6 { + margin-left: 50% + } + .col-sm-offset-5 { + margin-left: 41.66666667% + } + .col-sm-offset-4 { + margin-left: 33.33333333% + } + .col-sm-offset-3 { + margin-left: 25% + } + .col-sm-offset-2 { + margin-left: 16.66666667% + } + .col-sm-offset-1 { + margin-left: 8.33333333% + } + .col-sm-offset-0 { + margin-left: 0 + } +} + +@media (min-width:992px) { + .col-md-1, + .col-md-2, + .col-md-3, + .col-md-4, + .col-md-5, + .col-md-6, + .col-md-7, + .col-md-8, + .col-md-9, + .col-md-10, + .col-md-11, + .col-md-12 { + float: left + } + .col-md-12 { + width: 100% + } + .col-md-11 { + width: 91.66666667% + } + .col-md-10 { + width: 83.33333333% + } + .col-md-9 { + width: 75% + } + .col-md-8 { + width: 66.66666667% + } + .col-md-7 { + width: 58.33333333% + } + .col-md-6 { + width: 50% + } + .col-md-5 { + width: 41.66666667% + } + .col-md-4 { + width: 33.33333333% + } + .col-md-3 { + width: 25% + } + .col-md-2 { + width: 16.66666667% + } + .col-md-1 { + width: 8.33333333% + } + .col-md-pull-12 { + right: 100% + } + .col-md-pull-11 { + right: 91.66666667% + } + .col-md-pull-10 { + right: 83.33333333% + } + .col-md-pull-9 { + right: 75% + } + .col-md-pull-8 { + right: 66.66666667% + } + .col-md-pull-7 { + right: 58.33333333% + } + .col-md-pull-6 { + right: 50% + } + .col-md-pull-5 { + right: 41.66666667% + } + .col-md-pull-4 { + right: 33.33333333% + } + .col-md-pull-3 { + right: 25% + } + .col-md-pull-2 { + right: 16.66666667% + } + .col-md-pull-1 { + right: 8.33333333% + } + .col-md-pull-0 { + right: auto + } + .col-md-push-12 { + left: 100% + } + .col-md-push-11 { + left: 91.66666667% + } + .col-md-push-10 { + left: 83.33333333% + } + .col-md-push-9 { + left: 75% + } + .col-md-push-8 { + left: 66.66666667% + } + .col-md-push-7 { + left: 58.33333333% + } + .col-md-push-6 { + left: 50% + } + .col-md-push-5 { + left: 41.66666667% + } + .col-md-push-4 { + left: 33.33333333% + } + .col-md-push-3 { + left: 25% + } + .col-md-push-2 { + left: 16.66666667% + } + .col-md-push-1 { + left: 8.33333333% + } + .col-md-push-0 { + left: auto + } + .col-md-offset-12 { + margin-left: 100% + } + .col-md-offset-11 { + margin-left: 91.66666667% + } + .col-md-offset-10 { + margin-left: 83.33333333% + } + .col-md-offset-9 { + margin-left: 75% + } + .col-md-offset-8 { + margin-left: 66.66666667% + } + .col-md-offset-7 { + margin-left: 58.33333333% + } + .col-md-offset-6 { + margin-left: 50% + } + .col-md-offset-5 { + margin-left: 41.66666667% + } + .col-md-offset-4 { + margin-left: 33.33333333% + } + .col-md-offset-3 { + margin-left: 25% + } + .col-md-offset-2 { + margin-left: 16.66666667% + } + .col-md-offset-1 { + margin-left: 8.33333333% + } + .col-md-offset-0 { + margin-left: 0 + } +} + +@media (min-width:1200px) { + .col-lg-1, + .col-lg-2, + .col-lg-3, + .col-lg-4, + .col-lg-5, + .col-lg-6, + .col-lg-7, + .col-lg-8, + .col-lg-9, + .col-lg-10, + .col-lg-11, + .col-lg-12 { + float: left + } + .col-lg-12 { + width: 100% + } + .col-lg-11 { + width: 91.66666667% + } + .col-lg-10 { + width: 83.33333333% + } + .col-lg-9 { + width: 75% + } + .col-lg-8 { + width: 66.66666667% + } + .col-lg-7 { + width: 58.33333333% + } + .col-lg-6 { + width: 50% + } + .col-lg-5 { + width: 41.66666667% + } + .col-lg-4 { + width: 33.33333333% + } + .col-lg-3 { + width: 25% + } + .col-lg-2 { + width: 16.66666667% + } + .col-lg-1 { + width: 8.33333333% + } + .col-lg-pull-12 { + right: 100% + } + .col-lg-pull-11 { + right: 91.66666667% + } + .col-lg-pull-10 { + right: 83.33333333% + } + .col-lg-pull-9 { + right: 75% + } + .col-lg-pull-8 { + right: 66.66666667% + } + .col-lg-pull-7 { + right: 58.33333333% + } + .col-lg-pull-6 { + right: 50% + } + .col-lg-pull-5 { + right: 41.66666667% + } + .col-lg-pull-4 { + right: 33.33333333% + } + .col-lg-pull-3 { + right: 25% + } + .col-lg-pull-2 { + right: 16.66666667% + } + .col-lg-pull-1 { + right: 8.33333333% + } + .col-lg-pull-0 { + right: auto + } + .col-lg-push-12 { + left: 100% + } + .col-lg-push-11 { + left: 91.66666667% + } + .col-lg-push-10 { + left: 83.33333333% + } + .col-lg-push-9 { + left: 75% + } + .col-lg-push-8 { + left: 66.66666667% + } + .col-lg-push-7 { + left: 58.33333333% + } + .col-lg-push-6 { + left: 50% + } + .col-lg-push-5 { + left: 41.66666667% + } + .col-lg-push-4 { + left: 33.33333333% + } + .col-lg-push-3 { + left: 25% + } + .col-lg-push-2 { + left: 16.66666667% + } + .col-lg-push-1 { + left: 8.33333333% + } + .col-lg-push-0 { + left: auto + } + .col-lg-offset-12 { + margin-left: 100% + } + .col-lg-offset-11 { + margin-left: 91.66666667% + } + .col-lg-offset-10 { + margin-left: 83.33333333% + } + .col-lg-offset-9 { + margin-left: 75% + } + .col-lg-offset-8 { + margin-left: 66.66666667% + } + .col-lg-offset-7 { + margin-left: 58.33333333% + } + .col-lg-offset-6 { + margin-left: 50% + } + .col-lg-offset-5 { + margin-left: 41.66666667% + } + .col-lg-offset-4 { + margin-left: 33.33333333% + } + .col-lg-offset-3 { + margin-left: 25% + } + .col-lg-offset-2 { + margin-left: 16.66666667% + } + .col-lg-offset-1 { + margin-left: 8.33333333% + } + .col-lg-offset-0 { + margin-left: 0 + } +} + +table { + background-color: transparent +} + +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left +} + +th { + text-align: left +} + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px +} + +.table>thead>tr>th, +.table>tbody>tr>th, +.table>tfoot>tr>th, +.table>thead>tr>td, +.table>tbody>tr>td, +.table>tfoot>tr>td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd +} + +.table>thead>tr>th { + vertical-align: bottom; + border-bottom: 2px solid #ddd +} + +.table>caption+thead>tr:first-child>th, +.table>colgroup+thead>tr:first-child>th, +.table>thead:first-child>tr:first-child>th, +.table>caption+thead>tr:first-child>td, +.table>colgroup+thead>tr:first-child>td, +.table>thead:first-child>tr:first-child>td { + border-top: 0 +} + +.table>tbody+tbody { + border-top: 2px solid #ddd +} + +.table .table { + background-color: #fff +} + +.table-condensed>thead>tr>th, +.table-condensed>tbody>tr>th, +.table-condensed>tfoot>tr>th, +.table-condensed>thead>tr>td, +.table-condensed>tbody>tr>td, +.table-condensed>tfoot>tr>td { + padding: 5px +} + +.table-bordered { + border: 1px solid #ddd +} + +.table-bordered>thead>tr>th, +.table-bordered>tbody>tr>th, +.table-bordered>tfoot>tr>th, +.table-bordered>thead>tr>td, +.table-bordered>tbody>tr>td, +.table-bordered>tfoot>tr>td { + border: 1px solid #ddd +} + +.table-bordered>thead>tr>th, +.table-bordered>thead>tr>td { + border-bottom-width: 2px +} + +.table-striped>tbody>tr:nth-of-type(odd) { + background-color: #f9f9f9 +} + +.table-hover>tbody>tr:hover { + background-color: #f5f5f5 +} + +table col[class*="col-"] { + position: static; + float: none; + display: table-column +} + +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell +} + +.table>thead>tr>td.active, +.table>tbody>tr>td.active, +.table>tfoot>tr>td.active, +.table>thead>tr>th.active, +.table>tbody>tr>th.active, +.table>tfoot>tr>th.active, +.table>thead>tr.active>td, +.table>tbody>tr.active>td, +.table>tfoot>tr.active>td, +.table>thead>tr.active>th, +.table>tbody>tr.active>th, +.table>tfoot>tr.active>th { + background-color: #f5f5f5 +} + +.table-hover>tbody>tr>td.active:hover, +.table-hover>tbody>tr>th.active:hover, +.table-hover>tbody>tr.active:hover>td, +.table-hover>tbody>tr:hover>.active, +.table-hover>tbody>tr.active:hover>th { + background-color: #e8e8e8 +} + +.table>thead>tr>td.success, +.table>tbody>tr>td.success, +.table>tfoot>tr>td.success, +.table>thead>tr>th.success, +.table>tbody>tr>th.success, +.table>tfoot>tr>th.success, +.table>thead>tr.success>td, +.table>tbody>tr.success>td, +.table>tfoot>tr.success>td, +.table>thead>tr.success>th, +.table>tbody>tr.success>th, +.table>tfoot>tr.success>th { + background-color: #dff0d8 +} + +.table-hover>tbody>tr>td.success:hover, +.table-hover>tbody>tr>th.success:hover, +.table-hover>tbody>tr.success:hover>td, +.table-hover>tbody>tr:hover>.success, +.table-hover>tbody>tr.success:hover>th { + background-color: #d0e9c6 +} + +.table>thead>tr>td.info, +.table>tbody>tr>td.info, +.table>tfoot>tr>td.info, +.table>thead>tr>th.info, +.table>tbody>tr>th.info, +.table>tfoot>tr>th.info, +.table>thead>tr.info>td, +.table>tbody>tr.info>td, +.table>tfoot>tr.info>td, +.table>thead>tr.info>th, +.table>tbody>tr.info>th, +.table>tfoot>tr.info>th { + background-color: #d9edf7 +} + +.table-hover>tbody>tr>td.info:hover, +.table-hover>tbody>tr>th.info:hover, +.table-hover>tbody>tr.info:hover>td, +.table-hover>tbody>tr:hover>.info, +.table-hover>tbody>tr.info:hover>th { + background-color: #c4e3f3 +} + +.table>thead>tr>td.warning, +.table>tbody>tr>td.warning, +.table>tfoot>tr>td.warning, +.table>thead>tr>th.warning, +.table>tbody>tr>th.warning, +.table>tfoot>tr>th.warning, +.table>thead>tr.warning>td, +.table>tbody>tr.warning>td, +.table>tfoot>tr.warning>td, +.table>thead>tr.warning>th, +.table>tbody>tr.warning>th, +.table>tfoot>tr.warning>th { + background-color: #fcf8e3 +} + +.table-hover>tbody>tr>td.warning:hover, +.table-hover>tbody>tr>th.warning:hover, +.table-hover>tbody>tr.warning:hover>td, +.table-hover>tbody>tr:hover>.warning, +.table-hover>tbody>tr.warning:hover>th { + background-color: #faf2cc +} + +.table>thead>tr>td.danger, +.table>tbody>tr>td.danger, +.table>tfoot>tr>td.danger, +.table>thead>tr>th.danger, +.table>tbody>tr>th.danger, +.table>tfoot>tr>th.danger, +.table>thead>tr.danger>td, +.table>tbody>tr.danger>td, +.table>tfoot>tr.danger>td, +.table>thead>tr.danger>th, +.table>tbody>tr.danger>th, +.table>tfoot>tr.danger>th { + background-color: #f2dede +} + +.table-hover>tbody>tr>td.danger:hover, +.table-hover>tbody>tr>th.danger:hover, +.table-hover>tbody>tr.danger:hover>td, +.table-hover>tbody>tr:hover>.danger, +.table-hover>tbody>tr.danger:hover>th { + background-color: #ebcccc +} + +.table-responsive { + overflow-x: auto; + min-height: 0.01% +} + +@media screen and (max-width:767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd + } + .table-responsive>.table { + margin-bottom: 0 + } + .table-responsive>.table>thead>tr>th, + .table-responsive>.table>tbody>tr>th, + .table-responsive>.table>tfoot>tr>th, + .table-responsive>.table>thead>tr>td, + .table-responsive>.table>tbody>tr>td, + .table-responsive>.table>tfoot>tr>td { + white-space: nowrap + } + .table-responsive>.table-bordered { + border: 0 + } + .table-responsive>.table-bordered>thead>tr>th:first-child, + .table-responsive>.table-bordered>tbody>tr>th:first-child, + .table-responsive>.table-bordered>tfoot>tr>th:first-child, + .table-responsive>.table-bordered>thead>tr>td:first-child, + .table-responsive>.table-bordered>tbody>tr>td:first-child, + .table-responsive>.table-bordered>tfoot>tr>td:first-child { + border-left: 0 + } + .table-responsive>.table-bordered>thead>tr>th:last-child, + .table-responsive>.table-bordered>tbody>tr>th:last-child, + .table-responsive>.table-bordered>tfoot>tr>th:last-child, + .table-responsive>.table-bordered>thead>tr>td:last-child, + .table-responsive>.table-bordered>tbody>tr>td:last-child, + .table-responsive>.table-bordered>tfoot>tr>td:last-child { + border-right: 0 + } + .table-responsive>.table-bordered>tbody>tr:last-child>th, + .table-responsive>.table-bordered>tfoot>tr:last-child>th, + .table-responsive>.table-bordered>tbody>tr:last-child>td, + .table-responsive>.table-bordered>tfoot>tr:last-child>td { + border-bottom: 0 + } +} + +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0 +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5 +} + +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold +} + +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal +} + +input[type="file"] { + display: block +} + +input[type="range"] { + display: block; + width: 100% +} + +select[multiple], +select[size] { + height: auto +} + +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px +} + +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555 +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s +} + +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6) +} + +.form-control::-moz-placeholder { + color: #999; + opacity: 1 +} + +.form-control:-ms-input-placeholder { + color: #999 +} + +.form-control::-webkit-input-placeholder { + color: #999 +} + +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1 +} + +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed +} + +textarea.form-control { + height: auto +} + +input[type="search"] { + -webkit-appearance: none +} + +@media screen and (-webkit-min-device-pixel-ratio:0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 34px + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px + } +} + +.form-group { + margin-bottom: 15px +} + +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px +} + +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer +} + +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9 +} + +.radio+.radio, +.checkbox+.checkbox { + margin-top: -5px +} + +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer +} + +.radio-inline+.radio-inline, +.checkbox-inline+.checkbox-inline { + margin-top: 0; + margin-left: 10px +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed +} + +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed +} + +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed +} + +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; + min-height: 34px +} + +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-left: 0; + padding-right: 0 +} + +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +select.input-sm { + height: 30px; + line-height: 30px +} + +textarea.input-sm, +select[multiple].input-sm { + height: auto +} + +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +.form-group-sm select.form-control { + height: 30px; + line-height: 30px +} + +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto +} + +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5 +} + +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px +} + +select.input-lg { + height: 46px; + line-height: 46px +} + +textarea.input-lg, +select[multiple].input-lg { + height: auto +} + +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px +} + +.form-group-lg select.form-control { + height: 46px; + line-height: 46px +} + +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto +} + +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333 +} + +.has-feedback { + position: relative +} + +.has-feedback .form-control { + padding-right: 42.5px +} + +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none +} + +.input-lg+.form-control-feedback, +.input-group-lg+.form-control-feedback, +.form-group-lg .form-control+.form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px +} + +.input-sm+.form-control-feedback, +.input-group-sm+.form-control-feedback, +.form-group-sm .form-control+.form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px +} + +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d +} + +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075) +} + +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168 +} + +.has-success .input-group-addon { + color: #3c763d; + border-color: #3c763d; + background-color: #dff0d8 +} + +.has-success .form-control-feedback { + color: #3c763d +} + +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b +} + +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075) +} + +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b +} + +.has-warning .input-group-addon { + color: #8a6d3b; + border-color: #8a6d3b; + background-color: #fcf8e3 +} + +.has-warning .form-control-feedback { + color: #8a6d3b +} + +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442 +} + +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075) +} + +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483 +} + +.has-error .input-group-addon { + color: #a94442; + border-color: #a94442; + background-color: #f2dede +} + +.has-error .form-control-feedback { + color: #a94442 +} + +.has-feedback label~.form-control-feedback { + top: 25px +} + +.has-feedback label.sr-only~.form-control-feedback { + top: 0 +} + +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373 +} + +@media (min-width:768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle + } + .form-inline .form-control-static { + display: inline-block + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto + } + .form-inline .input-group>.form-control { + width: 100% + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0 + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0 + } + .form-inline .has-feedback .form-control-feedback { + top: 0 + } +} + +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 7px +} + +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px +} + +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px +} + +@media (min-width:768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 7px + } +} + +.form-horizontal .has-feedback .form-control-feedback { + right: 15px +} + +@media (min-width:768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.333333px; + font-size: 18px + } +} + +@media (min-width:768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px + } +} + +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none +} + +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px +} + +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none +} + +.btn:active, +.btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125) +} + +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + opacity: .65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none +} + +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none +} + +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc +} + +.btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c +} + +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad +} + +.btn-default:active, +.btn-default.active, +.open>.dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad +} + +.btn-default:active:hover, +.btn-default.active:hover, +.open>.dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open>.dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open>.dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c +} + +.btn-default:active, +.btn-default.active, +.open>.dropdown-toggle.btn-default { + background-image: none +} + +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc +} + +.btn-default .badge { + color: #fff; + background-color: #333 +} + +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4 +} + +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40 +} + +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74 +} + +.btn-primary:active, +.btn-primary.active, +.open>.dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74 +} + +.btn-primary:active:hover, +.btn-primary.active:hover, +.open>.dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open>.dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open>.dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40 +} + +.btn-primary:active, +.btn-primary.active, +.open>.dropdown-toggle.btn-primary { + background-image: none +} + +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #337ab7; + border-color: #2e6da4 +} + +.btn-primary .badge { + color: #337ab7; + background-color: #fff +} + +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c +} + +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625 +} + +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439 +} + +.btn-success:active, +.btn-success.active, +.open>.dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439 +} + +.btn-success:active:hover, +.btn-success.active:hover, +.open>.dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open>.dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open>.dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625 +} + +.btn-success:active, +.btn-success.active, +.open>.dropdown-toggle.btn-success { + background-image: none +} + +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c +} + +.btn-success .badge { + color: #5cb85c; + background-color: #fff +} + +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da +} + +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85 +} + +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc +} + +.btn-info:active, +.btn-info.active, +.open>.dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc +} + +.btn-info:active:hover, +.btn-info.active:hover, +.open>.dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open>.dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open>.dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85 +} + +.btn-info:active, +.btn-info.active, +.open>.dropdown-toggle.btn-info { + background-image: none +} + +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da +} + +.btn-info .badge { + color: #5bc0de; + background-color: #fff +} + +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236 +} + +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d +} + +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512 +} + +.btn-warning:active, +.btn-warning.active, +.open>.dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512 +} + +.btn-warning:active:hover, +.btn-warning.active:hover, +.open>.dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open>.dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open>.dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d +} + +.btn-warning:active, +.btn-warning.active, +.open>.dropdown-toggle.btn-warning { + background-image: none +} + +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236 +} + +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff +} + +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a +} + +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19 +} + +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925 +} + +.btn-danger:active, +.btn-danger.active, +.open>.dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925 +} + +.btn-danger:active:hover, +.btn-danger.active:hover, +.open>.dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open>.dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open>.dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19 +} + +.btn-danger:active, +.btn-danger.active, +.open>.dropdown-toggle.btn-danger { + background-image: none +} + +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a +} + +.btn-danger .badge { + color: #d9534f; + background-color: #fff +} + +.btn-link { + color: #337ab7; + font-weight: normal; + border-radius: 0 +} + +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none +} + +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent +} + +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent +} + +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none +} + +.btn-lg, +.btn-group-lg>.btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px +} + +.btn-sm, +.btn-group-sm>.btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +.btn-xs, +.btn-group-xs>.btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +.btn-block { + display: block; + width: 100% +} + +.btn-block+.btn-block { + margin-top: 5px +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100% +} + +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear +} + +.fade.in { + opacity: 1 +} + +.collapse { + display: none +} + +.collapse.in { + display: block +} + +tr.collapse.in { + display: table-row +} + +tbody.collapse.in { + display: table-row-group +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease +} + +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent +} + +.dropup, +.dropdown { + position: relative +} + +.dropdown-toggle:focus { + outline: 0 +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + -webkit-background-clip: padding-box; + background-clip: padding-box +} + +.dropdown-menu.pull-right { + right: 0; + left: auto +} + +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5 +} + +.dropdown-menu>li>a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap +} + +.dropdown-menu>li>a:hover, +.dropdown-menu>li>a:focus { + text-decoration: none; + color: #262626; + background-color: #f5f5f5 +} + +.dropdown-menu>.active>a, +.dropdown-menu>.active>a:hover, +.dropdown-menu>.active>a:focus { + color: #fff; + text-decoration: none; + outline: 0; + background-color: #337ab7 +} + +.dropdown-menu>.disabled>a, +.dropdown-menu>.disabled>a:hover, +.dropdown-menu>.disabled>a:focus { + color: #777 +} + +.dropdown-menu>.disabled>a:hover, +.dropdown-menu>.disabled>a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid: DXImageTransform.Microsoft.gradient(enabled=false); + cursor: not-allowed +} + +.open>.dropdown-menu { + display: block +} + +.open>a { + outline: 0 +} + +.dropdown-menu-right { + left: auto; + right: 0 +} + +.dropdown-menu-left { + left: 0; + right: auto +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap +} + +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990 +} + +.pull-right>.dropdown-menu { + right: 0; + left: auto +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; + content: "" +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px +} + +@media (min-width:768px) { + .navbar-right .dropdown-menu { + left: auto; + right: 0 + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto + } +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle +} + +.btn-group>.btn, +.btn-group-vertical>.btn { + position: relative; + float: left +} + +.btn-group>.btn:hover, +.btn-group-vertical>.btn:hover, +.btn-group>.btn:focus, +.btn-group-vertical>.btn:focus, +.btn-group>.btn:active, +.btn-group-vertical>.btn:active, +.btn-group>.btn.active, +.btn-group-vertical>.btn.active { + z-index: 2 +} + +.btn-group .btn+.btn, +.btn-group .btn+.btn-group, +.btn-group .btn-group+.btn, +.btn-group .btn-group+.btn-group { + margin-left: -1px +} + +.btn-toolbar { + margin-left: -5px +} + +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left +} + +.btn-toolbar>.btn, +.btn-toolbar>.btn-group, +.btn-toolbar>.input-group { + margin-left: 5px +} + +.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0 +} + +.btn-group>.btn:first-child { + margin-left: 0 +} + +.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0 +} + +.btn-group>.btn:last-child:not(:first-child), +.btn-group>.dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0 +} + +.btn-group>.btn-group { + float: left +} + +.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn { + border-radius: 0 +} + +.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child, +.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0 +} + +.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0 +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0 +} + +.btn-group>.btn+.dropdown-toggle { + padding-left: 8px; + padding-right: 8px +} + +.btn-group>.btn-lg+.dropdown-toggle { + padding-left: 12px; + padding-right: 12px +} + +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125) +} + +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none +} + +.btn .caret { + margin-left: 0 +} + +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0 +} + +.dropup .btn-lg .caret { + border-width: 0 5px 5px +} + +.btn-group-vertical>.btn, +.btn-group-vertical>.btn-group, +.btn-group-vertical>.btn-group>.btn { + display: block; + float: none; + width: 100%; + max-width: 100% +} + +.btn-group-vertical>.btn-group>.btn { + float: none +} + +.btn-group-vertical>.btn+.btn, +.btn-group-vertical>.btn+.btn-group, +.btn-group-vertical>.btn-group+.btn, +.btn-group-vertical>.btn-group+.btn-group { + margin-top: -1px; + margin-left: 0 +} + +.btn-group-vertical>.btn:not(:first-child):not(:last-child) { + border-radius: 0 +} + +.btn-group-vertical>.btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical>.btn:last-child:not(:first-child) { + border-bottom-left-radius: 4px; + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn { + border-radius: 0 +} + +.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child, +.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate +} + +.btn-group-justified>.btn, +.btn-group-justified>.btn-group { + float: none; + display: table-cell; + width: 1% +} + +.btn-group-justified>.btn-group .btn { + width: 100% +} + +.btn-group-justified>.btn-group .dropdown-menu { + left: auto +} + +[data-toggle="buttons"]>.btn input[type="radio"], +[data-toggle="buttons"]>.btn-group>.btn input[type="radio"], +[data-toggle="buttons"]>.btn input[type="checkbox"], +[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none +} + +.input-group { + position: relative; + display: table; + border-collapse: separate +} + +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0 +} + +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0 +} + +.input-group-lg>.form-control, +.input-group-lg>.input-group-addon, +.input-group-lg>.input-group-btn>.btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px +} + +select.input-group-lg>.form-control, +select.input-group-lg>.input-group-addon, +select.input-group-lg>.input-group-btn>.btn { + height: 46px; + line-height: 46px +} + +textarea.input-group-lg>.form-control, +textarea.input-group-lg>.input-group-addon, +textarea.input-group-lg>.input-group-btn>.btn, +select[multiple].input-group-lg>.form-control, +select[multiple].input-group-lg>.input-group-addon, +select[multiple].input-group-lg>.input-group-btn>.btn { + height: auto +} + +.input-group-sm>.form-control, +.input-group-sm>.input-group-addon, +.input-group-sm>.input-group-btn>.btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +select.input-group-sm>.form-control, +select.input-group-sm>.input-group-addon, +select.input-group-sm>.input-group-btn>.btn { + height: 30px; + line-height: 30px +} + +textarea.input-group-sm>.form-control, +textarea.input-group-sm>.input-group-addon, +textarea.input-group-sm>.input-group-btn>.btn, +select[multiple].input-group-sm>.form-control, +select[multiple].input-group-sm>.input-group-addon, +select[multiple].input-group-sm>.input-group-btn>.btn { + height: auto +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell +} + +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0 +} + +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px +} + +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px +} + +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px +} + +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0 +} + +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child>.btn, +.input-group-btn:first-child>.btn-group>.btn, +.input-group-btn:first-child>.dropdown-toggle, +.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child>.btn-group:not(:last-child)>.btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0 +} + +.input-group-addon:first-child { + border-right: 0 +} + +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child>.btn, +.input-group-btn:last-child>.btn-group>.btn, +.input-group-btn:last-child>.dropdown-toggle, +.input-group-btn:first-child>.btn:not(:first-child), +.input-group-btn:first-child>.btn-group:not(:first-child)>.btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0 +} + +.input-group-addon:last-child { + border-left: 0 +} + +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap +} + +.input-group-btn>.btn { + position: relative +} + +.input-group-btn>.btn+.btn { + margin-left: -1px +} + +.input-group-btn>.btn:hover, +.input-group-btn>.btn:focus, +.input-group-btn>.btn:active { + z-index: 2 +} + +.input-group-btn:first-child>.btn, +.input-group-btn:first-child>.btn-group { + margin-right: -1px +} + +.input-group-btn:last-child>.btn, +.input-group-btn:last-child>.btn-group { + z-index: 2; + margin-left: -1px +} + +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none +} + +.nav>li { + position: relative; + display: block +} + +.nav>li>a { + position: relative; + display: block; + padding: 10px 15px +} + +.nav>li>a:hover, +.nav>li>a:focus { + text-decoration: none; + background-color: #eee +} + +.nav>li.disabled>a { + color: #777 +} + +.nav>li.disabled>a:hover, +.nav>li.disabled>a:focus { + color: #777; + text-decoration: none; + background-color: transparent; + cursor: not-allowed +} + +.nav .open>a, +.nav .open>a:hover, +.nav .open>a:focus { + background-color: #eee; + border-color: #337ab7 +} + +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5 +} + +.nav>li>a>img { + max-width: none +} + +.nav-tabs { + border-bottom: 1px solid #ddd +} + +.nav-tabs>li { + float: left; + margin-bottom: -1px +} + +.nav-tabs>li>a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0 +} + +.nav-tabs>li>a:hover { + border-color: #eee #eee #ddd +} + +.nav-tabs>li.active>a, +.nav-tabs>li.active>a:hover, +.nav-tabs>li.active>a:focus { + color: #555; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default +} + +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0 +} + +.nav-tabs.nav-justified>li { + float: none +} + +.nav-tabs.nav-justified>li>a { + text-align: center; + margin-bottom: 5px +} + +.nav-tabs.nav-justified>.dropdown .dropdown-menu { + top: auto; + left: auto +} + +@media (min-width:768px) { + .nav-tabs.nav-justified>li { + display: table-cell; + width: 1% + } + .nav-tabs.nav-justified>li>a { + margin-bottom: 0 + } +} + +.nav-tabs.nav-justified>li>a { + margin-right: 0; + border-radius: 4px +} + +.nav-tabs.nav-justified>.active>a, +.nav-tabs.nav-justified>.active>a:hover, +.nav-tabs.nav-justified>.active>a:focus { + border: 1px solid #ddd +} + +@media (min-width:768px) { + .nav-tabs.nav-justified>li>a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0 + } + .nav-tabs.nav-justified>.active>a, + .nav-tabs.nav-justified>.active>a:hover, + .nav-tabs.nav-justified>.active>a:focus { + border-bottom-color: #fff + } +} + +.nav-pills>li { + float: left +} + +.nav-pills>li>a { + border-radius: 4px +} + +.nav-pills>li+li { + margin-left: 2px +} + +.nav-pills>li.active>a, +.nav-pills>li.active>a:hover, +.nav-pills>li.active>a:focus { + color: #fff; + background-color: #337ab7 +} + +.nav-stacked>li { + float: none +} + +.nav-stacked>li+li { + margin-top: 2px; + margin-left: 0 +} + +.nav-justified { + width: 100% +} + +.nav-justified>li { + float: none +} + +.nav-justified>li>a { + text-align: center; + margin-bottom: 5px +} + +.nav-justified>.dropdown .dropdown-menu { + top: auto; + left: auto +} + +@media (min-width:768px) { + .nav-justified>li { + display: table-cell; + width: 1% + } + .nav-justified>li>a { + margin-bottom: 0 + } +} + +.nav-tabs-justified { + border-bottom: 0 +} + +.nav-tabs-justified>li>a { + margin-right: 0; + border-radius: 4px +} + +.nav-tabs-justified>.active>a, +.nav-tabs-justified>.active>a:hover, +.nav-tabs-justified>.active>a:focus { + border: 1px solid #ddd +} + +@media (min-width:768px) { + .nav-tabs-justified>li>a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0 + } + .nav-tabs-justified>.active>a, + .nav-tabs-justified>.active>a:hover, + .nav-tabs-justified>.active>a:focus { + border-bottom-color: #fff + } +} + +.tab-content>.tab-pane { + display: none +} + +.tab-content>.active { + display: block +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent +} + +@media (min-width:768px) { + .navbar { + border-radius: 4px + } +} + +@media (min-width:768px) { + .navbar-header { + float: left + } +} + +.navbar-collapse { + overflow-x: visible; + padding-right: 15px; + padding-left: 15px; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch +} + +.navbar-collapse.in { + overflow-y: auto +} + +@media (min-width:768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important + } + .navbar-collapse.in { + overflow-y: visible + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-left: 0; + padding-right: 0 + } +} + +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px +} + +@media (max-device-width:480px) and (orientation:landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px + } +} + +.container>.navbar-header, +.container-fluid>.navbar-header, +.container>.navbar-collapse, +.container-fluid>.navbar-collapse { + margin-right: -15px; + margin-left: -15px +} + +@media (min-width:768px) { + .container>.navbar-header, + .container-fluid>.navbar-header, + .container>.navbar-collapse, + .container-fluid>.navbar-collapse { + margin-right: 0; + margin-left: 0 + } +} + +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px +} + +@media (min-width:768px) { + .navbar-static-top { + border-radius: 0 + } +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030 +} + +@media (min-width:768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0 + } +} + +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px +} + +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0 +} + +.navbar-brand { + float: left; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; + height: 50px +} + +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none +} + +.navbar-brand>img { + display: block +} + +@media (min-width:768px) { + .navbar>.container .navbar-brand, + .navbar>.container-fluid .navbar-brand { + margin-left: -15px + } +} + +.navbar-toggle { + position: relative; + float: right; + margin-right: 15px; + padding: 9px 10px; + margin-top: 8px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px +} + +.navbar-toggle:focus { + outline: 0 +} + +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px +} + +.navbar-toggle .icon-bar+.icon-bar { + margin-top: 4px +} + +@media (min-width:768px) { + .navbar-toggle { + display: none + } +} + +.navbar-nav { + margin: 7.5px -15px +} + +.navbar-nav>li>a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px +} + +@media (max-width:767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none + } + .navbar-nav .open .dropdown-menu>li>a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px + } + .navbar-nav .open .dropdown-menu>li>a { + line-height: 20px + } + .navbar-nav .open .dropdown-menu>li>a:hover, + .navbar-nav .open .dropdown-menu>li>a:focus { + background-image: none + } +} + +@media (min-width:768px) { + .navbar-nav { + float: left; + margin: 0 + } + .navbar-nav>li { + float: left + } + .navbar-nav>li>a { + padding-top: 15px; + padding-bottom: 15px + } +} + +.navbar-form { + margin-left: -15px; + margin-right: -15px; + padding: 10px 15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 8px; + margin-bottom: 8px +} + +@media (min-width:768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle + } + .navbar-form .form-control-static { + display: inline-block + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto + } + .navbar-form .input-group>.form-control { + width: 100% + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0 + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0 + } + .navbar-form .has-feedback .form-control-feedback { + top: 0 + } +} + +@media (max-width:767px) { + .navbar-form .form-group { + margin-bottom: 5px + } + .navbar-form .form-group:last-child { + margin-bottom: 0 + } +} + +@media (min-width:768px) { + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + -webkit-box-shadow: none; + box-shadow: none + } +} + +.navbar-nav>li>.dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu { + margin-bottom: 0; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px +} + +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px +} + +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px +} + +.navbar-text { + margin-top: 15px; + margin-bottom: 15px +} + +@media (min-width:768px) { + .navbar-text { + float: left; + margin-left: 15px; + margin-right: 15px + } +} + +@media (min-width:768px) { + .navbar-left { + float: left !important + } + .navbar-right { + float: right !important; + margin-right: -15px + } + .navbar-right~.navbar-right { + margin-right: 0 + } +} + +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7 +} + +.navbar-default .navbar-brand { + color: #777 +} + +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent +} + +.navbar-default .navbar-text { + color: #777 +} + +.navbar-default .navbar-nav>li>a { + color: #777 +} + +.navbar-default .navbar-nav>li>a:hover, +.navbar-default .navbar-nav>li>a:focus { + color: #333; + background-color: transparent +} + +.navbar-default .navbar-nav>.active>a, +.navbar-default .navbar-nav>.active>a:hover, +.navbar-default .navbar-nav>.active>a:focus { + color: #555; + background-color: #e7e7e7 +} + +.navbar-default .navbar-nav>.disabled>a, +.navbar-default .navbar-nav>.disabled>a:hover, +.navbar-default .navbar-nav>.disabled>a:focus { + color: #ccc; + background-color: transparent +} + +.navbar-default .navbar-toggle { + border-color: #ddd +} + +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd +} + +.navbar-default .navbar-toggle .icon-bar { + background-color: #888 +} + +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7 +} + +.navbar-default .navbar-nav>.open>a, +.navbar-default .navbar-nav>.open>a:hover, +.navbar-default .navbar-nav>.open>a:focus { + background-color: #e7e7e7; + color: #555 +} + +@media (max-width:767px) { + .navbar-default .navbar-nav .open .dropdown-menu>li>a { + color: #777 + } + .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover, + .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus { + color: #333; + background-color: transparent + } + .navbar-default .navbar-nav .open .dropdown-menu>.active>a, + .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover, + .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus { + color: #555; + background-color: #e7e7e7 + } + .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a, + .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover, + .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus { + color: #ccc; + background-color: transparent + } +} + +.navbar-default .navbar-link { + color: #777 +} + +.navbar-default .navbar-link:hover { + color: #333 +} + +.navbar-default .btn-link { + color: #777 +} + +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333 +} + +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc +} + +.navbar-inverse { + background-color: #222; + border-color: #080808 +} + +.navbar-inverse .navbar-brand { + color: #9d9d9d +} + +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent +} + +.navbar-inverse .navbar-text { + color: #9d9d9d +} + +.navbar-inverse .navbar-nav>li>a { + color: #9d9d9d +} + +.navbar-inverse .navbar-nav>li>a:hover, +.navbar-inverse .navbar-nav>li>a:focus { + color: #fff; + background-color: transparent +} + +.navbar-inverse .navbar-nav>.active>a, +.navbar-inverse .navbar-nav>.active>a:hover, +.navbar-inverse .navbar-nav>.active>a:focus { + color: #fff; + background-color: #080808 +} + +.navbar-inverse .navbar-nav>.disabled>a, +.navbar-inverse .navbar-nav>.disabled>a:hover, +.navbar-inverse .navbar-nav>.disabled>a:focus { + color: #444; + background-color: transparent +} + +.navbar-inverse .navbar-toggle { + border-color: #333 +} + +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333 +} + +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff +} + +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010 +} + +.navbar-inverse .navbar-nav>.open>a, +.navbar-inverse .navbar-nav>.open>a:hover, +.navbar-inverse .navbar-nav>.open>a:focus { + background-color: #080808; + color: #fff +} + +@media (max-width:767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header { + border-color: #080808 + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808 + } + .navbar-inverse .navbar-nav .open .dropdown-menu>li>a { + color: #9d9d9d + } + .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus { + color: #fff; + background-color: transparent + } + .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a, + .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus { + color: #fff; + background-color: #080808 + } + .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a, + .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus { + color: #444; + background-color: transparent + } +} + +.navbar-inverse .navbar-link { + color: #9d9d9d +} + +.navbar-inverse .navbar-link:hover { + color: #fff +} + +.navbar-inverse .btn-link { + color: #9d9d9d +} + +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff +} + +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444 +} + +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px +} + +.breadcrumb>li { + display: inline-block +} + +.breadcrumb>li+li:before { + content: "/\00a0"; + padding: 0 5px; + color: #ccc +} + +.breadcrumb>.active { + color: #777 +} + +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px +} + +.pagination>li { + display: inline +} + +.pagination>li>a, +.pagination>li>span { + position: relative; + float: left; + padding: 6px 12px; + line-height: 1.42857143; + text-decoration: none; + color: #337ab7; + background-color: #fff; + border: 1px solid #ddd; + margin-left: -1px +} + +.pagination>li:first-child>a, +.pagination>li:first-child>span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px +} + +.pagination>li:last-child>a, +.pagination>li:last-child>span { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px +} + +.pagination>li>a:hover, +.pagination>li>span:hover, +.pagination>li>a:focus, +.pagination>li>span:focus { + z-index: 3; + color: #23527c; + background-color: #eee; + border-color: #ddd +} + +.pagination>.active>a, +.pagination>.active>span, +.pagination>.active>a:hover, +.pagination>.active>span:hover, +.pagination>.active>a:focus, +.pagination>.active>span:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; + cursor: default +} + +.pagination>.disabled>span, +.pagination>.disabled>span:hover, +.pagination>.disabled>span:focus, +.pagination>.disabled>a, +.pagination>.disabled>a:hover, +.pagination>.disabled>a:focus { + color: #777; + background-color: #fff; + border-color: #ddd; + cursor: not-allowed +} + +.pagination-lg>li>a, +.pagination-lg>li>span { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333 +} + +.pagination-lg>li:first-child>a, +.pagination-lg>li:first-child>span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px +} + +.pagination-lg>li:last-child>a, +.pagination-lg>li:last-child>span { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px +} + +.pagination-sm>li>a, +.pagination-sm>li>span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5 +} + +.pagination-sm>li:first-child>a, +.pagination-sm>li:first-child>span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px +} + +.pagination-sm>li:last-child>a, +.pagination-sm>li:last-child>span { + border-bottom-right-radius: 3px; + border-top-right-radius: 3px +} + +.pager { + padding-left: 0; + margin: 20px 0; + list-style: none; + text-align: center +} + +.pager li { + display: inline +} + +.pager li>a, +.pager li>span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px +} + +.pager li>a:hover, +.pager li>a:focus { + text-decoration: none; + background-color: #eee +} + +.pager .next>a, +.pager .next>span { + float: right +} + +.pager .previous>a, +.pager .previous>span { + float: left +} + +.pager .disabled>a, +.pager .disabled>a:hover, +.pager .disabled>a:focus, +.pager .disabled>span { + color: #777; + background-color: #fff; + cursor: not-allowed +} + +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em +} + +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer +} + +.label:empty { + display: none +} + +.btn .label { + position: relative; + top: -1px +} + +.label-default { + background-color: #777 +} + +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e +} + +.label-primary { + background-color: #337ab7 +} + +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090 +} + +.label-success { + background-color: #5cb85c +} + +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44 +} + +.label-info { + background-color: #5bc0de +} + +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5 +} + +.label-warning { + background-color: #f0ad4e +} + +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f +} + +.label-danger { + background-color: #d9534f +} + +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c +} + +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + color: #fff; + line-height: 1; + vertical-align: middle; + white-space: nowrap; + text-align: center; + background-color: #777; + border-radius: 10px +} + +.badge:empty { + display: none +} + +.btn .badge { + position: relative; + top: -1px +} + +.btn-xs .badge, +.btn-group-xs>.btn .badge { + top: 0; + padding: 1px 5px +} + +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer +} + +.list-group-item.active>.badge, +.nav-pills>.active>a>.badge { + color: #337ab7; + background-color: #fff +} + +.list-group-item>.badge { + float: right +} + +.list-group-item>.badge+.badge { + margin-right: 5px +} + +.nav-pills>li>a>.badge { + margin-left: 3px +} + +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee +} + +.jumbotron h1, +.jumbotron .h1 { + color: inherit +} + +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200 +} + +.jumbotron>hr { + border-top-color: #d5d5d5 +} + +.container .jumbotron, +.container-fluid .jumbotron { + border-radius: 6px +} + +.jumbotron .container { + max-width: 100% +} + +@media screen and (min-width:768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-left: 60px; + padding-right: 60px + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px + } +} + +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out +} + +.thumbnail>img, +.thumbnail a>img { + margin-left: auto; + margin-right: auto +} + +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7 +} + +.thumbnail .caption { + padding: 9px; + color: #333 +} + +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px +} + +.alert h4 { + margin-top: 0; + color: inherit +} + +.alert .alert-link { + font-weight: bold +} + +.alert>p, +.alert>ul { + margin-bottom: 0 +} + +.alert>p+p { + margin-top: 5px +} + +.alert-dismissable, +.alert-dismissible { + padding-right: 35px +} + +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit +} + +.alert-success { + background-color: #dff0d8; + border-color: #d6e9c6; + color: #3c763d +} + +.alert-success hr { + border-top-color: #c9e2b3 +} + +.alert-success .alert-link { + color: #2b542c +} + +.alert-info { + background-color: #d9edf7; + border-color: #bce8f1; + color: #31708f +} + +.alert-info hr { + border-top-color: #a6e1ec +} + +.alert-info .alert-link { + color: #245269 +} + +.alert-warning { + background-color: #fcf8e3; + border-color: #faebcc; + color: #8a6d3b +} + +.alert-warning hr { + border-top-color: #f7e1b5 +} + +.alert-warning .alert-link { + color: #66512c +} + +.alert-danger { + background-color: #f2dede; + border-color: #ebccd1; + color: #a94442 +} + +.alert-danger hr { + border-top-color: #e4b9c0 +} + +.alert-danger .alert-link { + color: #843534 +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0 + } + to { + background-position: 0 0 + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0 + } + to { + background-position: 0 0 + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0 + } + to { + background-position: 0 0 + } +} + +.progress { + overflow: hidden; + height: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1) +} + +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease +} + +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px +} + +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite +} + +.progress-bar-success { + background-color: #5cb85c +} + +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent) +} + +.progress-bar-info { + background-color: #5bc0de +} + +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent) +} + +.progress-bar-warning { + background-color: #f0ad4e +} + +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent) +} + +.progress-bar-danger { + background-color: #d9534f +} + +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent) +} + +.media { + margin-top: 15px +} + +.media:first-child { + margin-top: 0 +} + +.media, +.media-body { + zoom: 1; + overflow: hidden +} + +.media-body { + width: 10000px +} + +.media-object { + display: block +} + +.media-object.img-thumbnail { + max-width: none +} + +.media-right, +.media>.pull-right { + padding-left: 10px +} + +.media-left, +.media>.pull-left { + padding-right: 10px +} + +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top +} + +.media-middle { + vertical-align: middle +} + +.media-bottom { + vertical-align: bottom +} + +.media-heading { + margin-top: 0; + margin-bottom: 5px +} + +.media-list { + padding-left: 0; + list-style: none +} + +.list-group { + margin-bottom: 20px; + padding-left: 0 +} + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd +} + +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px +} + +a.list-group-item, +button.list-group-item { + color: #555 +} + +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333 +} + +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + text-decoration: none; + color: #555; + background-color: #f5f5f5 +} + +button.list-group-item { + width: 100%; + text-align: left +} + +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + background-color: #eee; + color: #777; + cursor: not-allowed +} + +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit +} + +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777 +} + +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7 +} + +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading>small, +.list-group-item.active:hover .list-group-item-heading>small, +.list-group-item.active:focus .list-group-item-heading>small, +.list-group-item.active .list-group-item-heading>.small, +.list-group-item.active:hover .list-group-item-heading>.small, +.list-group-item.active:focus .list-group-item-heading>.small { + color: inherit +} + +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef +} + +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8 +} + +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d +} + +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit +} + +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6 +} + +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d +} + +.list-group-item-info { + color: #31708f; + background-color: #d9edf7 +} + +a.list-group-item-info, +button.list-group-item-info { + color: #31708f +} + +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit +} + +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3 +} + +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f +} + +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3 +} + +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b +} + +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit +} + +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc +} + +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b +} + +.list-group-item-danger { + color: #a94442; + background-color: #f2dede +} + +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442 +} + +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit +} + +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc +} + +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442 +} + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3 +} + +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05) +} + +.panel-body { + padding: 15px +} + +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px +} + +.panel-heading>.dropdown .dropdown-toggle { + color: inherit +} + +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit +} + +.panel-title>a, +.panel-title>small, +.panel-title>.small, +.panel-title>small>a, +.panel-title>.small>a { + color: inherit +} + +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px +} + +.panel>.list-group, +.panel>.panel-collapse>.list-group { + margin-bottom: 0 +} + +.panel>.list-group .list-group-item, +.panel>.panel-collapse>.list-group .list-group-item { + border-width: 1px 0; + border-radius: 0 +} + +.panel>.list-group:first-child .list-group-item:first-child, +.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px +} + +.panel>.list-group:last-child .list-group-item:last-child, +.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px +} + +.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.panel-heading+.list-group .list-group-item:first-child { + border-top-width: 0 +} + +.list-group+.panel-footer { + border-top-width: 0 +} + +.panel>.table, +.panel>.table-responsive>.table, +.panel>.panel-collapse>.table { + margin-bottom: 0 +} + +.panel>.table caption, +.panel>.table-responsive>.table caption, +.panel>.panel-collapse>.table caption { + padding-left: 15px; + padding-right: 15px +} + +.panel>.table:first-child, +.panel>.table-responsive:first-child>.table:first-child { + border-top-right-radius: 3px; + border-top-left-radius: 3px +} + +.panel>.table:first-child>thead:first-child>tr:first-child, +.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child, +.panel>.table:first-child>tbody:first-child>tr:first-child, +.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px +} + +.panel>.table:first-child>thead:first-child>tr:first-child td:first-child, +.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child, +.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child, +.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child, +.panel>.table:first-child>thead:first-child>tr:first-child th:first-child, +.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child, +.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child, +.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child { + border-top-left-radius: 3px +} + +.panel>.table:first-child>thead:first-child>tr:first-child td:last-child, +.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child, +.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child, +.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child, +.panel>.table:first-child>thead:first-child>tr:first-child th:last-child, +.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child, +.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child, +.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child { + border-top-right-radius: 3px +} + +.panel>.table:last-child, +.panel>.table-responsive:last-child>.table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px +} + +.panel>.table:last-child>tbody:last-child>tr:last-child, +.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child, +.panel>.table:last-child>tfoot:last-child>tr:last-child, +.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child { + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px +} + +.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child, +.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child, +.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child, +.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child, +.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child, +.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child, +.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child, +.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child { + border-bottom-left-radius: 3px +} + +.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child, +.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child, +.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child, +.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child, +.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child, +.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child, +.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child, +.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child { + border-bottom-right-radius: 3px +} + +.panel>.panel-body+.table, +.panel>.panel-body+.table-responsive, +.panel>.table+.panel-body, +.panel>.table-responsive+.panel-body { + border-top: 1px solid #ddd +} + +.panel>.table>tbody:first-child>tr:first-child th, +.panel>.table>tbody:first-child>tr:first-child td { + border-top: 0 +} + +.panel>.table-bordered, +.panel>.table-responsive>.table-bordered { + border: 0 +} + +.panel>.table-bordered>thead>tr>th:first-child, +.panel>.table-responsive>.table-bordered>thead>tr>th:first-child, +.panel>.table-bordered>tbody>tr>th:first-child, +.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child, +.panel>.table-bordered>tfoot>tr>th:first-child, +.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child, +.panel>.table-bordered>thead>tr>td:first-child, +.panel>.table-responsive>.table-bordered>thead>tr>td:first-child, +.panel>.table-bordered>tbody>tr>td:first-child, +.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child, +.panel>.table-bordered>tfoot>tr>td:first-child, +.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child { + border-left: 0 +} + +.panel>.table-bordered>thead>tr>th:last-child, +.panel>.table-responsive>.table-bordered>thead>tr>th:last-child, +.panel>.table-bordered>tbody>tr>th:last-child, +.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child, +.panel>.table-bordered>tfoot>tr>th:last-child, +.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child, +.panel>.table-bordered>thead>tr>td:last-child, +.panel>.table-responsive>.table-bordered>thead>tr>td:last-child, +.panel>.table-bordered>tbody>tr>td:last-child, +.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child, +.panel>.table-bordered>tfoot>tr>td:last-child, +.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child { + border-right: 0 +} + +.panel>.table-bordered>thead>tr:first-child>td, +.panel>.table-responsive>.table-bordered>thead>tr:first-child>td, +.panel>.table-bordered>tbody>tr:first-child>td, +.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td, +.panel>.table-bordered>thead>tr:first-child>th, +.panel>.table-responsive>.table-bordered>thead>tr:first-child>th, +.panel>.table-bordered>tbody>tr:first-child>th, +.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th { + border-bottom: 0 +} + +.panel>.table-bordered>tbody>tr:last-child>td, +.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td, +.panel>.table-bordered>tfoot>tr:last-child>td, +.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td, +.panel>.table-bordered>tbody>tr:last-child>th, +.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th, +.panel>.table-bordered>tfoot>tr:last-child>th, +.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th { + border-bottom: 0 +} + +.panel>.table-responsive { + border: 0; + margin-bottom: 0 +} + +.panel-group { + margin-bottom: 20px +} + +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px +} + +.panel-group .panel+.panel { + margin-top: 5px +} + +.panel-group .panel-heading { + border-bottom: 0 +} + +.panel-group .panel-heading+.panel-collapse>.panel-body, +.panel-group .panel-heading+.panel-collapse>.list-group { + border-top: 1px solid #ddd +} + +.panel-group .panel-footer { + border-top: 0 +} + +.panel-group .panel-footer+.panel-collapse .panel-body { + border-bottom: 1px solid #ddd +} + +.panel-default { + border-color: #ddd +} + +.panel-default>.panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd +} + +.panel-default>.panel-heading+.panel-collapse>.panel-body { + border-top-color: #ddd +} + +.panel-default>.panel-heading .badge { + color: #f5f5f5; + background-color: #333 +} + +.panel-default>.panel-footer+.panel-collapse>.panel-body { + border-bottom-color: #ddd +} + +.panel-primary { + border-color: #337ab7 +} + +.panel-primary>.panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7 +} + +.panel-primary>.panel-heading+.panel-collapse>.panel-body { + border-top-color: #337ab7 +} + +.panel-primary>.panel-heading .badge { + color: #337ab7; + background-color: #fff +} + +.panel-primary>.panel-footer+.panel-collapse>.panel-body { + border-bottom-color: #337ab7 +} + +.panel-success { + border-color: #d6e9c6 +} + +.panel-success>.panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6 +} + +.panel-success>.panel-heading+.panel-collapse>.panel-body { + border-top-color: #d6e9c6 +} + +.panel-success>.panel-heading .badge { + color: #dff0d8; + background-color: #3c763d +} + +.panel-success>.panel-footer+.panel-collapse>.panel-body { + border-bottom-color: #d6e9c6 +} + +.panel-info { + border-color: #bce8f1 +} + +.panel-info>.panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1 +} + +.panel-info>.panel-heading+.panel-collapse>.panel-body { + border-top-color: #bce8f1 +} + +.panel-info>.panel-heading .badge { + color: #d9edf7; + background-color: #31708f +} + +.panel-info>.panel-footer+.panel-collapse>.panel-body { + border-bottom-color: #bce8f1 +} + +.panel-warning { + border-color: #faebcc +} + +.panel-warning>.panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc +} + +.panel-warning>.panel-heading+.panel-collapse>.panel-body { + border-top-color: #faebcc +} + +.panel-warning>.panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b +} + +.panel-warning>.panel-footer+.panel-collapse>.panel-body { + border-bottom-color: #faebcc +} + +.panel-danger { + border-color: #ebccd1 +} + +.panel-danger>.panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1 +} + +.panel-danger>.panel-heading+.panel-collapse>.panel-body { + border-top-color: #ebccd1 +} + +.panel-danger>.panel-heading .badge { + color: #f2dede; + background-color: #a94442 +} + +.panel-danger>.panel-footer+.panel-collapse>.panel-body { + border-bottom-color: #ebccd1 +} + +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden +} + +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0 +} + +.embed-responsive-16by9 { + padding-bottom: 56.25% +} + +.embed-responsive-4by3 { + padding-bottom: 75% +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05) +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15) +} + +.well-lg { + padding: 24px; + border-radius: 6px +} + +.well-sm { + padding: 9px; + border-radius: 3px +} + +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .2; + filter: alpha(opacity=20) +} + +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: .5; + filter: alpha(opacity=50) +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none +} + +.modal-open { + overflow: hidden +} + +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + -webkit-overflow-scrolling: touch; + outline: 0 +} + +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out +} + +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0) +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto +} + +.modal-dialog { + position: relative; + width: auto; + margin: 10px +} + +.modal-content { + position: relative; + background-color: #fff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + -webkit-background-clip: padding-box; + background-clip: padding-box; + outline: 0 +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000 +} + +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0) +} + +.modal-backdrop.in { + opacity: .5; + filter: alpha(opacity=50) +} + +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; + min-height: 16.42857143px +} + +.modal-header .close { + margin-top: -2px +} + +.modal-title { + margin: 0; + line-height: 1.42857143 +} + +.modal-body { + position: relative; + padding: 15px +} + +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5 +} + +.modal-footer .btn+.btn { + margin-left: 5px; + margin-bottom: 0 +} + +.modal-footer .btn-group .btn+.btn { + margin-left: -1px +} + +.modal-footer .btn-block+.btn-block { + margin-left: 0 +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll +} + +@media (min-width:768px) { + .modal-dialog { + width: 600px; + margin: 30px auto + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5) + } + .modal-sm { + width: 300px + } +} + +@media (min-width:992px) { + .modal-lg { + width: 900px + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + font-size: 12px; + opacity: 0; + filter: alpha(opacity=0) +} + +.tooltip.in { + opacity: .9; + filter: alpha(opacity=90) +} + +.tooltip.top { + margin-top: -3px; + padding: 5px 0 +} + +.tooltip.right { + margin-left: 3px; + padding: 0 5px +} + +.tooltip.bottom { + margin-top: 3px; + padding: 5px 0 +} + +.tooltip.left { + margin-left: -3px; + padding: 0 5px +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000 +} + +.tooltip.top-left .tooltip-arrow { + bottom: 0; + right: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000 +} + +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000 +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000 +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000 +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000 +} + +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000 +} + +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000 +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + font-size: 14px; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2) +} + +.popover.top { + margin-top: -10px +} + +.popover.right { + margin-left: 10px +} + +.popover.bottom { + margin-top: 10px +} + +.popover.left { + margin-left: -10px +} + +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0 +} + +.popover-content { + padding: 9px 14px +} + +.popover>.arrow, +.popover>.arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid +} + +.popover>.arrow { + border-width: 11px +} + +.popover>.arrow:after { + border-width: 10px; + content: "" +} + +.popover.top>.arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + bottom: -11px +} + +.popover.top>.arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #fff +} + +.popover.right>.arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, 0.25) +} + +.popover.right>.arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #fff +} + +.popover.bottom>.arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + top: -11px +} + +.popover.bottom>.arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #fff +} + +.popover.left>.arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25) +} + +.popover.left>.arrow:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: #fff; + bottom: -10px +} + +.carousel { + position: relative +} + +.carousel-inner { + position: relative; + overflow: hidden; + width: 100% +} + +.carousel-inner>.item { + display: none; + position: relative; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left +} + +.carousel-inner>.item>img, +.carousel-inner>.item>a>img { + line-height: 1 +} + +@media all and (transform-3d), +(-webkit-transform-3d) { + .carousel-inner>.item { + -webkit-transition: -webkit-transform 0.6s ease-in-out; + -o-transition: -o-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px + } + .carousel-inner>.item.next, + .carousel-inner>.item.active.right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + left: 0 + } + .carousel-inner>.item.prev, + .carousel-inner>.item.active.left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + left: 0 + } + .carousel-inner>.item.next.left, + .carousel-inner>.item.prev.right, + .carousel-inner>.item.active { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + left: 0 + } +} + +.carousel-inner>.active, +.carousel-inner>.next, +.carousel-inner>.prev { + display: block +} + +.carousel-inner>.active { + left: 0 +} + +.carousel-inner>.next, +.carousel-inner>.prev { + position: absolute; + top: 0; + width: 100% +} + +.carousel-inner>.next { + left: 100% +} + +.carousel-inner>.prev { + left: -100% +} + +.carousel-inner>.next.left, +.carousel-inner>.prev.right { + left: 0 +} + +.carousel-inner>.active.left { + left: -100% +} + +.carousel-inner>.active.right { + left: 100% +} + +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 15%; + opacity: .5; + filter: alpha(opacity=50); + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6) +} + +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, color-stop(0, rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1) +} + +.carousel-control.right { + left: auto; + right: 0; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-image: -webkit-gradient(linear, left top, right top, color-stop(0, rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1) +} + +.carousel-control:hover, +.carousel-control:focus { + outline: 0; + color: #fff; + text-decoration: none; + opacity: .9; + filter: alpha(opacity=90) +} + +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + margin-top: -10px; + z-index: 5; + display: inline-block +} + +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px +} + +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px +} + +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + line-height: 1; + font-family: serif +} + +.carousel-control .icon-prev:before { + content: '\2039' +} + +.carousel-control .icon-next:before { + content: '\203a' +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center +} + +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid #fff; + border-radius: 10px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0) +} + +.carousel-indicators .active { + margin: 0; + width: 12px; + height: 12px; + background-color: #fff +} + +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6) +} + +.carousel-caption .btn { + text-shadow: none +} + +@media screen and (min-width:768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -15px + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -15px + } + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px + } + .carousel-indicators { + bottom: 20px + } +} + +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical>.btn-group:before, +.btn-group-vertical>.btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + content: " "; + display: table +} + +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical>.btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both +} + +.center-block { + display: block; + margin-left: auto; + margin-right: auto +} + +.pull-right { + float: right !important +} + +.pull-left { + float: left !important +} + +.hide { + display: none !important +} + +.show { + display: block !important +} + +.invisible { + visibility: hidden +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0 +} + +.hidden { + display: none !important +} + +.affix { + position: fixed +} + +@-ms-viewport { + width: device-width +} + +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important +} + +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important +} + +@media (max-width:767px) { + .visible-xs { + display: block !important + } + table.visible-xs { + display: table !important + } + tr.visible-xs { + display: table-row !important + } + th.visible-xs, + td.visible-xs { + display: table-cell !important + } +} + +@media (max-width:767px) { + .visible-xs-block { + display: block !important + } +} + +@media (max-width:767px) { + .visible-xs-inline { + display: inline !important + } +} + +@media (max-width:767px) { + .visible-xs-inline-block { + display: inline-block !important + } +} + +@media (min-width:768px) and (max-width:991px) { + .visible-sm { + display: block !important + } + table.visible-sm { + display: table !important + } + tr.visible-sm { + display: table-row !important + } + th.visible-sm, + td.visible-sm { + display: table-cell !important + } +} + +@media (min-width:768px) and (max-width:991px) { + .visible-sm-block { + display: block !important + } +} + +@media (min-width:768px) and (max-width:991px) { + .visible-sm-inline { + display: inline !important + } +} + +@media (min-width:768px) and (max-width:991px) { + .visible-sm-inline-block { + display: inline-block !important + } +} + +@media (min-width:992px) and (max-width:1199px) { + .visible-md { + display: block !important + } + table.visible-md { + display: table !important + } + tr.visible-md { + display: table-row !important + } + th.visible-md, + td.visible-md { + display: table-cell !important + } +} + +@media (min-width:992px) and (max-width:1199px) { + .visible-md-block { + display: block !important + } +} + +@media (min-width:992px) and (max-width:1199px) { + .visible-md-inline { + display: inline !important + } +} + +@media (min-width:992px) and (max-width:1199px) { + .visible-md-inline-block { + display: inline-block !important + } +} + +@media (min-width:1200px) { + .visible-lg { + display: block !important + } + table.visible-lg { + display: table !important + } + tr.visible-lg { + display: table-row !important + } + th.visible-lg, + td.visible-lg { + display: table-cell !important + } +} + +@media (min-width:1200px) { + .visible-lg-block { + display: block !important + } +} + +@media (min-width:1200px) { + .visible-lg-inline { + display: inline !important + } +} + +@media (min-width:1200px) { + .visible-lg-inline-block { + display: inline-block !important + } +} + +@media (max-width:767px) { + .hidden-xs { + display: none !important + } +} + +@media (min-width:768px) and (max-width:991px) { + .hidden-sm { + display: none !important + } +} + +@media (min-width:992px) and (max-width:1199px) { + .hidden-md { + display: none !important + } +} + +@media (min-width:1200px) { + .hidden-lg { + display: none !important + } +} + +.visible-print { + display: none !important +} + +@media print { + .visible-print { + display: block !important + } + table.visible-print { + display: table !important + } + tr.visible-print { + display: table-row !important + } + th.visible-print, + td.visible-print { + display: table-cell !important + } +} + +.visible-print-block { + display: none !important +} + +@media print { + .visible-print-block { + display: block !important + } +} + +.visible-print-inline { + display: none !important +} + +@media print { + .visible-print-inline { + display: inline !important + } +} + +.visible-print-inline-block { + display: none !important +} + +@media print { + .visible-print-inline-block { + display: inline-block !important + } +} + +@media print { + .hidden-print { + display: none !important + } +} + + +/*! * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"} + */ - /** +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.4.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal +} + +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale +} + +.fa-lg { + font-size: 1.33333333em; + line-height: .75em; + vertical-align: -15% +} + +.fa-2x { + font-size: 2em +} + +.fa-3x { + font-size: 3em +} + +.fa-4x { + font-size: 4em +} + +.fa-5x { + font-size: 5em +} + +.fa-fw { + width: 1.28571429em; + text-align: center +} + +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none +} + +.fa-ul>li { + position: relative +} + +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: .14285714em; + text-align: center +} + +.fa-li.fa-lg { + left: -1.85714286em +} + +.fa-border { + padding: .2em .25em .15em; + border: solid .08em #eee; + border-radius: .1em +} + +.fa-pull-left { + float: left +} + +.fa-pull-right { + float: right +} + +.fa.fa-pull-left { + margin-right: .3em +} + +.fa.fa-pull-right { + margin-left: .3em +} + +.pull-right { + float: right +} + +.pull-left { + float: left +} + +.fa.pull-left { + margin-right: .3em +} + +.fa.pull-right { + margin-left: .3em +} + +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear +} + +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8) +} + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg) + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg) + } +} + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg) + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg) + } +} + +.fa-rotate-90 { + filter: progid: DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg) +} + +.fa-rotate-180 { + filter: progid: DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg) +} + +.fa-rotate-270 { + filter: progid: DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg) +} + +.fa-flip-horizontal { + filter: progid: DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1) +} + +.fa-flip-vertical { + filter: progid: DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1) +} + +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none +} + +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle +} + +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center +} + +.fa-stack-1x { + line-height: inherit +} + +.fa-stack-2x { + font-size: 2em +} + +.fa-inverse { + color: #fff +} + +.fa-glass:before { + content: "\f000" +} + +.fa-music:before { + content: "\f001" +} + +.fa-search:before { + content: "\f002" +} + +.fa-envelope-o:before { + content: "\f003" +} + +.fa-heart:before { + content: "\f004" +} + +.fa-star:before { + content: "\f005" +} + +.fa-star-o:before { + content: "\f006" +} + +.fa-user:before { + content: "\f007" +} + +.fa-film:before { + content: "\f008" +} + +.fa-th-large:before { + content: "\f009" +} + +.fa-th:before { + content: "\f00a" +} + +.fa-th-list:before { + content: "\f00b" +} + +.fa-check:before { + content: "\f00c" +} + +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d" +} + +.fa-search-plus:before { + content: "\f00e" +} + +.fa-search-minus:before { + content: "\f010" +} + +.fa-power-off:before { + content: "\f011" +} + +.fa-signal:before { + content: "\f012" +} + +.fa-gear:before, +.fa-cog:before { + content: "\f013" +} + +.fa-trash-o:before { + content: "\f014" +} + +.fa-home:before { + content: "\f015" +} + +.fa-file-o:before { + content: "\f016" +} + +.fa-clock-o:before { + content: "\f017" +} + +.fa-road:before { + content: "\f018" +} + +.fa-download:before { + content: "\f019" +} + +.fa-arrow-circle-o-down:before { + content: "\f01a" +} + +.fa-arrow-circle-o-up:before { + content: "\f01b" +} + +.fa-inbox:before { + content: "\f01c" +} + +.fa-play-circle-o:before { + content: "\f01d" +} + +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e" +} + +.fa-refresh:before { + content: "\f021" +} + +.fa-list-alt:before { + content: "\f022" +} + +.fa-lock:before { + content: "\f023" +} + +.fa-flag:before { + content: "\f024" +} + +.fa-headphones:before { + content: "\f025" +} + +.fa-volume-off:before { + content: "\f026" +} + +.fa-volume-down:before { + content: "\f027" +} + +.fa-volume-up:before { + content: "\f028" +} + +.fa-qrcode:before { + content: "\f029" +} + +.fa-barcode:before { + content: "\f02a" +} + +.fa-tag:before { + content: "\f02b" +} + +.fa-tags:before { + content: "\f02c" +} + +.fa-book:before { + content: "\f02d" +} + +.fa-bookmark:before { + content: "\f02e" +} + +.fa-print:before { + content: "\f02f" +} + +.fa-camera:before { + content: "\f030" +} + +.fa-font:before { + content: "\f031" +} + +.fa-bold:before { + content: "\f032" +} + +.fa-italic:before { + content: "\f033" +} + +.fa-text-height:before { + content: "\f034" +} + +.fa-text-width:before { + content: "\f035" +} + +.fa-align-left:before { + content: "\f036" +} + +.fa-align-center:before { + content: "\f037" +} + +.fa-align-right:before { + content: "\f038" +} + +.fa-align-justify:before { + content: "\f039" +} + +.fa-list:before { + content: "\f03a" +} + +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b" +} + +.fa-indent:before { + content: "\f03c" +} + +.fa-video-camera:before { + content: "\f03d" +} + +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e" +} + +.fa-pencil:before { + content: "\f040" +} + +.fa-map-marker:before { + content: "\f041" +} + +.fa-adjust:before { + content: "\f042" +} + +.fa-tint:before { + content: "\f043" +} + +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044" +} + +.fa-share-square-o:before { + content: "\f045" +} + +.fa-check-square-o:before { + content: "\f046" +} + +.fa-arrows:before { + content: "\f047" +} + +.fa-step-backward:before { + content: "\f048" +} + +.fa-fast-backward:before { + content: "\f049" +} + +.fa-backward:before { + content: "\f04a" +} + +.fa-play:before { + content: "\f04b" +} + +.fa-pause:before { + content: "\f04c" +} + +.fa-stop:before { + content: "\f04d" +} + +.fa-forward:before { + content: "\f04e" +} + +.fa-fast-forward:before { + content: "\f050" +} + +.fa-step-forward:before { + content: "\f051" +} + +.fa-eject:before { + content: "\f052" +} + +.fa-chevron-left:before { + content: "\f053" +} + +.fa-chevron-right:before { + content: "\f054" +} + +.fa-plus-circle:before { + content: "\f055" +} + +.fa-minus-circle:before { + content: "\f056" +} + +.fa-times-circle:before { + content: "\f057" +} + +.fa-check-circle:before { + content: "\f058" +} + +.fa-question-circle:before { + content: "\f059" +} + +.fa-info-circle:before { + content: "\f05a" +} + +.fa-crosshairs:before { + content: "\f05b" +} + +.fa-times-circle-o:before { + content: "\f05c" +} + +.fa-check-circle-o:before { + content: "\f05d" +} + +.fa-ban:before { + content: "\f05e" +} + +.fa-arrow-left:before { + content: "\f060" +} + +.fa-arrow-right:before { + content: "\f061" +} + +.fa-arrow-up:before { + content: "\f062" +} + +.fa-arrow-down:before { + content: "\f063" +} + +.fa-mail-forward:before, +.fa-share:before { + content: "\f064" +} + +.fa-expand:before { + content: "\f065" +} + +.fa-compress:before { + content: "\f066" +} + +.fa-plus:before { + content: "\f067" +} + +.fa-minus:before { + content: "\f068" +} + +.fa-asterisk:before { + content: "\f069" +} + +.fa-exclamation-circle:before { + content: "\f06a" +} + +.fa-gift:before { + content: "\f06b" +} + +.fa-leaf:before { + content: "\f06c" +} + +.fa-fire:before { + content: "\f06d" +} + +.fa-eye:before { + content: "\f06e" +} + +.fa-eye-slash:before { + content: "\f070" +} + +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071" +} + +.fa-plane:before { + content: "\f072" +} + +.fa-calendar:before { + content: "\f073" +} + +.fa-random:before { + content: "\f074" +} + +.fa-comment:before { + content: "\f075" +} + +.fa-magnet:before { + content: "\f076" +} + +.fa-chevron-up:before { + content: "\f077" +} + +.fa-chevron-down:before { + content: "\f078" +} + +.fa-retweet:before { + content: "\f079" +} + +.fa-shopping-cart:before { + content: "\f07a" +} + +.fa-folder:before { + content: "\f07b" +} + +.fa-folder-open:before { + content: "\f07c" +} + +.fa-arrows-v:before { + content: "\f07d" +} + +.fa-arrows-h:before { + content: "\f07e" +} + +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080" +} + +.fa-twitter-square:before { + content: "\f081" +} + +.fa-facebook-square:before { + content: "\f082" +} + +.fa-camera-retro:before { + content: "\f083" +} + +.fa-key:before { + content: "\f084" +} + +.fa-gears:before, +.fa-cogs:before { + content: "\f085" +} + +.fa-comments:before { + content: "\f086" +} + +.fa-thumbs-o-up:before { + content: "\f087" +} + +.fa-thumbs-o-down:before { + content: "\f088" +} + +.fa-star-half:before { + content: "\f089" +} + +.fa-heart-o:before { + content: "\f08a" +} + +.fa-sign-out:before { + content: "\f08b" +} + +.fa-linkedin-square:before { + content: "\f08c" +} + +.fa-thumb-tack:before { + content: "\f08d" +} + +.fa-external-link:before { + content: "\f08e" +} + +.fa-sign-in:before { + content: "\f090" +} + +.fa-trophy:before { + content: "\f091" +} + +.fa-github-square:before { + content: "\f092" +} + +.fa-upload:before { + content: "\f093" +} + +.fa-lemon-o:before { + content: "\f094" +} + +.fa-phone:before { + content: "\f095" +} + +.fa-square-o:before { + content: "\f096" +} + +.fa-bookmark-o:before { + content: "\f097" +} + +.fa-phone-square:before { + content: "\f098" +} + +.fa-twitter:before { + content: "\f099" +} + +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a" +} + +.fa-github:before { + content: "\f09b" +} + +.fa-unlock:before { + content: "\f09c" +} + +.fa-credit-card:before { + content: "\f09d" +} + +.fa-feed:before, +.fa-rss:before { + content: "\f09e" +} + +.fa-hdd-o:before { + content: "\f0a0" +} + +.fa-bullhorn:before { + content: "\f0a1" +} + +.fa-bell:before { + content: "\f0f3" +} + +.fa-certificate:before { + content: "\f0a3" +} + +.fa-hand-o-right:before { + content: "\f0a4" +} + +.fa-hand-o-left:before { + content: "\f0a5" +} + +.fa-hand-o-up:before { + content: "\f0a6" +} + +.fa-hand-o-down:before { + content: "\f0a7" +} + +.fa-arrow-circle-left:before { + content: "\f0a8" +} + +.fa-arrow-circle-right:before { + content: "\f0a9" +} + +.fa-arrow-circle-up:before { + content: "\f0aa" +} + +.fa-arrow-circle-down:before { + content: "\f0ab" +} + +.fa-globe:before { + content: "\f0ac" +} + +.fa-wrench:before { + content: "\f0ad" +} + +.fa-tasks:before { + content: "\f0ae" +} + +.fa-filter:before { + content: "\f0b0" +} + +.fa-briefcase:before { + content: "\f0b1" +} + +.fa-arrows-alt:before { + content: "\f0b2" +} + +.fa-group:before, +.fa-users:before { + content: "\f0c0" +} + +.fa-chain:before, +.fa-link:before { + content: "\f0c1" +} + +.fa-cloud:before { + content: "\f0c2" +} + +.fa-flask:before { + content: "\f0c3" +} + +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4" +} + +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5" +} + +.fa-paperclip:before { + content: "\f0c6" +} + +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7" +} + +.fa-square:before { + content: "\f0c8" +} + +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9" +} + +.fa-list-ul:before { + content: "\f0ca" +} + +.fa-list-ol:before { + content: "\f0cb" +} + +.fa-strikethrough:before { + content: "\f0cc" +} + +.fa-underline:before { + content: "\f0cd" +} + +.fa-table:before { + content: "\f0ce" +} + +.fa-magic:before { + content: "\f0d0" +} + +.fa-truck:before { + content: "\f0d1" +} + +.fa-pinterest:before { + content: "\f0d2" +} + +.fa-pinterest-square:before { + content: "\f0d3" +} + +.fa-google-plus-square:before { + content: "\f0d4" +} + +.fa-google-plus:before { + content: "\f0d5" +} + +.fa-money:before { + content: "\f0d6" +} + +.fa-caret-down:before { + content: "\f0d7" +} + +.fa-caret-up:before { + content: "\f0d8" +} + +.fa-caret-left:before { + content: "\f0d9" +} + +.fa-caret-right:before { + content: "\f0da" +} + +.fa-columns:before { + content: "\f0db" +} + +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc" +} + +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd" +} + +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de" +} + +.fa-envelope:before { + content: "\f0e0" +} + +.fa-linkedin:before { + content: "\f0e1" +} + +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2" +} + +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3" +} + +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4" +} + +.fa-comment-o:before { + content: "\f0e5" +} + +.fa-comments-o:before { + content: "\f0e6" +} + +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7" +} + +.fa-sitemap:before { + content: "\f0e8" +} + +.fa-umbrella:before { + content: "\f0e9" +} + +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea" +} + +.fa-lightbulb-o:before { + content: "\f0eb" +} + +.fa-exchange:before { + content: "\f0ec" +} + +.fa-cloud-download:before { + content: "\f0ed" +} + +.fa-cloud-upload:before { + content: "\f0ee" +} + +.fa-user-md:before { + content: "\f0f0" +} + +.fa-stethoscope:before { + content: "\f0f1" +} + +.fa-suitcase:before { + content: "\f0f2" +} + +.fa-bell-o:before { + content: "\f0a2" +} + +.fa-coffee:before { + content: "\f0f4" +} + +.fa-cutlery:before { + content: "\f0f5" +} + +.fa-file-text-o:before { + content: "\f0f6" +} + +.fa-building-o:before { + content: "\f0f7" +} + +.fa-hospital-o:before { + content: "\f0f8" +} + +.fa-ambulance:before { + content: "\f0f9" +} + +.fa-medkit:before { + content: "\f0fa" +} + +.fa-fighter-jet:before { + content: "\f0fb" +} + +.fa-beer:before { + content: "\f0fc" +} + +.fa-h-square:before { + content: "\f0fd" +} + +.fa-plus-square:before { + content: "\f0fe" +} + +.fa-angle-double-left:before { + content: "\f100" +} + +.fa-angle-double-right:before { + content: "\f101" +} + +.fa-angle-double-up:before { + content: "\f102" +} + +.fa-angle-double-down:before { + content: "\f103" +} + +.fa-angle-left:before { + content: "\f104" +} + +.fa-angle-right:before { + content: "\f105" +} + +.fa-angle-up:before { + content: "\f106" +} + +.fa-angle-down:before { + content: "\f107" +} + +.fa-desktop:before { + content: "\f108" +} + +.fa-laptop:before { + content: "\f109" +} + +.fa-tablet:before { + content: "\f10a" +} + +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b" +} + +.fa-circle-o:before { + content: "\f10c" +} + +.fa-quote-left:before { + content: "\f10d" +} + +.fa-quote-right:before { + content: "\f10e" +} + +.fa-spinner:before { + content: "\f110" +} + +.fa-circle:before { + content: "\f111" +} + +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112" +} + +.fa-github-alt:before { + content: "\f113" +} + +.fa-folder-o:before { + content: "\f114" +} + +.fa-folder-open-o:before { + content: "\f115" +} + +.fa-smile-o:before { + content: "\f118" +} + +.fa-frown-o:before { + content: "\f119" +} + +.fa-meh-o:before { + content: "\f11a" +} + +.fa-gamepad:before { + content: "\f11b" +} + +.fa-keyboard-o:before { + content: "\f11c" +} + +.fa-flag-o:before { + content: "\f11d" +} + +.fa-flag-checkered:before { + content: "\f11e" +} + +.fa-terminal:before { + content: "\f120" +} + +.fa-code:before { + content: "\f121" +} + +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122" +} + +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123" +} + +.fa-location-arrow:before { + content: "\f124" +} + +.fa-crop:before { + content: "\f125" +} + +.fa-code-fork:before { + content: "\f126" +} + +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127" +} + +.fa-question:before { + content: "\f128" +} + +.fa-info:before { + content: "\f129" +} + +.fa-exclamation:before { + content: "\f12a" +} + +.fa-superscript:before { + content: "\f12b" +} + +.fa-subscript:before { + content: "\f12c" +} + +.fa-eraser:before { + content: "\f12d" +} + +.fa-puzzle-piece:before { + content: "\f12e" +} + +.fa-microphone:before { + content: "\f130" +} + +.fa-microphone-slash:before { + content: "\f131" +} + +.fa-shield:before { + content: "\f132" +} + +.fa-calendar-o:before { + content: "\f133" +} + +.fa-fire-extinguisher:before { + content: "\f134" +} + +.fa-rocket:before { + content: "\f135" +} + +.fa-maxcdn:before { + content: "\f136" +} + +.fa-chevron-circle-left:before { + content: "\f137" +} + +.fa-chevron-circle-right:before { + content: "\f138" +} + +.fa-chevron-circle-up:before { + content: "\f139" +} + +.fa-chevron-circle-down:before { + content: "\f13a" +} + +.fa-html5:before { + content: "\f13b" +} + +.fa-css3:before { + content: "\f13c" +} + +.fa-anchor:before { + content: "\f13d" +} + +.fa-unlock-alt:before { + content: "\f13e" +} + +.fa-bullseye:before { + content: "\f140" +} + +.fa-ellipsis-h:before { + content: "\f141" +} + +.fa-ellipsis-v:before { + content: "\f142" +} + +.fa-rss-square:before { + content: "\f143" +} + +.fa-play-circle:before { + content: "\f144" +} + +.fa-ticket:before { + content: "\f145" +} + +.fa-minus-square:before { + content: "\f146" +} + +.fa-minus-square-o:before { + content: "\f147" +} + +.fa-level-up:before { + content: "\f148" +} + +.fa-level-down:before { + content: "\f149" +} + +.fa-check-square:before { + content: "\f14a" +} + +.fa-pencil-square:before { + content: "\f14b" +} + +.fa-external-link-square:before { + content: "\f14c" +} + +.fa-share-square:before { + content: "\f14d" +} + +.fa-compass:before { + content: "\f14e" +} + +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150" +} + +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151" +} + +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152" +} + +.fa-euro:before, +.fa-eur:before { + content: "\f153" +} + +.fa-gbp:before { + content: "\f154" +} + +.fa-dollar:before, +.fa-usd:before { + content: "\f155" +} + +.fa-rupee:before, +.fa-inr:before { + content: "\f156" +} + +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157" +} + +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158" +} + +.fa-won:before, +.fa-krw:before { + content: "\f159" +} + +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a" +} + +.fa-file:before { + content: "\f15b" +} + +.fa-file-text:before { + content: "\f15c" +} + +.fa-sort-alpha-asc:before { + content: "\f15d" +} + +.fa-sort-alpha-desc:before { + content: "\f15e" +} + +.fa-sort-amount-asc:before { + content: "\f160" +} + +.fa-sort-amount-desc:before { + content: "\f161" +} + +.fa-sort-numeric-asc:before { + content: "\f162" +} + +.fa-sort-numeric-desc:before { + content: "\f163" +} + +.fa-thumbs-up:before { + content: "\f164" +} + +.fa-thumbs-down:before { + content: "\f165" +} + +.fa-youtube-square:before { + content: "\f166" +} + +.fa-youtube:before { + content: "\f167" +} + +.fa-xing:before { + content: "\f168" +} + +.fa-xing-square:before { + content: "\f169" +} + +.fa-youtube-play:before { + content: "\f16a" +} + +.fa-dropbox:before { + content: "\f16b" +} + +.fa-stack-overflow:before { + content: "\f16c" +} + +.fa-instagram:before { + content: "\f16d" +} + +.fa-flickr:before { + content: "\f16e" +} + +.fa-adn:before { + content: "\f170" +} + +.fa-bitbucket:before { + content: "\f171" +} + +.fa-bitbucket-square:before { + content: "\f172" +} + +.fa-tumblr:before { + content: "\f173" +} + +.fa-tumblr-square:before { + content: "\f174" +} + +.fa-long-arrow-down:before { + content: "\f175" +} + +.fa-long-arrow-up:before { + content: "\f176" +} + +.fa-long-arrow-left:before { + content: "\f177" +} + +.fa-long-arrow-right:before { + content: "\f178" +} + +.fa-apple:before { + content: "\f179" +} + +.fa-windows:before { + content: "\f17a" +} + +.fa-android:before { + content: "\f17b" +} + +.fa-linux:before { + content: "\f17c" +} + +.fa-dribbble:before { + content: "\f17d" +} + +.fa-skype:before { + content: "\f17e" +} + +.fa-foursquare:before { + content: "\f180" +} + +.fa-trello:before { + content: "\f181" +} + +.fa-female:before { + content: "\f182" +} + +.fa-male:before { + content: "\f183" +} + +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184" +} + +.fa-sun-o:before { + content: "\f185" +} + +.fa-moon-o:before { + content: "\f186" +} + +.fa-archive:before { + content: "\f187" +} + +.fa-bug:before { + content: "\f188" +} + +.fa-vk:before { + content: "\f189" +} + +.fa-weibo:before { + content: "\f18a" +} + +.fa-renren:before { + content: "\f18b" +} + +.fa-pagelines:before { + content: "\f18c" +} + +.fa-stack-exchange:before { + content: "\f18d" +} + +.fa-arrow-circle-o-right:before { + content: "\f18e" +} + +.fa-arrow-circle-o-left:before { + content: "\f190" +} + +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191" +} + +.fa-dot-circle-o:before { + content: "\f192" +} + +.fa-wheelchair:before { + content: "\f193" +} + +.fa-vimeo-square:before { + content: "\f194" +} + +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195" +} + +.fa-plus-square-o:before { + content: "\f196" +} + +.fa-space-shuttle:before { + content: "\f197" +} + +.fa-slack:before { + content: "\f198" +} + +.fa-envelope-square:before { + content: "\f199" +} + +.fa-wordpress:before { + content: "\f19a" +} + +.fa-openid:before { + content: "\f19b" +} + +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c" +} + +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d" +} + +.fa-yahoo:before { + content: "\f19e" +} + +.fa-google:before { + content: "\f1a0" +} + +.fa-reddit:before { + content: "\f1a1" +} + +.fa-reddit-square:before { + content: "\f1a2" +} + +.fa-stumbleupon-circle:before { + content: "\f1a3" +} + +.fa-stumbleupon:before { + content: "\f1a4" +} + +.fa-delicious:before { + content: "\f1a5" +} + +.fa-digg:before { + content: "\f1a6" +} + +.fa-pied-piper:before { + content: "\f1a7" +} + +.fa-pied-piper-alt:before { + content: "\f1a8" +} + +.fa-drupal:before { + content: "\f1a9" +} + +.fa-joomla:before { + content: "\f1aa" +} + +.fa-language:before { + content: "\f1ab" +} + +.fa-fax:before { + content: "\f1ac" +} + +.fa-building:before { + content: "\f1ad" +} + +.fa-child:before { + content: "\f1ae" +} + +.fa-paw:before { + content: "\f1b0" +} + +.fa-spoon:before { + content: "\f1b1" +} + +.fa-cube:before { + content: "\f1b2" +} + +.fa-cubes:before { + content: "\f1b3" +} + +.fa-behance:before { + content: "\f1b4" +} + +.fa-behance-square:before { + content: "\f1b5" +} + +.fa-steam:before { + content: "\f1b6" +} + +.fa-steam-square:before { + content: "\f1b7" +} + +.fa-recycle:before { + content: "\f1b8" +} + +.fa-automobile:before, +.fa-car:before { + content: "\f1b9" +} + +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba" +} + +.fa-tree:before { + content: "\f1bb" +} + +.fa-spotify:before { + content: "\f1bc" +} + +.fa-deviantart:before { + content: "\f1bd" +} + +.fa-soundcloud:before { + content: "\f1be" +} + +.fa-database:before { + content: "\f1c0" +} + +.fa-file-pdf-o:before { + content: "\f1c1" +} + +.fa-file-word-o:before { + content: "\f1c2" +} + +.fa-file-excel-o:before { + content: "\f1c3" +} + +.fa-file-powerpoint-o:before { + content: "\f1c4" +} + +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5" +} + +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6" +} + +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7" +} + +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8" +} + +.fa-file-code-o:before { + content: "\f1c9" +} + +.fa-vine:before { + content: "\f1ca" +} + +.fa-codepen:before { + content: "\f1cb" +} + +.fa-jsfiddle:before { + content: "\f1cc" +} + +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd" +} + +.fa-circle-o-notch:before { + content: "\f1ce" +} + +.fa-ra:before, +.fa-rebel:before { + content: "\f1d0" +} + +.fa-ge:before, +.fa-empire:before { + content: "\f1d1" +} + +.fa-git-square:before { + content: "\f1d2" +} + +.fa-git:before { + content: "\f1d3" +} + +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\f1d4" +} + +.fa-tencent-weibo:before { + content: "\f1d5" +} + +.fa-qq:before { + content: "\f1d6" +} + +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7" +} + +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8" +} + +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9" +} + +.fa-history:before { + content: "\f1da" +} + +.fa-circle-thin:before { + content: "\f1db" +} + +.fa-header:before { + content: "\f1dc" +} + +.fa-paragraph:before { + content: "\f1dd" +} + +.fa-sliders:before { + content: "\f1de" +} + +.fa-share-alt:before { + content: "\f1e0" +} + +.fa-share-alt-square:before { + content: "\f1e1" +} + +.fa-bomb:before { + content: "\f1e2" +} + +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3" +} + +.fa-tty:before { + content: "\f1e4" +} + +.fa-binoculars:before { + content: "\f1e5" +} + +.fa-plug:before { + content: "\f1e6" +} + +.fa-slideshare:before { + content: "\f1e7" +} + +.fa-twitch:before { + content: "\f1e8" +} + +.fa-yelp:before { + content: "\f1e9" +} + +.fa-newspaper-o:before { + content: "\f1ea" +} + +.fa-wifi:before { + content: "\f1eb" +} + +.fa-calculator:before { + content: "\f1ec" +} + +.fa-paypal:before { + content: "\f1ed" +} + +.fa-google-wallet:before { + content: "\f1ee" +} + +.fa-cc-visa:before { + content: "\f1f0" +} + +.fa-cc-mastercard:before { + content: "\f1f1" +} + +.fa-cc-discover:before { + content: "\f1f2" +} + +.fa-cc-amex:before { + content: "\f1f3" +} + +.fa-cc-paypal:before { + content: "\f1f4" +} + +.fa-cc-stripe:before { + content: "\f1f5" +} + +.fa-bell-slash:before { + content: "\f1f6" +} + +.fa-bell-slash-o:before { + content: "\f1f7" +} + +.fa-trash:before { + content: "\f1f8" +} + +.fa-copyright:before { + content: "\f1f9" +} + +.fa-at:before { + content: "\f1fa" +} + +.fa-eyedropper:before { + content: "\f1fb" +} + +.fa-paint-brush:before { + content: "\f1fc" +} + +.fa-birthday-cake:before { + content: "\f1fd" +} + +.fa-area-chart:before { + content: "\f1fe" +} + +.fa-pie-chart:before { + content: "\f200" +} + +.fa-line-chart:before { + content: "\f201" +} + +.fa-lastfm:before { + content: "\f202" +} + +.fa-lastfm-square:before { + content: "\f203" +} + +.fa-toggle-off:before { + content: "\f204" +} + +.fa-toggle-on:before { + content: "\f205" +} + +.fa-bicycle:before { + content: "\f206" +} + +.fa-bus:before { + content: "\f207" +} + +.fa-ioxhost:before { + content: "\f208" +} + +.fa-angellist:before { + content: "\f209" +} + +.fa-cc:before { + content: "\f20a" +} + +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b" +} + +.fa-meanpath:before { + content: "\f20c" +} + +.fa-buysellads:before { + content: "\f20d" +} + +.fa-connectdevelop:before { + content: "\f20e" +} + +.fa-dashcube:before { + content: "\f210" +} + +.fa-forumbee:before { + content: "\f211" +} + +.fa-leanpub:before { + content: "\f212" +} + +.fa-sellsy:before { + content: "\f213" +} + +.fa-shirtsinbulk:before { + content: "\f214" +} + +.fa-simplybuilt:before { + content: "\f215" +} + +.fa-skyatlas:before { + content: "\f216" +} + +.fa-cart-plus:before { + content: "\f217" +} + +.fa-cart-arrow-down:before { + content: "\f218" +} + +.fa-diamond:before { + content: "\f219" +} + +.fa-ship:before { + content: "\f21a" +} + +.fa-user-secret:before { + content: "\f21b" +} + +.fa-motorcycle:before { + content: "\f21c" +} + +.fa-street-view:before { + content: "\f21d" +} + +.fa-heartbeat:before { + content: "\f21e" +} + +.fa-venus:before { + content: "\f221" +} + +.fa-mars:before { + content: "\f222" +} + +.fa-mercury:before { + content: "\f223" +} + +.fa-intersex:before, +.fa-transgender:before { + content: "\f224" +} + +.fa-transgender-alt:before { + content: "\f225" +} + +.fa-venus-double:before { + content: "\f226" +} + +.fa-mars-double:before { + content: "\f227" +} + +.fa-venus-mars:before { + content: "\f228" +} + +.fa-mars-stroke:before { + content: "\f229" +} + +.fa-mars-stroke-v:before { + content: "\f22a" +} + +.fa-mars-stroke-h:before { + content: "\f22b" +} + +.fa-neuter:before { + content: "\f22c" +} + +.fa-genderless:before { + content: "\f22d" +} + +.fa-facebook-official:before { + content: "\f230" +} + +.fa-pinterest-p:before { + content: "\f231" +} + +.fa-whatsapp:before { + content: "\f232" +} + +.fa-server:before { + content: "\f233" +} + +.fa-user-plus:before { + content: "\f234" +} + +.fa-user-times:before { + content: "\f235" +} + +.fa-hotel:before, +.fa-bed:before { + content: "\f236" +} + +.fa-viacoin:before { + content: "\f237" +} + +.fa-train:before { + content: "\f238" +} + +.fa-subway:before { + content: "\f239" +} + +.fa-medium:before { + content: "\f23a" +} + +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b" +} + +.fa-optin-monster:before { + content: "\f23c" +} + +.fa-opencart:before { + content: "\f23d" +} + +.fa-expeditedssl:before { + content: "\f23e" +} + +.fa-battery-4:before, +.fa-battery-full:before { + content: "\f240" +} + +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241" +} + +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242" +} + +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243" +} + +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244" +} + +.fa-mouse-pointer:before { + content: "\f245" +} + +.fa-i-cursor:before { + content: "\f246" +} + +.fa-object-group:before { + content: "\f247" +} + +.fa-object-ungroup:before { + content: "\f248" +} + +.fa-sticky-note:before { + content: "\f249" +} + +.fa-sticky-note-o:before { + content: "\f24a" +} + +.fa-cc-jcb:before { + content: "\f24b" +} + +.fa-cc-diners-club:before { + content: "\f24c" +} + +.fa-clone:before { + content: "\f24d" +} + +.fa-balance-scale:before { + content: "\f24e" +} + +.fa-hourglass-o:before { + content: "\f250" +} + +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251" +} + +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252" +} + +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253" +} + +.fa-hourglass:before { + content: "\f254" +} + +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255" +} + +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256" +} + +.fa-hand-scissors-o:before { + content: "\f257" +} + +.fa-hand-lizard-o:before { + content: "\f258" +} + +.fa-hand-spock-o:before { + content: "\f259" +} + +.fa-hand-pointer-o:before { + content: "\f25a" +} + +.fa-hand-peace-o:before { + content: "\f25b" +} + +.fa-trademark:before { + content: "\f25c" +} + +.fa-registered:before { + content: "\f25d" +} + +.fa-creative-commons:before { + content: "\f25e" +} + +.fa-gg:before { + content: "\f260" +} + +.fa-gg-circle:before { + content: "\f261" +} + +.fa-tripadvisor:before { + content: "\f262" +} + +.fa-odnoklassniki:before { + content: "\f263" +} + +.fa-odnoklassniki-square:before { + content: "\f264" +} + +.fa-get-pocket:before { + content: "\f265" +} + +.fa-wikipedia-w:before { + content: "\f266" +} + +.fa-safari:before { + content: "\f267" +} + +.fa-chrome:before { + content: "\f268" +} + +.fa-firefox:before { + content: "\f269" +} + +.fa-opera:before { + content: "\f26a" +} + +.fa-internet-explorer:before { + content: "\f26b" +} + +.fa-tv:before, +.fa-television:before { + content: "\f26c" +} + +.fa-contao:before { + content: "\f26d" +} + +.fa-500px:before { + content: "\f26e" +} + +.fa-amazon:before { + content: "\f270" +} + +.fa-calendar-plus-o:before { + content: "\f271" +} + +.fa-calendar-minus-o:before { + content: "\f272" +} + +.fa-calendar-times-o:before { + content: "\f273" +} + +.fa-calendar-check-o:before { + content: "\f274" +} + +.fa-industry:before { + content: "\f275" +} + +.fa-map-pin:before { + content: "\f276" +} + +.fa-map-signs:before { + content: "\f277" +} + +.fa-map-o:before { + content: "\f278" +} + +.fa-map:before { + content: "\f279" +} + +.fa-commenting:before { + content: "\f27a" +} + +.fa-commenting-o:before { + content: "\f27b" +} + +.fa-houzz:before { + content: "\f27c" +} + +.fa-vimeo:before { + content: "\f27d" +} + +.fa-black-tie:before { + content: "\f27e" +} + +.fa-fonticons:before { + content: "\f280" +} + + +/** * cubeportfolio v1.2 - http://scriptpie.com * * Copyright - 2013 Mihai Buricea (http://www.scriptpie.com) @@ -37,250 +12599,7528 @@ * */ -@charset "utf-8";.cbp,.cbp-item,.cbp-wrapper{filter:inherit}.cbp{position:relative;overflow:hidden;margin:0 auto;height:400px;visibility:visible!important}.cbp .cbp-item,.cbp-wrapper{position:absolute;top:0;left:0;list-style-type:none;margin:0;padding:0;overflow:hidden}.cbp .cbp-item{z-index:2;display:block;width:300px;height:200px}.cbp-item-wrapper{width:100%;height:100%;position:absolute;top:0;left:0}.cbp img{display:block}.cbp-loading,.cbp-loading *,.cbp-no-transition .cbp-item{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.cbp-appendItems-loading{-webkit-transition:height .4s ease!important;-moz-transition:height .4s ease!important;-o-transition:height .4s ease!important;transition:height .4s ease!important}.cbp-appendItems-loading .cbp-wrapper{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.cbp-loading{background:url(../images/cbp-loading.gif) no-repeat scroll center center transparent}.cbp .cbp-item-hidden{pointer-events:none;z-index:1}.cbp-wrapper{visibility:hidden;width:100%;height:100%;z-index:1}.cbp-ready .cbp-wrapper{visibility:visible}.cbp-wrapper-front{z-index:3}.cbp-wrapper-back{z-index:-1}.cbp-caption,.cbp-caption-activeWrap,.cbp-caption-defaultWrap{width:100%;height:100%;overflow:hidden;position:relative;display:block;text-decoration:none}.cbp-caption-activeWrap,.cbp-caption-defaultWrap{position:absolute;z-index:1}.cbp-caption-activeWrap{z-index:2}.cbp-l-caption-title{color:#fff;font:700 16px/18px sans-serif;margin-bottom:5px}.cbp-l-caption-desc{color:#777;font:400 12px/16px sans-serif}.cbp-l-caption-text{font:400 14px "Open Sans",sans-serif;color:#fff;letter-spacing:3px}.cbp-l-caption-buttonLeft,.cbp-l-caption-buttonRight{background-color:#3288C4;color:#FFF;display:inline-block;font:12px/28px sans-serif;text-decoration:none;width:90px;text-align:center;margin:4px}.cbp-l-caption-buttonLeft:hover,.cbp-l-caption-buttonRight:hover{background-color:#2578B3}.cbp-caption-fadeIn .cbp-l-caption-alignLeft .cbp-l-caption-body,.cbp-caption-minimal .cbp-l-caption-alignLeft .cbp-l-caption-body,.cbp-caption-moveRight .cbp-l-caption-alignLeft .cbp-l-caption-body,.cbp-caption-overlayBottom .cbp-l-caption-alignLeft .cbp-l-caption-body,.cbp-caption-overlayRightAlong .cbp-l-caption-alignLeft .cbp-l-caption-body,.cbp-caption-pushDown .cbp-l-caption-alignLeft .cbp-l-caption-body,.cbp-caption-pushTop .cbp-l-caption-alignLeft .cbp-l-caption-body,.cbp-caption-revealBottom .cbp-l-caption-alignLeft .cbp-l-caption-body,.cbp-caption-revealLeft .cbp-l-caption-alignLeft .cbp-l-caption-body,.cbp-caption-revealTop .cbp-l-caption-alignLeft .cbp-l-caption-body,.cbp-caption-zoom .cbp-l-caption-alignLeft .cbp-l-caption-body{margin:30px 30px 0}.cbp-caption-overlayBottom .cbp-l-caption-alignLeft .cbp-l-caption-body,.cbp-caption-overlayBottomAlong .cbp-l-caption-alignLeft .cbp-l-caption-body,.cbp-caption-overlayBottomPush .cbp-l-caption-alignLeft .cbp-l-caption-body,.cbp-caption-overlayBottomReveal .cbp-l-caption-alignLeft .cbp-l-caption-body{margin:17px 30px 0}.cbp-caption-minimal .cbp-l-caption-desc,.cbp-caption-minimal .cbp-l-caption-title{position:relative;left:0;opacity:0;-webkit-transition:-webkit-transform .5s ease;-moz-transition:-moz-transform .5s ease;-o-transition:-o-transform .5s ease;transition:transform .5s ease}.cbp-caption-minimal .cbp-l-caption-title{-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-o-transform:translateY(-100%);transform:translateY(-100%)}.cbp-caption-minimal .cbp-l-caption-desc{-webkit-transform:translateY(100%);-moz-transform:translateY(100%);-o-transform:translateY(100%);transform:translateY(100%)}.cbp-caption-minimal .cbp-caption:hover .cbp-l-caption-desc,.cbp-caption-minimal .cbp-caption:hover .cbp-l-caption-title{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}.cbp-l-caption-alignCenter{display:table;width:100%;height:100%}.cbp-l-caption-alignCenter .cbp-l-caption-body{display:table-cell;vertical-align:middle;text-align:center}.cbp-l-caption-alignCenter .cbp-l-caption-buttonLeft,.cbp-l-caption-alignCenter .cbp-l-caption-buttonRight{position:relative;-webkit-transition:left .4s cubic-bezier(.19,1,.22,1);-moz-transition:left .4s cubic-bezier(.19,1,.22,1);-o-transition:left .4s cubic-bezier(.19,1,.22,1);transition:left .4s cubic-bezier(.19,1,.22,1)}.cbp-caption-minimal .cbp-l-caption-alignCenter .cbp-l-caption-buttonLeft,.cbp-caption-overlayBottom .cbp-l-caption-alignCenter .cbp-l-caption-buttonLeft,.cbp-caption-overlayBottomAlong .cbp-l-caption-alignCenter .cbp-l-caption-buttonLeft,.cbp-caption-overlayBottomPush .cbp-l-caption-alignCenter .cbp-l-caption-buttonLeft{left:-20px}.cbp-caption-minimal .cbp-l-caption-alignCenter .cbp-l-caption-buttonRight,.cbp-caption-overlayBottom .cbp-l-caption-alignCenter .cbp-l-caption-buttonRight,.cbp-caption-overlayBottomAlong .cbp-l-caption-alignCenter .cbp-l-caption-buttonRight,.cbp-caption-overlayBottomPush .cbp-l-caption-alignCenter .cbp-l-caption-buttonRight{left:20px}.cbp-caption:hover .cbp-l-caption-alignCenter .cbp-l-caption-buttonLeft,.cbp-caption:hover .cbp-l-caption-alignCenter .cbp-l-caption-buttonRight,.cbp-ie8 .cbp-l-caption-alignCenter .cbp-l-caption-buttonLeft,.cbp-ie8 .cbp-l-caption-alignCenter .cbp-l-caption-buttonRight,.cbp-ie9 .cbp-l-caption-alignCenter .cbp-l-caption-buttonLeft,.cbp-ie9 .cbp-l-caption-alignCenter .cbp-l-caption-buttonRight{left:0}.cbp-caption-pushTop .cbp-caption-activeWrap,.cbp-caption-pushTop .cbp-caption-defaultWrap{bottom:0;-webkit-transition:bottom .6s cubic-bezier(.19,1,.22,1);-moz-transition:bottom .6s cubic-bezier(.19,1,.22,1);-o-transition:bottom .6s cubic-bezier(.19,1,.22,1);transition:bottom .6s cubic-bezier(.19,1,.22,1)}.cbp-caption-pushTop .cbp-caption-activeWrap{bottom:-100%;background:none repeat scroll 0 0 #282727}.cbp-caption-pushTop .cbp-caption:hover .cbp-caption-defaultWrap{bottom:100%}.cbp-caption-pushTop .cbp-caption:hover .cbp-caption-activeWrap,.cbp-caption-pushTop.cbp-ie8 .cbp-caption:hover .cbp-caption-defaultWrap,.cbp-caption-pushTop.cbp-ie9 .cbp-caption:hover .cbp-caption-defaultWrap{bottom:0}.cbp-caption-pushTop.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap,.cbp-caption-pushTop.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap{bottom:-100%}.cbp-caption-pushDown .cbp-caption-activeWrap,.cbp-caption-pushDown .cbp-caption-defaultWrap{bottom:0;-webkit-transition:bottom .6s cubic-bezier(.19,1,.22,1);-moz-transition:bottom .6s cubic-bezier(.19,1,.22,1);-o-transition:bottom .6s cubic-bezier(.19,1,.22,1);transition:bottom .6s cubic-bezier(.19,1,.22,1)}.cbp-caption-pushDown .cbp-caption-activeWrap{bottom:100%;background:none repeat scroll 0 0 #282727}.cbp-caption-pushDown .cbp-caption:hover .cbp-caption-defaultWrap{bottom:-100%}.cbp-caption-pushDown .cbp-caption:hover .cbp-caption-activeWrap,.cbp-caption-pushDown.cbp-ie8 .cbp-caption:hover .cbp-caption-defaultWrap,.cbp-caption-pushDown.cbp-ie9 .cbp-caption:hover .cbp-caption-defaultWrap{bottom:0}.cbp-caption-pushDown.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap,.cbp-caption-pushDown.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap{bottom:100%}.cbp-caption-revealBottom .cbp-caption-defaultWrap{bottom:0;z-index:2;-webkit-transition:bottom .6s cubic-bezier(.19,1,.22,1);-moz-transition:bottom .6s cubic-bezier(.19,1,.22,1);-o-transition:bottom .6s cubic-bezier(.19,1,.22,1);transition:bottom .6s cubic-bezier(.19,1,.22,1)}.cbp-caption-revealBottom .cbp-caption-activeWrap{bottom:0;z-index:1;background:none repeat scroll 0 0 #282727}.cbp-caption-revealBottom .cbp-caption:hover .cbp-caption-defaultWrap{bottom:100%}.cbp-caption-revealBottom.cbp-ie8 .cbp-caption:hover .cbp-caption-defaultWrap,.cbp-caption-revealBottom.cbp-ie9 .cbp-caption:hover .cbp-caption-defaultWrap{bottom:0}.cbp-caption-revealTop .cbp-caption-defaultWrap{bottom:0;z-index:2;-webkit-transition:bottom .6s cubic-bezier(.19,1,.22,1);-moz-transition:bottom .6s cubic-bezier(.19,1,.22,1);-o-transition:bottom .6s cubic-bezier(.19,1,.22,1);transition:bottom .6s cubic-bezier(.19,1,.22,1)}.cbp-caption-revealTop .cbp-caption-activeWrap{bottom:0;z-index:1;background:none repeat scroll 0 0 #282727}.cbp-caption-revealTop .cbp-caption:hover .cbp-caption-defaultWrap{bottom:-100%}.cbp-caption-revealTop.cbp-ie8 .cbp-caption:hover .cbp-caption-defaultWrap,.cbp-caption-revealTop.cbp-ie9 .cbp-caption:hover .cbp-caption-defaultWrap{bottom:0}.cbp-caption-overlayBottomReveal .cbp-caption-defaultWrap{bottom:0;z-index:2;-webkit-transition:bottom .6s cubic-bezier(.19,1,.22,1);-moz-transition:bottom .6s cubic-bezier(.19,1,.22,1);-o-transition:bottom .6s cubic-bezier(.19,1,.22,1);transition:bottom .6s cubic-bezier(.19,1,.22,1)}.cbp-caption-overlayBottomReveal .cbp-caption-activeWrap{bottom:0;z-index:1;height:70px;background:none repeat scroll 0 0 #282727}.cbp-caption-overlayBottomReveal .cbp-caption:hover .cbp-caption-defaultWrap{bottom:70px}.cbp-caption-overlayBottomReveal.cbp-ie8 .cbp-caption:hover .cbp-caption-defaultWrap,.cbp-caption-overlayBottomReveal.cbp-ie9 .cbp-caption:hover .cbp-caption-defaultWrap{bottom:0}.cbp-caption-overlayBottomPush .cbp-caption-activeWrap,.cbp-caption-overlayBottomPush .cbp-caption-defaultWrap{bottom:0;-webkit-transition:bottom .6s cubic-bezier(.19,1,.22,1);-moz-transition:bottom .6s cubic-bezier(.19,1,.22,1);-o-transition:bottom .6s cubic-bezier(.19,1,.22,1);transition:bottom .6s cubic-bezier(.19,1,.22,1)}.cbp-caption-overlayBottomPush .cbp-caption-activeWrap{bottom:-70px;height:70px;background:none repeat scroll 0 0 #282727}.cbp-caption-overlayBottomPush .cbp-caption:hover .cbp-caption-defaultWrap{bottom:70px}.cbp-caption-overlayBottomPush .cbp-caption:hover .cbp-caption-activeWrap,.cbp-caption-overlayBottomPush.cbp-ie8 .cbp-caption:hover .cbp-caption-defaultWrap,.cbp-caption-overlayBottomPush.cbp-ie9 .cbp-caption:hover .cbp-caption-defaultWrap{bottom:0}.cbp-caption-overlayBottomPush.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap,.cbp-caption-overlayBottomPush.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap{bottom:-70px}.cbp-caption-overlayBottom .cbp-caption-activeWrap{bottom:-70px;height:70px;background-color:#181616;background-color:rgba(24,22,22,.7);-webkit-transition:bottom .6s cubic-bezier(.19,1,.22,1);-moz-transition:bottom .6s cubic-bezier(.19,1,.22,1);-o-transition:bottom .6s cubic-bezier(.19,1,.22,1);transition:bottom .6s cubic-bezier(.19,1,.22,1)}.cbp-caption-overlayBottom .cbp-caption:hover .cbp-caption-activeWrap{bottom:0}.cbp-caption-overlayBottom.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap{bottom:-70px}.cbp-caption-moveRight .cbp-caption-activeWrap{left:-100%;top:0;background:none repeat scroll 0 0 #282727;-webkit-transition:left .6s cubic-bezier(.19,1,.22,1);-moz-transition:left .6s cubic-bezier(.19,1,.22,1);-o-transition:left .6s cubic-bezier(.19,1,.22,1);transition:left .6s cubic-bezier(.19,1,.22,1)}.cbp-caption-moveRight .cbp-caption:hover .cbp-caption-activeWrap{left:0}.cbp-caption-moveRight.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap,.cbp-caption-moveRight.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap{left:-100%}.cbp-caption-revealLeft .cbp-caption-activeWrap{left:100%;top:0;background:none repeat scroll 0 0 #282727;-webkit-transition:left .6s cubic-bezier(.19,1,.22,1);-moz-transition:left .6s cubic-bezier(.19,1,.22,1);-o-transition:left .6s cubic-bezier(.19,1,.22,1);transition:left .6s cubic-bezier(.19,1,.22,1)}.cbp-caption-revealLeft .cbp-caption:hover .cbp-caption-activeWrap{left:0}.cbp-caption-revealLeft.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap,.cbp-caption-revealLeft.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap{left:100%}.cbp-caption-minimal .cbp-caption-activeWrap{background-color:rgba(0,0,0,.8);opacity:0}.cbp-caption-minimal .cbp-caption:hover .cbp-caption-activeWrap{opacity:1}.cbp-caption-minimal.cbp-ie8 .cbp-caption-activeWrap{background-color:#000;-ms-filter:"alpha(Opacity=0)"}.cbp-caption-minimal.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap{-ms-filter:"alpha(Opacity=90)"}.cbp-caption-fadeIn .cbp-caption-activeWrap{opacity:0;width:100%;height:100%;position:absolute;top:0;left:0;background-color:rgba(0,0,0,.85);-webkit-transition:opacity .6s cubic-bezier(.19,1,.22,1);-moz-transition:opacity .6s cubic-bezier(.19,1,.22,1);-o-transition:opacity .6s cubic-bezier(.19,1,.22,1);transition:opacity .6s cubic-bezier(.19,1,.22,1)}.cbp-caption-fadeIn.cbp-ie8 .cbp-caption-activeWrap{background-color:#000;-ms-filter:"alpha(Opacity=0)"}.cbp-caption-fadeIn .cbp-caption:hover .cbp-caption-activeWrap{opacity:1}.cbp-caption-fadeIn.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap{opacity:0}.cbp-caption-overlayRightAlong .cbp-caption-activeWrap,.cbp-caption-overlayRightAlong .cbp-caption-defaultWrap{left:0;-webkit-transition:left .6s cubic-bezier(.19,1,.22,1);-moz-transition:left .6s cubic-bezier(.19,1,.22,1);-o-transition:left .6s cubic-bezier(.19,1,.22,1);transition:left .6s cubic-bezier(.19,1,.22,1)}.cbp-caption-overlayRightAlong .cbp-caption-activeWrap{left:-50%;width:50%;background:none repeat scroll 0 0 #282727}.cbp-caption-overlayRightAlong .cbp-caption:hover .cbp-caption-defaultWrap{left:25%}.cbp-caption-overlayRightAlong .cbp-caption:hover .cbp-caption-activeWrap,.cbp-caption-overlayRightAlong.cbp-ie8 .cbp-caption:hover .cbp-caption-defaultWrap,.cbp-caption-overlayRightAlong.cbp-ie9 .cbp-caption:hover .cbp-caption-defaultWrap{left:0}.cbp-caption-overlayRightAlong.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap,.cbp-caption-overlayRightAlong.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap{left:-50%}.cbp-caption-overlayBottomAlong .cbp-caption-activeWrap,.cbp-caption-overlayBottomAlong .cbp-caption-defaultWrap{bottom:0;-webkit-transition:bottom .6s cubic-bezier(.19,1,.22,1);-moz-transition:bottom .6s cubic-bezier(.19,1,.22,1);-o-transition:bottom .6s cubic-bezier(.19,1,.22,1);transition:bottom .6s cubic-bezier(.19,1,.22,1)}.cbp-caption-overlayBottomAlong .cbp-caption-activeWrap{bottom:-70px;height:70px;background:none repeat scroll 0 0 #282727}.cbp-caption-overlayBottomAlong .cbp-caption:hover .cbp-caption-defaultWrap{bottom:35px}.cbp-caption-overlayBottomAlong .cbp-caption:hover .cbp-caption-activeWrap,.cbp-caption-overlayBottomAlong.cbp-ie8 .cbp-caption:hover .cbp-caption-defaultWrap,.cbp-caption-overlayBottomAlong.cbp-ie9 .cbp-caption:hover .cbp-caption-defaultWrap{bottom:0}.cbp-caption-overlayBottomAlong.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap,.cbp-caption-overlayBottomAlong.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap{bottom:-70px}.cbp-caption-zoom .cbp-caption-defaultWrap{width:100%;height:100%;overflow:hidden;-webkit-transition:-webkit-transform .6s cubic-bezier(.19,1,.22,1);-moz-transition:-moz-transform .6s cubic-bezier(.19,1,.22,1);-o-transition:-o-transform .6s cubic-bezier(.19,1,.22,1);transition:transform .6s cubic-bezier(.19,1,.22,1)}.cbp-caption-zoom .cbp-caption:hover .cbp-caption-defaultWrap{-webkit-transform:scale(1.25);-moz-transform:scale(1.25);-o-transform:scale(1.25);transform:scale(1.25)}.cbp-caption-zoom .cbp-caption-activeWrap{opacity:0;width:100%;height:100%;position:absolute;top:0;left:0;background-color:rgba(0,0,0,.9);-webkit-transition:opacity .8s cubic-bezier(.19,1,.22,1);-moz-transition:opacity .8s cubic-bezier(.19,1,.22,1);-o-transition:opacity .8s cubic-bezier(.19,1,.22,1);transition:opacity .8s cubic-bezier(.19,1,.22,1)}.cbp-caption-zoom.cbp-ie8 .cbp-caption-activeWrap{background-color:#000;-ms-filter:"alpha(Opacity=0)"}.cbp-caption-zoom .cbp-caption:hover .cbp-caption-activeWrap{opacity:1}.cbp-caption-zoom.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap{opacity:0}.cbp-animation-fadeOut{-webkit-transition:height .6s ease-in-out;-moz-transition:height .6s ease-in-out;-o-transition:height .6s ease-in-out;transition:height .6s ease-in-out}.cbp-animation-fadeOut .cbp-item{-webkit-transition:-webkit-transform .6s ease-in-out .2s,opacity .6s ease-in-out .2s;-moz-transition:-moz-transform .6s ease-in-out .2s,opacity .6s ease-in-out .2s;-o-transition:-o-transform .6s ease-in-out .2s,opacity .6s ease-in-out .2s;transition:transform .6s ease-in-out .2s,opacity .6s ease-in-out .2s}.cbp-animation-fadeOut .cbp-item-hidden{-webkit-transition:-webkit-transform .6s ease-in-out 0s,opacity .4s ease-in-out 0s;-moz-transition:-moz-transform .6s ease-in-out 0s,opacity .4s ease-in-out 0s;-o-transition:-o-transform .6s ease-in-out 0s,opacity .4s ease-in-out 0s;transition:transform .6s ease-in-out 0s,opacity .4s ease-in-out 0s}.cbp-animation-quicksand{-webkit-transition:height .6s ease-in-out;-moz-transition:height .6s ease-in-out;-o-transition:height .6s ease-in-out;transition:height .6s ease-in-out}.cbp-animation-quicksand .cbp-item{-webkit-transition:-webkit-transform .6s ease-in-out .2s,opacity .6s ease-in-out .2s;-moz-transition:-moz-transform .6s ease-in-out .2s,opacity .6s ease-in-out .2s;-o-transition:-o-transform .6s ease-in-out .2s,opacity .6s ease-in-out .2s;transition:transform .6s ease-in-out .2s,opacity .6s ease-in-out .2s}.cbp-animation-quicksand .cbp-item-hidden{-webkit-transition:-webkit-transform .6s ease-in-out 0s,opacity .4s ease-in-out 0s;-moz-transition:-moz-transform .6s ease-in-out 0s,opacity .4s ease-in-out 0s;-o-transition:-o-transform .6s ease-in-out 0s,opacity .4s ease-in-out 0s;transition:transform .6s ease-in-out 0s,opacity .4s ease-in-out 0s}.cbp-animation-skew{-webkit-transition:height .3s ease-in-out;-moz-transition:height .3s ease-in-out;-o-transition:height .3s ease-in-out;transition:height .3s ease-in-out}.cbp-animation-skew .cbp-item{-webkit-transition:-webkit-transform .3s ease-in,opacity .3s ease-in;-moz-transition:-moz-transform .3s ease-in,opacity .3s ease-in;-o-transition:-o-transform .3s ease-in,opacity .3s ease-in;transition:transform .3s ease-in,opacity .3s ease-in}.cbp-animation-skew .cbp-item-hidden{-webkit-transition:-webkit-transform .3s ease-in 0s,opacity .3s ease-in 0s;-moz-transition:-moz-transform .3s ease-in 0s,opacity .3s ease-in 0s;-o-transition:-o-transform .3s ease-in 0s,opacity .3s ease-in 0s;transition:transform .3s ease-in 0s,opacity .3s ease-in 0s}.cbp-animation-boxShadow{-webkit-transition:height .6s ease-in-out;-moz-transition:height .6s ease-in-out;-o-transition:height .6s ease-in-out;transition:height .6s ease-in-out}.cbp-animation-boxShadow .cbp-item{-webkit-transition:-webkit-transform .6s ease-in-out,opacity .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out,opacity .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out,opacity .6s ease-in-out;transition:transform .6s ease-in-out,opacity .6s ease-in-out}.cbp-animation-boxShadow .cbp-item .cbp-animation-boxShadowMask{position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1;-webkit-transition:box-shadow .6s ease-in-out;-moz-transition:box-shadow .6s ease-in-out;-o-transition:box-shadow .6s ease-in-out;transition:box-shadow .6s ease-in-out}.cbp-animation-boxShadow .cbp-item .cbp-animation-boxShadowMask.cbp-animation-boxShadowShow{z-index:10}.cbp-animation-boxShadow .cbp-item .cbp-animation-boxShadowMask.cbp-animation-boxShadowActive{box-shadow:0 0 100px 100px #fff inset}.cbp-animation-boxShadow .cbp-item .cbp-animation-boxShadowMask.cbp-animation-boxShadowInactive{box-shadow:0 0 #fff inset}.cbp-animation-bounceLeft{-webkit-transition:height .8s ease-in-out;-moz-transition:height .8s ease-in-out;-o-transition:height .8s ease-in-out;transition:height .8s ease-in-out}.cbp-animation-bounceLeft .cbp-wrapper{-webkit-transition:opacity .8s ease-in-out,left .8s ease-in-out;-moz-transition:opacity .8s ease-in-out,left .8s ease-in-out;-o-transition:opacity .8s ease-in-out,left .8s ease-in-out;transition:opacity .8s ease-in-out,left .8s ease-in-out}.cbp-animation-bounceLeft .cbp-item{overflow:visible;-webkit-transition:-webkit-transform .8s ease-in-out;-moz-transition:-moz-transform .8s ease-in-out;-o-transition:-o-transform .8s ease-in-out;transition:transform .8s ease-in-out}.cbp-animation-bounceLeft .cbp-item-hidden{display:none}.cbp-animation-bounceLeft .cbp-item-wrapper{overflow:hidden}.cbp-animation-bounceTop{-webkit-transition:height .6s ease-in-out;-moz-transition:height .6s ease-in-out;-o-transition:height .6s ease-in-out;transition:height .6s ease-in-out}.cbp-animation-bounceTop .cbp-wrapper{-webkit-transition:opacity .6s ease-in-out,top .6s ease-in-out;-moz-transition:opacity .6s ease-in-out,top .6s ease-in-out;-o-transition:opacity .6s ease-in-out,top .6s ease-in-out;transition:opacity .6s ease-in-out,top .6s ease-in-out}.cbp-animation-bounceTop .cbp-item{overflow:visible;-webkit-transition:-webkit-transform .8s ease-in-out;-moz-transition:-moz-transform .8s ease-in-out;-o-transition:-o-transform .8s ease-in-out;transition:transform .8s ease-in-out}.cbp-animation-bounceTop .cbp-item-hidden{display:none}.cbp-animation-bounceTop .cbp-item-wrapper{overflow:hidden}.cbp-animation-bounceBottom{-webkit-transition:height .6s ease-in-out;-moz-transition:height .6s ease-in-out;-o-transition:height .6s ease-in-out;transition:height .6s ease-in-out}.cbp-animation-bounceBottom .cbp-wrapper{-webkit-transition:opacity .6s ease-in-out,top .6s ease-in-out;-moz-transition:opacity .6s ease-in-out,top .6s ease-in-out;-o-transition:opacity .6s ease-in-out,top .6s ease-in-out;transition:opacity .6s ease-in-out,top .6s ease-in-out}.cbp-animation-bounceBottom .cbp-item{overflow:visible;-webkit-transition:-webkit-transform .8s ease-in-out;-moz-transition:-moz-transform .8s ease-in-out;-o-transition:-o-transform .8s ease-in-out;transition:transform .8s ease-in-out}.cbp-animation-bounceBottom .cbp-item-hidden{display:none}.cbp-animation-bounceBottom .cbp-item-wrapper{overflow:hidden}.cbp-animation-moveLeft{-webkit-transition:height .6s ease-in-out;-moz-transition:height .6s ease-in-out;-o-transition:height .6s ease-in-out;transition:height .6s ease-in-out}.cbp-animation-moveLeft .cbp-wrapper{z-index:2;-webkit-transition:opacity .6s ease-in-out,left .6s ease-in-out;-moz-transition:opacity .6s ease-in-out,left .6s ease-in-out;-o-transition:opacity .6s ease-in-out,left .6s ease-in-out;transition:opacity .6s ease-in-out,left .6s ease-in-out}.cbp-animation-moveLeft .cbp-wrapper.no-trans{z-index:1;-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.cbp-animation-moveLeft .cbp-item{overflow:visible;-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out}.cbp-animation-moveLeft .cbp-item-wrapper{overflow:hidden}.cbp-animation-slideLeft{overflow:visible}.cbp-animation-slideLeft .cbp-item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out}.cbp-animation-slideLeft-out{-webkit-animation:cbp-animation-slideLeft-out .9s both ease;-moz-animation:cbp-animation-slideLeft-out .9s both ease;animation:cbp-animation-slideLeft-out .9s both ease}.cbp-animation-slideLeft-in{-webkit-animation:cbp-animation-slideLeft-in .9s both ease;-moz-animation:cbp-animation-slideLeft-in .9s both ease;animation:cbp-animation-slideLeft-in .9s both ease}@-webkit-keyframes cbp-animation-slideLeft-out{25%{opacity:.75;-webkit-transform:scale(.8)}100%,75%{opacity:.75;-webkit-transform:scale(.8) translateX(-200%)}}@-moz-keyframes cbp-animation-slideLeft-out{25%{opacity:.75;-moz-transform:scale(.8)}100%,75%{opacity:.75;-moz-transform:scale(.8) translateX(-200%)}}@keyframes cbp-animation-slideLeft-out{25%{opacity:.75;transform:scale(.8)}100%,75%{opacity:.75;transform:scale(.8) translateX(-200%)}}@-webkit-keyframes cbp-animation-slideLeft-in{0%,25%{opacity:.75;-webkit-transform:scale(.8) translateX(200%)}75%{opacity:.75;-webkit-transform:scale(.8)}100%{opacity:1;-webkit-transform:scale(1) translateX(0)}}@-moz-keyframes cbp-animation-slideLeft-in{0%,25%{opacity:.75;-moz-transform:scale(.8) translateX(200%)}75%{opacity:.75;-moz-transform:scale(.8)}100%{opacity:1;-moz-transform:scale(1) translateX(0)}}@keyframes cbp-animation-slideLeft-in{0%,25%{opacity:.75;transform:scale(.8) translateX(200%)}75%{opacity:.75;transform:scale(.8)}100%{opacity:1;transform:scale(1) translateX(0)}}.cbp-animation-slideDelay{overflow:visible}.cbp-animation-slideDelay .cbp-item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out}.cbp-animation-slideDelay-out{-webkit-animation:cbp-animation-slideDelay-out .5s both ease-in-out;-moz-animation:cbp-animation-slideDelay-out .5s both ease-in-out;animation:cbp-animation-slideDelay-out .5s both ease-in-out}.cbp-animation-slideDelay-in{-webkit-animation:cbp-animation-slideDelay-in .5s both ease-in-out;-moz-animation:cbp-animation-slideDelay-in .5s both ease-in-out;animation:cbp-animation-slideDelay-in .5s both ease-in-out}.cbp-animation-slideDelay-fadeOut{-webkit-animation:cbp-animation-slideDelay-fadeOut .4s both ease;-moz-animation:cbp-animation-slideDelay-fadeOut .4s both ease;animation:cbp-animation-slideDelay-fadeOut .4s both ease}@-webkit-keyframes cbp-animation-slideDelay-out{100%{-webkit-transform:translateX(-100%)}}@-moz-keyframes cbp-animation-slideDelay-out{100%{-moz-transform:translateX(-100%)}}@keyframes cbp-animation-slideDelay-out{100%{transform:translateX(-100%)}}@-webkit-keyframes cbp-animation-slideDelay-in{0%{-webkit-transform:translateX(100%)}100%{-webkit-transform:translateX(0)}}@-moz-keyframes cbp-animation-slideDelay-in{0%{-moz-transform:translateX(100%)}100%{-moz-transform:translateX(0)}}@keyframes cbp-animation-slideDelay-in{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@-webkit-keyframes cbp-animation-slideDelay-fadeOut{0%{opacity:1}100%{opacity:0}}@-moz-keyframes cbp-animation-slideDelay-fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes cbp-animation-slideDelay-fadeOut{0%{opacity:1}100%{opacity:0}}.cbp-animation-3dflip{overflow:visible}.cbp-animation-3dflip .cbp-item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-perspective:1000px;perspective:1000px}.cbp-animation-3dflip-out{-webkit-transform-origin:0 50%;transform-origin:0 50%;-webkit-animation:rotateOutLeft .6s forwards;animation:rotateOutLeft .6s forwards}.cbp-animation-3dflip-in{opacity:0;-webkit-transform-origin:100% 50%;transform-origin:100% 50%;-webkit-animation:rotateInRight .6s ease-in forwards;animation:rotateInRight .6s ease-in forwards}.cbp-animation-3dflip-fadeOut{-webkit-animation:cbp-animation-3dflip-fadeOut .4s both ease;-moz-animation:cbp-animation-3dflip-fadeOut .4s both ease;animation:cbp-animation-3dflip-fadeOut .4s both ease}@-webkit-keyframes rotateOutLeft{100%{opacity:0;-webkit-transform:rotateY(90deg)}}@-moz-keyframes rotateOutLeft{100%{opacity:0;-moz1-transform:rotateY(90deg)}}@keyframes rotateOutLeft{100%{opacity:0;transform:rotateY(90deg)}}@-webkit-keyframes rotateInRight{0%{opacity:0;-webkit-transform:rotateY(-90deg)}100%{visibility:visible;opacity:1;-webkit-transform:rotateY(0deg)}}@-moz-keyframes rotateInRight{0%{opacity:0;-moz-transform:rotateY(-90deg)}100%{visibility:visible;opacity:1;-moz-transform:rotateY(0deg)}}@keyframes rotateInRight{0%{opacity:0;transform:rotateY(-90deg)}100%{visibility:visible;opacity:1;transform:rotateY(0deg)}}@-webkit-keyframes cbp-animation-3dflip-fadeOut{0%{opacity:1}100%{opacity:0}}@-moz-keyframes cbp-animation-3dflip-fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes cbp-animation-3dflip-fadeOut{0%{opacity:1}100%{opacity:0}}.cbp-animation-rotateSides{overflow:visible}.cbp-animation-rotateSides .cbp-item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-perspective:1000px;perspective:1000px}.cbp-animation-rotateSides-out{-webkit-transform-origin:-50% 50%;-webkit-animation:rotateSides-out .5s both ease-in;-moz-transform-origin:-50% 50%;-moz-animation:rotateSides-out .5s both ease-in;transform-origin:-50% 50%;animation:rotateSides-out .5s both ease-in}.cbp-animation-rotateSides-in{-webkit-transform-origin:150% 50%;-webkit-animation:rotateSides-in .6s both ease-out;-moz-transform-origin:150% 50%;-moz-animation:rotateSides-in .6s both ease-out;transform-origin:150% 50%;animation:rotateSides-in .6s both ease-out}.cbp-animation-rotateSides-fadeOut{-webkit-animation:cbp-animation-rotateSides-fadeOut .5s both ease;-moz-animation:cbp-animation-rotateSides-fadeOut .5s both ease;animation:cbp-animation-rotateSides-fadeOut .5s both ease}@-webkit-keyframes rotateSides-out{100%{opacity:0;-webkit-transform:translateZ(-500px) rotateY(90deg)}}@-moz-keyframes rotateSides-out{100%{opacity:0;-moz-transform:translateZ(-500px) rotateY(90deg)}}@keyframes rotateSides-out{100%{opacity:0;transform:translateZ(-500px) rotateY(90deg)}}@-webkit-keyframes rotateSides-in{0%,40%{opacity:0;-webkit-transform:translateZ(-500px) rotateY(-90deg)}}@-moz-keyframes rotateSides-in{0%,40%{opacity:0;-moz-transform:translateZ(-500px) rotateY(-90deg)}}@keyframes rotateSides-in{0%,40%{opacity:0;transform:translateZ(-500px) rotateY(-90deg)}}@-webkit-keyframes cbp-animation-rotateSides-fadeOut{0%{opacity:1}100%{opacity:0}}@-moz-keyframes cbp-animation-rotateSides-fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes cbp-animation-rotateSides-fadeOut{0%{opacity:1}100%{opacity:0}}.cbp-animation-flipOutDelay{overflow:visible}.cbp-animation-flipOutDelay .cbp-item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-perspective:1000px;perspective:1000px}.cbp-animation-flipOutDelay-out{-webkit-transform-origin:50% 50%;-webkit-animation:flipOutDelay-out .5s both ease-in;-moz-transform-origin:50% 50%;-moz-animation:flipOutDelay-out .5s both ease-in;transform-origin:50% 50%;animation:flipOutDelay-out .5s both ease-in}.cbp-animation-flipOutDelay-in{-webkit-transform-origin:50% 50%;-webkit-animation:flipOutDelay-in 1s both ease-out;-moz-transform-origin:50% 50%;-moz-animation:flipOutDelay-in 1s both ease-out;transform-origin:50% 50%;animation:flipOutDelay-in 1s both ease-out}@-webkit-keyframes flipOutDelay-out{100%{-webkit-transform:translateZ(-1000px) rotateY(-90deg);opacity:.2}}@-moz-keyframes flipOutDelay-out{100%{-moz-transform:translateZ(-1000px) rotateY(-90deg);opacity:.2}}@keyframes flipOutDelay-out{100%{transform:translateZ(-1000px) rotateY(-90deg);opacity:.2}}@-webkit-keyframes flipOutDelay-in{0%,50%{-webkit-transform:translateZ(-1000px) rotateY(90deg);opacity:.2}}@-moz-keyframes flipOutDelay-in{0%,50%{-moz-transform:translateZ(-1000px) rotateY(90deg);opacity:.2}}@keyframes flipOutDelay-in{0%,50%{transform:translateZ(-1000px) rotateY(90deg);opacity:.2}}.cbp-animation-unfold{overflow:visible}.cbp-animation-unfold .cbp-item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-perspective:1000px;perspective:1000px}.cbp-animation-unfold-out{-webkit-animation:unfold-out .8s ease both;-moz-animation:unfold-out .8s ease both;animation:unfold-out .8s ease both}.cbp-animation-unfold-in{-webkit-transform-origin:0 50%;-webkit-animation:unfold-in .8s both ease;-moz-transform-origin:0 50%;-moz-animation:unfold-in .8s both ease;transform-origin:0 50%;animation:unfold-in .8s both ease}.cbp-animation-unfold-fadeOut{-webkit-animation:cbp-animation-unfold-fadeOut .5s both ease;-moz-animation:cbp-animation-unfold-fadeOut .5s both ease;animation:cbp-animation-unfold-fadeOut .5s both ease}@-webkit-keyframes unfold-out{99%{opacity:.3}100%{opacity:0;-webkit-transform:translateX(-100%)}}@-moz-keyframes unfold-out{99%{opacity:.3}100%{opacity:0;-moz-transform:translateX(-100%)}}@keyframes unfold-out{99%{opacity:.3}100%{opacity:0;transform:translateX(-100%)}}@-webkit-keyframes unfold-in{from{opacity:0;-webkit-transform:translateX(100%) rotateY(90deg)}}@-moz-keyframes unfold-in{from{opacity:0;-moz-transform:translateX(100%) rotateY(90deg)}}@keyframes unfold-in{from{opacity:0;transform:translateX(100%) rotateY(90deg)}}@-webkit-keyframes cbp-animation-unfold-fadeOut{0%{opacity:1}100%{opacity:0}}@-moz-keyframes cbp-animation-unfold-fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes cbp-animation-unfold-fadeOut{0%{opacity:1}100%{opacity:0}}.cbp-animation-foldLeft{overflow:visible}.cbp-animation-foldLeft .cbp-item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-perspective:1000px;perspective:1000px}.cbp-animation-foldLeft-out{-webkit-transform-origin:100% 50%;-webkit-animation:foldLeft-out .7s both ease;-moz-transform-origin:100% 50%;-moz-animation:foldLeft-out .7s both ease;transform-origin:100% 50%;animation:foldLeft-out .7s both ease}.cbp-animation-foldLeft-in{-webkit-animation:foldLeft-in .7s ease both;-moz-animation:foldLeft-in .7s ease both;animation:foldLeft-in .7s ease both}.cbp-animation-foldLeft-fadeOut{-webkit-animation:cbp-animation-foldLeft-fadeOut .5s both ease;-moz-animation:cbp-animation-foldLeft-fadeOut .5s both ease;animation:cbp-animation-foldLeft-fadeOut .5s both ease}@-webkit-keyframes foldLeft-out{to{opacity:0;-webkit-transform:translateX(-100%) rotateY(-90deg)}}@-moz-keyframes foldLeft-out{to{opacity:0;-moz-transform:translateX(-100%) rotateY(-90deg)}}@keyframes foldLeft-out{to{opacity:0;transform:translateX(-100%) rotateY(-90deg)}}@-webkit-keyframes foldLeft-in{from{opacity:.3;-webkit-transform:translateX(100%)}}@-moz-keyframes foldLeft-in{from{opacity:.3;-moz-transform:translateX(100%)}}@keyframes foldLeft-in{from{opacity:.3;transform:translateX(100%)}}@-webkit-keyframes cbp-animation-foldLeft-fadeOut{0%{opacity:1}100%{opacity:0}}@-moz-keyframes cbp-animation-foldLeft-fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes cbp-animation-foldLeft-fadeOut{0%{opacity:1}100%{opacity:0}}.cbp-animation-scaleDown{overflow:visible}.cbp-animation-scaleDown .cbp-item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-perspective:1000px;perspective:1000px}.cbp-animation-scaleDown-out{-webkit-animation:scaleDown-out .7s ease both;-moz-animation:scaleDown-out .7s ease both;animation:scaleDown-out .7s ease both}.cbp-animation-scaleDown-in{-webkit-animation:scaleDown-in .6s ease both;-moz-animation:scaleDown-in .6s ease both;animation:scaleDown-in .6s ease both}.cbp-animation-scaleDown-fadeOut{-webkit-animation:cbp-animation-scaleDown-fadeOut .5s both ease;-moz-animation:cbp-animation-scaleDown-fadeOut .5s both ease;animation:cbp-animation-scaleDown-fadeOut .5s both ease}@-webkit-keyframes scaleDown-out{to{opacity:0;-webkit-transform:scale(.8)}}@-moz-keyframes scaleDown-out{to{opacity:0;-moz-transform:scale(.8)}}@keyframes scaleDown-out{to{opacity:0;transform:scale(.8)}}@-webkit-keyframes scaleDown-in{from{-webkit-transform:translateX(100%)}}@-moz-keyframes scaleDown-in{from{-moz-transform:translateX(100%)}}@keyframes scaleDown-in{from{transform:translateX(100%)}}@-webkit-keyframes cbp-animation-scaleDown-fadeOut{0%{opacity:1}100%{opacity:0}}@-moz-keyframes cbp-animation-scaleDown-fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes cbp-animation-scaleDown-fadeOut{0%{opacity:1}100%{opacity:0}}.cbp-animation-frontRow{overflow:visible}.cbp-animation-frontRow .cbp-item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-perspective:1000px;perspective:1000px}.cbp-animation-frontRow-out{-webkit-animation:frontRow-out .7s ease both;-moz-animation:frontRow-out .7s ease both;animation:frontRow-out .7s ease both}.cbp-animation-frontRow-in{-webkit-animation:frontRow-in .6s ease both;-moz-animation:frontRow-in .6s ease both;animation:frontRow-in .6s ease both}.cbp-animation-frontRow-fadeOut{-webkit-animation:cbp-animation-frontRow-fadeOut .5s both ease;-moz-animation:cbp-animation-frontRow-fadeOut .5s both ease;animation:cbp-animation-frontRow-fadeOut .5s both ease}@-webkit-keyframes frontRow-out{100%{-webkit-transform:translateX(-60%) scale(.8);opacity:0}}@-moz-keyframes frontRow-out{100%{-moz-transform:translateX(-60%) scale(.8);opacity:0}}@keyframes frontRow-out{100%{transform:translateX(-60%) scale(.8);opacity:0}}@-webkit-keyframes frontRow-in{0%{-webkit-transform:translateX(100%) scale(.8)}100%{visibility:visible;opacity:1;-webkit-transform:translateX(0%) scale(1)}}@-moz-keyframes frontRow-in{0%{-moz-transform:translateX(100%) scale(.8)}100%{visibility:visible;opacity:1;-moz-transform:translateX(0%) scale(1)}}@keyframes frontRow-in{0%{transform:translateX(100%) scale(.8)}100%{visibility:visible;opacity:1;transform:translateX(0%) scale(1)}}@-webkit-keyframes cbp-animation-frontRow-fadeOut{0%{opacity:1}100%{opacity:0}}@-moz-keyframes cbp-animation-frontRow-fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes cbp-animation-frontRow-fadeOut{0%{opacity:1}100%{opacity:0}}.cbp-animation-rotateRoom{overflow:visible}.cbp-animation-rotateRoom .cbp-item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-perspective:1000px;perspective:1000px}.cbp-animation-rotateRoom-out{-webkit-transform-origin:100% 50%;-webkit-animation:rotateRoom-out .8s both ease;-moz-transform-origin:100% 50%;-moz-animation:rotateRoom-out .8s both ease;transform-origin:100% 50%;animation:rotateRoom-out .8s both ease}.cbp-animation-rotateRoom-in{-webkit-transform-origin:0 50%;-webkit-animation:rotateRoom-in .8s both ease;-moz-transform-origin:0 50%;-moz-animation:rotateRoom-in .8s both ease;transform-origin:0 50%;animation:rotateRoom-in .8s both ease}.cbp-animation-rotateRoom-fadeOut{-webkit-animation:cbp-animation-rotateRoom-fadeOut .5s both ease;-moz-animation:cbp-animation-rotateRoom-fadeOut .5s both ease;animation:cbp-animation-rotateRoom-fadeOut .5s both ease}@-webkit-keyframes rotateRoom-out{99%{opacity:.3}100%{opacity:0;-webkit-transform:translateX(-100%) rotateY(90deg)}}@-moz-keyframes rotateRoom-out{99%{opacity:.3}100%{opacity:0;-moz-transform:translateX(-100%) rotateY(90deg)}}@keyframes rotateRoom-out{99%{opacity:.3}100%{opacity:0;transform:translateX(-100%) rotateY(90deg)}}@-webkit-keyframes rotateRoom-in{from{opacity:.3;-webkit-transform:translateX(100%) rotateY(-90deg)}}@-moz-keyframes rotateRoom-in{from{opacity:.3;-moz-transform:translateX(100%) rotateY(-90deg)}}@keyframes rotateRoom-in{from{opacity:.3;transform:translateX(100%) rotateY(-90deg)}}@-webkit-keyframes cbp-animation-rotateRoom-fadeOut{0%{opacity:1}100%{opacity:0}}@-moz-keyframes cbp-animation-rotateRoom-fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes cbp-animation-rotateRoom-fadeOut{0%{opacity:1}100%{opacity:0}}.cbp-animation-scaleSides{overflow:visible}.cbp-animation-scaleSides .cbp-item{-webkit-transition:-webkit-transform .5s ease-in-out;-moz-transition:-moz-transform .5s ease-in-out;-o-transition:-o-transform .5s ease-in-out;transition:transform .5s ease-in-out;-webkit-perspective:1000px;perspective:1000px}.cbp-animation-scaleSides-out{-webkit-animation:scaleSides-out .5s ease both;-moz-animation:scaleSides-out .5s ease both;animation:scaleSides-out .5s ease both}.cbp-animation-scaleSides-in{-webkit-animation:scaleUpCenter .5s ease .5s both;-moz-animation:scaleUpCenter .5s ease .5s both;animation:scaleUpCenter .5s ease .5s both}@-webkit-keyframes scaleSides-out{to{opacity:0;-webkit-transform:scale(.6)}}@-moz-keyframes scaleSides-out{to{opacity:0;-moz-transform:scale(.6)}}@keyframes scaleSides-out{to{opacity:0;transform:scale(.6)}}@-webkit-keyframes scaleUpCenter{from{opacity:0;-webkit-transform:scale(.6)}}@-moz-keyframes scaleUpCenter{from{opacity:0;-moz-transform:scale(.6)}}@keyframes scaleUpCenter{from{opacity:0;transform:scale(.6)}}.cbp-animation-flipOut{-webkit-transition:height .7s ease-in-out;-moz-transition:height .7s ease-in-out;-o-transition:height .7s ease-in-out;transition:height .7s ease-in-out}.cbp-animation-flipOut .cbp-item{-webkit-transition:-webkit-transform .7s ease-in-out;-moz-transition:-moz-transform .7s ease-in-out;-o-transition:-o-transform .7s ease-in-out;transition:transform .7s ease-in-out;-webkit-perspective:1000px;perspective:1000px}.cbp-animation-flipOut-out{-webkit-transform-origin:50% 50%;-webkit-animation:flipOut-out .35s ease-in both;-moz-transform-origin:50% 50%;-moz-animation:flipOut-out .35s ease-in both;transform-origin:50% 50%;animation:flipOut-out .35s ease-in both}.cbp-animation-flipOut-in{-webkit-transform-origin:50% 50%;-webkit-animation:flipOut-in .35s ease-out .35s both;-moz-transform-origin:50% 50%;-moz-animation:flipOut-in .35s ease-out .35s both;transform-origin:50% 50%;animation:flipOut-in .35s ease-out .35s both}@-webkit-keyframes flipOut-out{100%{-webkit-transform:translateZ(-1000px) rotateY(-90deg);opacity:.2}}@-moz-keyframes flipOut-out{100%{-moz-transform:translateZ(-1000px) rotateY(-90deg);opacity:.2}}@keyframes flipOut-out{100%{transform:translateZ(-1000px) rotateY(-90deg);opacity:.2}}@-webkit-keyframes flipOut-in{0%{-webkit-transform:translateZ(-1000px) rotateY(90deg);opacity:.2}}@-moz-keyframes flipOut-in{0%{-moz-transform:translateZ(-1000px) rotateY(90deg);opacity:.2}}@keyframes flipOut-in{0%{transform:translateZ(-1000px) rotateY(90deg);opacity:.2}}.cbp-animation-flipBottom{-webkit-transition:height .7s ease-in-out;-moz-transition:height .7s ease-in-out;-o-transition:height .7s ease-in-out;transition:height .7s ease-in-out}.cbp-animation-flipBottom .cbp-item{-webkit-transition:-webkit-transform .7s ease-in-out;-moz-transition:-moz-transform .7s ease-in-out;-o-transition:-o-transform .7s ease-in-out;transition:transform .7s ease-in-out;-webkit-perspective:1000px;perspective:1000px}.cbp-animation-flipBottom-out{-webkit-transform-origin:50% 50%;-webkit-animation:flipBottom-out .35s both 0s ease-in;-moz-transform-origin:50% 50%;-moz-animation:flipBottom-out .35s both 0s ease-in;transform-origin:50% 50%;animation:flipBottom-out .35s both 0s ease-in}.cbp-animation-flipBottom-in{-webkit-transform-origin:50% 50%;-webkit-animation:flipBottom-in .35s ease-out .35s both;-moz-transform-origin:50% 50%;-moz-animation:flipBottom-in .35s ease-out .35s both;transform-origin:50% 50%;animation:flipBottom-in .35s ease-out .35s both}@-webkit-keyframes flipBottom-out{to{-webkit-transform:translateZ(-1000px) rotateX(-90deg);opacity:.2}}@-moz-keyframes flipBottom-out{to{-moz-transform:translateZ(-1000px) rotateX(-90deg);opacity:.2}}@keyframes flipBottom-out{to{transform:translateZ(-1000px) rotateX(-90deg);opacity:.2}}@-webkit-keyframes flipBottom-in{from{-webkit-transform:translateZ(-1000px) rotateX(90deg);opacity:.2}}@-moz-keyframes flipBottom-in{from{-moz-transform:translateZ(-1000px) rotateX(90deg);opacity:.2}}@keyframes flipBottom-in{from{transform:translateZ(-1000px) rotateX(90deg);opacity:.2}}.cbp-animation-fadeOutTop{overflow:visible;-webkit-transition:height .2s ease-in-out;-moz-transition:height .2s ease-in-out;-o-transition:height .2s ease-in-out;transition:height .2s ease-in-out}.cbp-animation-fadeOutTop .cbp-wrapper{-webkit-transition:opacity .3s ease-in-out,top .3s ease-in-out;-moz-transition:opacity .3s ease-in-out,top .3s ease-in-out;-o-transition:opacity .3s ease-in-out,top .3s ease-in-out;transition:opacity .3s ease-in-out,top .3s ease-in-out}.cbp-animation-fadeOutTop .cbp-item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out}.cbp-animation-sequentially{overflow:visible;-webkit-transition:height .2s ease-in-out;-moz-transition:height .2s ease-in-out;-o-transition:height .2s ease-in-out;transition:height .2s ease-in-out}.cbp-animation-sequentially .cbp-item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out}.cbp-animation-sequentially.cbp-no-transition .cbp-item{-webkit-transition:opacity .5s ease,top .5s ease!important;-moz-transition:opacity .5s ease,top .5s ease!important;-o-transition:opacity .5s ease,top .5s ease!important;transition:opacity .5s ease,top .5s ease!important}.cbp-popup-ie8bg{position:absolute;width:100%;height:100%;min-height:100%;top:0;left:0;z-index:-1;background:#000;-ms-filter:"alpha(Opacity=70)"}.cbp-popup-wrap{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:100%;text-align:center;position:fixed;width:100%;left:0;top:0;display:none;overflow:auto;z-index:9999;padding:0 10px}.cbp-popup-lightbox{background:rgba(0,0,0,.8)}.cbp-popup-singlePage{background:#fff;padding:0}.cbp-popup-singlePage .cbp-popup-ie8bg{background:#fff;-ms-filter:"alpha(Opacity=100)"}.cbp-popup-wrap:before{content:'';display:inline-block;height:100%;vertical-align:middle;margin-right:-.25em}.cbp-popup-content{position:relative;display:inline-block;vertical-align:middle;text-align:left;max-width:100%}.cbp-popup-singlePage .cbp-popup-content{margin-top:140px;max-width:1024px;vertical-align:top;width:96%}.cbp-popup-lightbox-figure{position:relative}.cbp-popup-lightbox-bottom{left:0;position:absolute;top:100%;width:100%;margin-top:3px}.cbp-popup-lightbox-title{padding-right:70px;font:400 12px/18px sans-serif;color:#eee}.cbp-popup-lightbox-counter{position:absolute;top:0;right:0;font:400 12px/18px sans-serif;color:#eee}.cbp-popup-lightbox-img{width:auto;max-width:100%;height:auto;display:block;margin:40px 0;box-shadow:0 0 8px rgba(0,0,0,.6)}.cbp-popup-lightbox-img[data-action]{cursor:pointer}.cbp-popup-lightbox-isIframe .cbp-popup-content{width:50%}.cbp-popup-lightbox-isIframe .cbp-lightbox-bottom{left:0;position:absolute;top:100%;width:100%;margin-top:3px}.cbp-popup-lightbox-iframe{position:relative;height:0;padding-bottom:56.25%;background:#000}.cbp-popup-lightbox-iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%;box-shadow:0 0 8px rgba(0,0,0,.6)}.cbp-popup-singlePage{overflow-x:hidden}.cbp-popup-singlePage .cbp-popup-navigation-wrap{position:absolute;top:0;left:0;width:100%;z-index:2;height:104px;background-color:#34425C}.cbp-popup-singlePage .cbp-popup-navigation{position:absolute;top:0;left:0;width:100%}.cbp-popup-singlePage-sticky .cbp-popup-navigation,.cbp-popup-singlePage-sticky .cbp-popup-navigation-wrap{position:fixed}.cbp-popup-singlePage-counter{color:#bbc0df;font:italic 14px/104px 'Open Sans',sans-serif;position:absolute;right:50px;top:0}.cbp-popup-close,.cbp-popup-next,.cbp-popup-prev{padding:0;border:medium none;position:absolute;cursor:pointer}.cbp-popup-lightbox .cbp-popup-close,.cbp-popup-lightbox .cbp-popup-next,.cbp-popup-lightbox .cbp-popup-prev{visibility:hidden}.cbp-popup-ready.cbp-popup-lightbox .cbp-popup-close,.cbp-popup-ready.cbp-popup-lightbox .cbp-popup-next,.cbp-popup-ready.cbp-popup-lightbox .cbp-popup-prev{visibility:visible}.cbp-popup-lightbox .cbp-popup-prev{background:url(../images/cbp-sprite.png) no-repeat scroll -2px -2px transparent;width:44px;height:44px;top:0;bottom:0;left:20px;margin:auto}.cbp-popup-lightbox .cbp-popup-prev:hover{background-position:-2px -48px}.cbp-popup-singlePage .cbp-popup-prev{background:url(../images/cbp-sprite.png) no-repeat scroll -2px -94px transparent;width:44px;height:44px;top:30px;left:0;margin:auto;right:108px}.cbp-popup-singlePage .cbp-popup-prev:hover{background-position:-2px -140px}.cbp-popup-lightbox .cbp-popup-next{background:url(../images/cbp-sprite.png) no-repeat scroll -48px -2px transparent;width:44px;height:44px;top:0;bottom:0;right:20px;margin:auto}.cbp-popup-lightbox .cbp-popup-next:hover{background-position:-48px -48px}.cbp-popup-singlePage .cbp-popup-next{background:url(../images/cbp-sprite.png) no-repeat scroll -48px -94px transparent;width:44px;height:44px;top:30px;right:0;margin:auto;left:108px}.cbp-popup-singlePage .cbp-popup-next:hover{background-position:-48px -140px}.cbp-popup-lightbox .cbp-popup-close{background:url(../images/cbp-sprite.png) no-repeat scroll -94px -2px transparent;height:40px;width:40px;right:20px;top:20px}.cbp-popup-lightbox .cbp-popup-close:hover{background-position:-94px -48px}.cbp-popup-singlePage .cbp-popup-close{background:url(../images/cbp-sprite.png) no-repeat scroll -94px -94px transparent;height:44px;width:44px;margin:auto;right:0;top:30px;left:0}.cbp-popup-singlePage .cbp-popup-close:hover{background-position:-94px -140px}.cbp-popup-loadingBox{position:absolute;top:0;left:0;right:0;bottom:0;margin:auto;z-index:2;background:url(../images/cbp-loading-popup.gif) no-repeat scroll center center #0D0D0D;border:1px solid rgba(79,80,79,.3);border-radius:3px;-ms-filter:"alpha(Opacity=71)";opacity:.71;width:50px;height:50px}.cbp-popup-ready .cbp-popup-loadingBox{visibility:hidden}.cbp-popup-loading .cbp-popup-loadingBox{visibility:visible}.cbp-popup-singlePage{left:100%;-webkit-transition:left .6s ease-in-out;-moz-transition:left .6s ease-in-out;-o-transition:left .6s ease-in-out;transition:left .6s ease-in-out}.cbp-popup-singlePage-open{left:0}.cbp-popup-singlePage .cbp-l-project-title{color:#454444;font:700 42px/60px 'Open sans',sans-serif;letter-spacing:2px;margin-bottom:10px;text-align:center;text-transform:uppercase}.cbp-popup-singlePage .cbp-l-project-subtitle{color:#787878;font:300 14px/21px 'Open sans',sans-serif;margin:0 auto 50px;max-width:500px;text-align:center}.cbp-popup-singlePage .cbp-popup-content .cbp-l-project-img{display:block;margin:0 auto;max-width:100%}.cbp-popup-singlePage .cbp-l-project-container{overflow:hidden;margin:0 auto}.cbp-popup-singlePage .cbp-l-project-desc{float:left;width:64%;margin:30px 0 100px}.cbp-popup-singlePage .cbp-l-project-details{float:right;width:36%;margin:30px 0 100px}.cbp-popup-singlePage .cbp-l-project-desc-title{margin-right:20px;border-bottom:1px solid #cdcdcd;margin-bottom:22px;color:#444}.cbp-popup-singlePage .cbp-l-project-desc-title span,.cbp-popup-singlePage .cbp-l-project-details-title span{border-bottom:1px solid #747474;display:inline-block;margin:0 0 -1px 0;font:400 16px/36px "Open Sans",sans-serif;padding:0 5px 0 0}.cbp-popup-singlePage .cbp-l-project-desc-text{margin-right:20px;font:400 13px/20px "Open Sans",sans-serif;color:#555}.cbp-popup-singlePage .cbp-l-project-details-title{border-bottom:1px solid #cdcdcd;margin-bottom:19px;margin-left:20px;color:#444}.cbp-popup-singlePage .cbp-l-project-details-list{margin-left:20px}.cbp-popup-singlePage .cbp-l-project-details-list li{border-bottom:1px dotted #DFDFDF;padding:inherit;color:#666;font:400 12px/30px "Open Sans",sans-serif}.cbp-popup-singlePage .cbp-l-project-details-list strong{display:inline-block;color:#696969;font:600 12px "Open Sans",sans-serif;min-width:100px}.cbp-popup-singlePage .cbp-l-project-details-visit{color:#FFF;float:right;text-decoration:none;font:400 11px/18px "Open Sans",sans-serif;margin-top:12px;text-transform:uppercase;background-color:#34425C;padding:6px 12px}.cbp-popup-singlePage .cbp-l-project-details-visit:hover{color:#AFBBDB}.cbp-popup-singlePage .cbp-l-member-img{float:left;margin-right:20px;margin-top:20px;border:1px solid #e2e2e2}.cbp-popup-singlePage .cbp-l-member-img img{display:block}.cbp-popup-singlePage .cbp-l-member-info{margin-top:20px}.cbp-popup-singlePage .cbp-l-member-name{font:700 16px/12px "Open Sans",sans-serif;margin-bottom:6px}.cbp-popup-singlePage .cbp-l-member-position{font:400 13px "Open Sans",sans-serif}.cbp-popup-singlePage .cbp-l-member-desc{font:400 12px "Open Sans",sans-serif;margin-top:15px}.cbp-popup-singlePageInline{width:100%;height:0;position:absolute;top:0;left:0;overflow:hidden}.cbp-popup-singlePageInline .cbp-popup-navigation{position:absolute;top:0;right:0;z-index:2;width:40px;height:40px}.cbp-popup-singlePageInline .cbp-popup-close{background:url(../images/cbp-sprite.png) no-repeat scroll -94px -2px transparent;height:40px;width:40px;right:20px;top:30px}.cbp-popup-singlePageInline .cbp-popup-close:hover{opacity:.7}.cbp-popup-singlePageInline .cbp-popup-content{width:100%;min-height:200px}.cbp.cbp-popup-isOpening,.cbp.cbp-popup-isOpening .cbp-popup-singlePageInline{-webkit-transition:height .4s ease 0s!important;-moz-transition:height .4s ease 0s!important;-o-transition:height .4s ease 0s!important;transition:height .4s ease 0s!important}.cbp.cbp-popup-isOpening .cbp-item{-webkit-transition:-webkit-transform .4s ease 0s!important;-moz-transition:-moz-transform .4s ease 0s!important;-o-transition:-o-transform .4s ease 0s!important;transition:transform .4s ease 0s!important}.cbp-singlePageInline-active{opacity:.6!important}.cbp-popup-singlePageInline .cbp-popup-loadingBox{visibility:hidden;background:url(../images/cbp-loading.gif) no-repeat scroll center center transparent;border:medium none;border-radius:0;-ms-filter:"alpha(Opacity=100)";opacity:1}.cbp-popup-singlePageInline.cbp-popup-loading .cbp-popup-loadingBox{visibility:visible}.cbp-popup-singlePageInline.cbp-popup-loading .cbp-popup-content,.cbp-popup-singlePageInline.cbp-popup-loading .cbp-popup-navigation{visibility:hidden}.cbp-l-inline{margin-bottom:20px;overflow:hidden;margin-top:10px;background:#FAFAFA;padding:30px}.cbp-l-inline-left{float:left;width:44%}.cbp-l-project-img{max-width:100%}.cbp-l-inline-right{float:right;width:56%;padding-left:inherit}.cbp-l-inline-title{font:400 28px/28px "Open Sans",sans-serif;color:#666}.cbp-l-inline-subtitle{font:400 13px "Open Sans",sans-serif;color:#666;margin:3px 0 25px}.cbp-l-inline-desc{font:400 13px/21px "Open Sans",sans-serif;color:#888}.cbp-l-inline-view{font:400 13px "Open Sans",sans-serif;color:#9C9C9C;text-decoration:none;margin:22px 0 0;display:inline-block;padding:8px 18px 7px;border:2px solid #ccc}.cbp-l-inline-view:hover{color:#757575;border-color:#DFDFDF}.cbp-l-filters-button{margin:0 auto 30px;text-align:left}.cbp-l-filters-button .cbp-filter-item{background-color:#FFF;border:2px solid #ECECEC;border-radius:2px;color:#888;cursor:pointer;font:400 12px/29px "Open Sans",sans-serif;margin:10px 10px 0 0;overflow:visible;padding:0 17px;position:relative;-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.cbp-l-filters-button .cbp-filter-item:hover{color:#5d5d5d}.cbp-l-filters-button .cbp-filter-item-active{background-color:#5d5d5d;color:#fff!important;border-color:#5d5d5d}.cbp-l-filters-button .cbp-filter-counter{background-color:#3288C4;border-radius:3px;color:#fff;font:400 11px/18px "Open Sans",sans-serif;margin:0 auto;padding:4px 0;text-align:center;width:34px;position:absolute;bottom:0;left:0;right:0;-ms-filter:"alpha(Opacity=0)";opacity:0;-webkit-transition:opacity .25s ease,bottom .25s ease;-moz-transition:opacity .25s ease,bottom .25s ease;-o-transition:opacity .25s ease,bottom .25s ease;transition:opacity .25s ease,bottom .25s ease}.cbp-l-filters-button .cbp-filter-counter:before{content:"";position:absolute;bottom:-4px;left:0;right:0;margin:0 auto;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #3288C4;visibility:hidden}.cbp-l-filters-button .cbp-filter-item:hover .cbp-filter-counter:before{visibility:visible}.cbp-l-filters-button .cbp-filter-item:hover .cbp-filter-counter{bottom:44px;-ms-filter:"alpha(Opacity=100)";opacity:1}.cbp-l-filters-dropdown{margin:0 auto;height:70px;position:relative;z-index:10}.cbp-l-filters-dropdownWrap{width:200px;position:absolute;right:0;background:#3288C4}.cbp-l-filters-dropdownHeader{font:12px/38px "Open Sans",sans-serif;padding:0 17px;color:#FFF;cursor:pointer;position:relative}.cbp-l-filters-dropdownHeader:after{border-color:#FFF rgba(0,0,0,0);border-style:solid;border-width:5px 5px 0;content:"";height:0;position:absolute;right:16px;top:50%;width:0;margin-top:-1px}.cbp-l-filters-dropdownWrap:hover .cbp-l-filters-dropdownHeader:after{border-width:0 5px 5px}.cbp-l-filters-dropdownList{display:none;list-style:none outside none;margin:0;padding:0}.cbp-l-filters-dropdownWrap:hover .cbp-l-filters-dropdownList{display:block}.cbp-l-filters-dropdownList .cbp-filter-item{background:0 0;color:#9FBCE7;width:100%;text-align:left;font:12px/40px "Open Sans",sans-serif;margin:0;padding:0 17px;cursor:pointer;border:0;border-top:1px solid #5592C2}.cbp-l-filters-dropdownList .cbp-filter-item-active,.cbp-l-filters-dropdownList .cbp-filter-item:hover{color:#e6e6e6}.cbp-l-filters-alignLeft{margin:0 auto 40px;text-align:left}.cbp-l-filters-alignLeft .cbp-filter-item{background-color:#fff;border:1px solid #cdcdcd;cursor:pointer;font:400 12px/30px "Open Sans",sans-serif;padding:0 13px;position:relative;overflow:visible;margin:10px 8px 0 0;-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out;color:#888}.cbp-l-filters-alignLeft .cbp-filter-item:hover{color:#3c3c3c}.cbp-l-filters-alignLeft .cbp-filter-item-active{background-color:#3288C4;color:#fff!important;opacity:1;border:1px solid #3288C4}.cbp-l-filters-alignLeft .cbp-filter-counter{display:inline}.cbp-l-filters-alignCenter{margin:0 auto 50px;text-align:center;font-size:12px;color:#cacaca}.cbp-l-filters-alignCenter .cbp-filter-item{color:#5A5A5A;cursor:pointer;font:400 13px "Open Sans",sans-serif;padding:0 12px;transition:all .3s ease-in-out;position:relative;overflow:visible;margin:10px 0 0;border:medium none;background-color:transparent}.cbp-l-filters-alignCenter .cbp-filter-item:hover{color:#3288C4}.cbp-l-filters-alignCenter .cbp-filter-item-active{color:#3288C4!important}.cbp-l-filters-alignCenter .cbp-filter-counter{background:none repeat scroll 0 0 #3288C4;border-radius:3px;color:#FFF;font-size:11px;margin:0 auto;padding:4px 0;text-align:center;width:34px;position:absolute;bottom:0;left:0;right:0;-ms-filter:"alpha(Opacity=0)";opacity:0;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;-o-transition:all .25s ease;transition:all .25s ease}.cbp-l-filters-alignCenter .cbp-filter-counter:before{content:"";position:absolute;bottom:-4px;left:0;right:0;margin:0 auto;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #3288C4;visibility:hidden}.cbp-l-filters-alignCenter button:hover .cbp-filter-counter:before{visibility:visible}.cbp-l-filters-alignCenter button:hover .cbp-filter-counter{bottom:30px;-ms-filter:"alpha(Opacity=100)";opacity:1}.cbp-l-filters-alignRight{margin:0 auto 40px;text-align:right}.cbp-l-filters-alignRight .cbp-filter-item{background-color:transparent;color:#8B8B8B;cursor:pointer;font:400 11px "Open Sans",sans-serif;padding:7px 12px;position:relative;overflow:visible;margin:10px 0 0 5px;border:1px solid #E4E2E2;text-transform:uppercase;-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.cbp-l-filters-alignRight .cbp-filter-item:hover{color:#2B3444}.cbp-l-filters-alignRight .cbp-filter-item-active{opacity:1;color:#FFF!important;background-color:#3C3C3C;border-color:#3C3C3C}.cbp-l-filters-alignRight .cbp-filter-counter{background:none repeat scroll 0 0 #3288C4;border-radius:3px;color:#fff;font-size:11px;margin:0 auto;padding:4px 0;text-align:center;width:34px;position:absolute;bottom:0;left:0;right:0;-ms-filter:"alpha(Opacity=0)";opacity:0;-webkit-transition:opacity .25s ease,bottom .25s ease;-moz-transition:opacity .25s ease,bottom .25s ease;-o-transition:opacity .25s ease,bottom .25s ease;transition:opacity .25s ease,bottom .25s ease}.cbp-l-filters-alignRight .cbp-filter-counter:before{content:"";position:absolute;bottom:-4px;left:0;right:0;margin:0 auto;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #3288C4;visibility:hidden}.cbp-l-filters-alignRight .cbp-filter-item:hover .cbp-filter-counter:before{visibility:visible}.cbp-l-filters-alignRight .cbp-filter-item:hover .cbp-filter-counter{bottom:44px;-ms-filter:"alpha(Opacity=100)";opacity:1}.cbp-l-filters-list{margin:0 auto 40px;height:46px}.cbp-l-filters-list .cbp-filter-item{background-color:transparent;color:#585252;cursor:pointer;font:400 12px/35px "Open Sans",sans-serif;padding:0 18px;position:relative;overflow:visible;margin:10px 0 0;float:left;border-width:1px 0 1px 1px;border-style:solid;border-color:#3288C4;-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.cbp-l-filters-list .cbp-filter-item:hover{color:#000}.cbp-l-filters-list .cbp-filter-item-active{opacity:1;color:#FFF!important;background-color:#3288C4}.cbp-l-filters-list-first{border-radius:6px 0 0 6px}.cbp-l-filters-list-last{border-radius:0 6px 6px 0;border-right-width:1px!important}.cbp-l-filters-list .cbp-filter-counter{display:inline}.cbp-l-grid-projects{visibility:hidden}.cbp-l-grid-projects .cbp-item{width:270px;height:250px}.cbp-l-grid-projects .cbp-caption{height:68%;margin-bottom:20px}.cbp-l-grid-projects-title{font:700 14px sans-serif;color:#474747}.cbp-l-grid-projects-desc{font:400 12px sans-serif;margin-top:6px;color:#888}.cbp-l-grid-projects-inlineFilters{cursor:pointer}.cbp-l-grid-projects-inlineFilters:hover{text-decoration:underline}.cbp-l-grid-projects.cbp-caption-overlayBottomPush .cbp-caption-activeWrap{bottom:-50px;height:50px}.cbp-l-grid-projects.cbp-caption-overlayBottomPush .cbp-caption:hover .cbp-caption-defaultWrap{bottom:50px}.cbp-l-grid-projects.cbp-caption-overlayBottomPush.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap,.cbp-l-grid-projects.cbp-caption-overlayBottomPush.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap{bottom:-50px}.cbp-l-grid-projects.cbp-caption-overlayBottomAlong .cbp-caption-activeWrap{bottom:-50px;height:50px}.cbp-l-grid-projects.cbp-caption-overlayBottomAlong .cbp-caption:hover .cbp-caption-defaultWrap{bottom:25px}.cbp-l-grid-projects.cbp-caption-overlayBottomAlong.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap,.cbp-l-grid-projects.cbp-caption-overlayBottomAlong.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap{bottom:-50px}.cbp-l-grid-projects.cbp-caption-overlayBottom .cbp-caption-activeWrap{bottom:-50px;height:50px}.cbp-l-grid-projects.cbp-caption-overlayBottom.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap{bottom:-50px}.cbp-l-grid-projects.cbp-caption-overlayBottomReveal .cbp-caption-activeWrap{height:50px}.cbp-l-grid-projects.cbp-caption-overlayBottomReveal .cbp-caption:hover .cbp-caption-defaultWrap{bottom:50px}.cbp-l-grid-gallery{visibility:hidden}.cbp-l-grid-gallery .cbp-item{width:320px;height:236px}.cbp-l-grid-team{visibility:hidden}.cbp-l-grid-team .cbp-item{width:290px;height:270px}.cbp-l-grid-team .cbp-caption{height:73%;margin-bottom:20px;border:1px solid #E7E7E7}.cbp-l-grid-team-name{font:400 17px "Open Sans",sans-serif;color:#456297;text-decoration:none;display:block;text-align:center;margin-bottom:3px}.cbp-l-grid-team-name:hover{color:#34425C}.cbp-l-grid-team-position{font:italic 400 13px "Open Sans",sans-serif;color:#888;text-align:center}@media only screen and (max-width:799px){.cbp-l-grid-team-desc{font:400 11px/14px "Open Sans",sans-serif;margin-top:5px}}.cbp-l-grid-team.cbp-caption-overlayBottomPush .cbp-caption-activeWrap{bottom:-44px;height:44px}.cbp-l-grid-team.cbp-caption-overlayBottomPush .cbp-caption:hover .cbp-caption-defaultWrap{bottom:44px}.cbp-l-grid-team.cbp-caption-overlayBottomPush.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap,.cbp-l-grid-team.cbp-caption-overlayBottomPush.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap{bottom:-44px}.cbp-l-grid-team.cbp-caption-overlayBottomAlong .cbp-caption-activeWrap{bottom:-44px;height:44px}.cbp-l-grid-team.cbp-caption-overlayBottomAlong .cbp-caption:hover .cbp-caption-defaultWrap{bottom:22px}.cbp-l-grid-team.cbp-caption-overlayBottomAlong.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap,.cbp-l-grid-team.cbp-caption-overlayBottomAlong.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap{bottom:-44px}.cbp-l-grid-team.cbp-caption-overlayBottom .cbp-caption-activeWrap{bottom:-44px;height:44px}.cbp-l-grid-team.cbp-caption-overlayBottom.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap{bottom:-44px}.cbp-l-grid-team.cbp-caption-overlayBottomReveal .cbp-caption-activeWrap{height:44px}.cbp-l-grid-team.cbp-caption-overlayBottomReveal .cbp-caption:hover .cbp-caption-defaultWrap{bottom:44px}.cbp-l-grid-fullScreen{visibility:hidden}.cbp-l-grid-fullScreen .cbp-item{width:350px;height:263px}.cbp-l-grid-masonry{visibility:hidden}.cbp-l-grid-masonry .cbp-item{width:277px}.cbp-l-grid-masonry .cbp-l-grid-masonry-height1{height:267px}.cbp-l-grid-masonry .cbp-l-grid-masonry-height2{height:415px}.cbp-l-grid-blog{visibility:hidden}.cbp-l-grid-blog .cbp-item{width:313px;height:330px}.cbp-l-grid-blog .cbp-caption{height:58%;margin-bottom:20px}.cbp-l-grid-blog-title{font:400 18px/28px "Open Sans",sans-serif;color:#444;display:block;clear:both;text-decoration:none}.cbp-l-grid-blog-title:hover{color:#787878}.cbp-l-grid-blog-date{font:400 12px/18px "Open Sans",sans-serif;float:left;color:#787878}.cbp-l-grid-blog-comments{font:400 12px/18px "Open Sans",sans-serif;float:left;color:#3C6FBB;text-decoration:none}.cbp-l-grid-blog-comments:hover{opacity:.8}.cbp-l-grid-blog-desc{font:400 13px/19px "Open Sans",sans-serif;clear:both;color:#9B9B9B;padding-top:15px}.cbp-l-grid-blog-split{float:left;margin:0 8px;font:13px/16px "Open Sans",sans-serif;color:#787878}.cbp-l-loadMore-button{text-align:center;margin-top:30px}.cbp-l-loadMore-button-link{border:2px solid #DEDEDE;border-radius:2px;color:#7E7B7B;display:inline-block;font:11px/34px "Open Sans",sans-serif;min-width:120px;text-decoration:none}.cbp-l-loadMore-button-link:hover{color:#B0B0B0}.cbp-l-loadMore-button-stop{cursor:default;color:#B0B0B0}.cbp-l-loadMore-text{text-align:center;margin-top:30px}.cbp-l-loadMore-text-link{font:400 16px "Open Sans",sans-serif;color:#5D5D5D;text-decoration:none;cursor:default}.cbp-l-loadMore-text-stop{color:#5D5D5D} +@charset "utf-8"; +.cbp, +.cbp-item, +.cbp-wrapper { + filter: inherit +} -@charset "UTF-8";/*! +.cbp { + position: relative; + overflow: hidden; + margin: 0 auto; + height: 400px; + visibility: visible!important +} + +.cbp .cbp-item, +.cbp-wrapper { + position: absolute; + top: 0; + left: 0; + list-style-type: none; + margin: 0; + padding: 0; + overflow: hidden +} + +.cbp .cbp-item { + z-index: 2; + display: block; + width: 300px; + height: 200px +} + +.cbp-item-wrapper { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0 +} + +.cbp img { + display: block +} + +.cbp-loading, +.cbp-loading *, +.cbp-no-transition .cbp-item { + -webkit-transition: none!important; + -moz-transition: none!important; + -o-transition: none!important; + transition: none!important +} + +.cbp-appendItems-loading { + -webkit-transition: height .4s ease!important; + -moz-transition: height .4s ease!important; + -o-transition: height .4s ease!important; + transition: height .4s ease!important +} + +.cbp-appendItems-loading .cbp-wrapper { + -webkit-transition: none!important; + -moz-transition: none!important; + -o-transition: none!important; + transition: none!important +} + +.cbp-loading { + background: url(../images/cbp-loading.gif) no-repeat scroll center center transparent +} + +.cbp .cbp-item-hidden { + pointer-events: none; + z-index: 1 +} + +.cbp-wrapper { + visibility: hidden; + width: 100%; + height: 100%; + z-index: 1 +} + +.cbp-ready .cbp-wrapper { + visibility: visible +} + +.cbp-wrapper-front { + z-index: 3 +} + +.cbp-wrapper-back { + z-index: -1 +} + +.cbp-caption, +.cbp-caption-activeWrap, +.cbp-caption-defaultWrap { + width: 100%; + height: 100%; + overflow: hidden; + position: relative; + display: block; + text-decoration: none +} + +.cbp-caption-activeWrap, +.cbp-caption-defaultWrap { + position: absolute; + z-index: 1 +} + +.cbp-caption-activeWrap { + z-index: 2 +} + +.cbp-l-caption-title { + color: #fff; + font: 700 16px/18px sans-serif; + margin-bottom: 5px +} + +.cbp-l-caption-desc { + color: #777; + font: 400 12px/16px sans-serif +} + +.cbp-l-caption-text { + font: 400 14px "Open Sans", sans-serif; + color: #fff; + letter-spacing: 3px +} + +.cbp-l-caption-buttonLeft, +.cbp-l-caption-buttonRight { + background-color: #3288C4; + color: #FFF; + display: inline-block; + font: 12px/28px sans-serif; + text-decoration: none; + width: 90px; + text-align: center; + margin: 4px +} + +.cbp-l-caption-buttonLeft:hover, +.cbp-l-caption-buttonRight:hover { + background-color: #2578B3 +} + +.cbp-caption-fadeIn .cbp-l-caption-alignLeft .cbp-l-caption-body, +.cbp-caption-minimal .cbp-l-caption-alignLeft .cbp-l-caption-body, +.cbp-caption-moveRight .cbp-l-caption-alignLeft .cbp-l-caption-body, +.cbp-caption-overlayBottom .cbp-l-caption-alignLeft .cbp-l-caption-body, +.cbp-caption-overlayRightAlong .cbp-l-caption-alignLeft .cbp-l-caption-body, +.cbp-caption-pushDown .cbp-l-caption-alignLeft .cbp-l-caption-body, +.cbp-caption-pushTop .cbp-l-caption-alignLeft .cbp-l-caption-body, +.cbp-caption-revealBottom .cbp-l-caption-alignLeft .cbp-l-caption-body, +.cbp-caption-revealLeft .cbp-l-caption-alignLeft .cbp-l-caption-body, +.cbp-caption-revealTop .cbp-l-caption-alignLeft .cbp-l-caption-body, +.cbp-caption-zoom .cbp-l-caption-alignLeft .cbp-l-caption-body { + margin: 30px 30px 0 +} + +.cbp-caption-overlayBottom .cbp-l-caption-alignLeft .cbp-l-caption-body, +.cbp-caption-overlayBottomAlong .cbp-l-caption-alignLeft .cbp-l-caption-body, +.cbp-caption-overlayBottomPush .cbp-l-caption-alignLeft .cbp-l-caption-body, +.cbp-caption-overlayBottomReveal .cbp-l-caption-alignLeft .cbp-l-caption-body { + margin: 17px 30px 0 +} + +.cbp-caption-minimal .cbp-l-caption-desc, +.cbp-caption-minimal .cbp-l-caption-title { + position: relative; + left: 0; + opacity: 0; + -webkit-transition: -webkit-transform .5s ease; + -moz-transition: -moz-transform .5s ease; + -o-transition: -o-transform .5s ease; + transition: transform .5s ease +} + +.cbp-caption-minimal .cbp-l-caption-title { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%) +} + +.cbp-caption-minimal .cbp-l-caption-desc { + -webkit-transform: translateY(100%); + -moz-transform: translateY(100%); + -o-transform: translateY(100%); + transform: translateY(100%) +} + +.cbp-caption-minimal .cbp-caption:hover .cbp-l-caption-desc, +.cbp-caption-minimal .cbp-caption:hover .cbp-l-caption-title { + opacity: 1; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0) +} + +.cbp-l-caption-alignCenter { + display: table; + width: 100%; + height: 100% +} + +.cbp-l-caption-alignCenter .cbp-l-caption-body { + display: table-cell; + vertical-align: middle; + text-align: center +} + +.cbp-l-caption-alignCenter .cbp-l-caption-buttonLeft, +.cbp-l-caption-alignCenter .cbp-l-caption-buttonRight { + position: relative; + -webkit-transition: left .4s cubic-bezier(.19, 1, .22, 1); + -moz-transition: left .4s cubic-bezier(.19, 1, .22, 1); + -o-transition: left .4s cubic-bezier(.19, 1, .22, 1); + transition: left .4s cubic-bezier(.19, 1, .22, 1) +} + +.cbp-caption-minimal .cbp-l-caption-alignCenter .cbp-l-caption-buttonLeft, +.cbp-caption-overlayBottom .cbp-l-caption-alignCenter .cbp-l-caption-buttonLeft, +.cbp-caption-overlayBottomAlong .cbp-l-caption-alignCenter .cbp-l-caption-buttonLeft, +.cbp-caption-overlayBottomPush .cbp-l-caption-alignCenter .cbp-l-caption-buttonLeft { + left: -20px +} + +.cbp-caption-minimal .cbp-l-caption-alignCenter .cbp-l-caption-buttonRight, +.cbp-caption-overlayBottom .cbp-l-caption-alignCenter .cbp-l-caption-buttonRight, +.cbp-caption-overlayBottomAlong .cbp-l-caption-alignCenter .cbp-l-caption-buttonRight, +.cbp-caption-overlayBottomPush .cbp-l-caption-alignCenter .cbp-l-caption-buttonRight { + left: 20px +} + +.cbp-caption:hover .cbp-l-caption-alignCenter .cbp-l-caption-buttonLeft, +.cbp-caption:hover .cbp-l-caption-alignCenter .cbp-l-caption-buttonRight, +.cbp-ie8 .cbp-l-caption-alignCenter .cbp-l-caption-buttonLeft, +.cbp-ie8 .cbp-l-caption-alignCenter .cbp-l-caption-buttonRight, +.cbp-ie9 .cbp-l-caption-alignCenter .cbp-l-caption-buttonLeft, +.cbp-ie9 .cbp-l-caption-alignCenter .cbp-l-caption-buttonRight { + left: 0 +} + +.cbp-caption-pushTop .cbp-caption-activeWrap, +.cbp-caption-pushTop .cbp-caption-defaultWrap { + bottom: 0; + -webkit-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + -moz-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + -o-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + transition: bottom .6s cubic-bezier(.19, 1, .22, 1) +} + +.cbp-caption-pushTop .cbp-caption-activeWrap { + bottom: -100%; + background: none repeat scroll 0 0 #282727 +} + +.cbp-caption-pushTop .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 100% +} + +.cbp-caption-pushTop .cbp-caption:hover .cbp-caption-activeWrap, +.cbp-caption-pushTop.cbp-ie8 .cbp-caption:hover .cbp-caption-defaultWrap, +.cbp-caption-pushTop.cbp-ie9 .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 0 +} + +.cbp-caption-pushTop.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap, +.cbp-caption-pushTop.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap { + bottom: -100% +} + +.cbp-caption-pushDown .cbp-caption-activeWrap, +.cbp-caption-pushDown .cbp-caption-defaultWrap { + bottom: 0; + -webkit-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + -moz-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + -o-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + transition: bottom .6s cubic-bezier(.19, 1, .22, 1) +} + +.cbp-caption-pushDown .cbp-caption-activeWrap { + bottom: 100%; + background: none repeat scroll 0 0 #282727 +} + +.cbp-caption-pushDown .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: -100% +} + +.cbp-caption-pushDown .cbp-caption:hover .cbp-caption-activeWrap, +.cbp-caption-pushDown.cbp-ie8 .cbp-caption:hover .cbp-caption-defaultWrap, +.cbp-caption-pushDown.cbp-ie9 .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 0 +} + +.cbp-caption-pushDown.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap, +.cbp-caption-pushDown.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap { + bottom: 100% +} + +.cbp-caption-revealBottom .cbp-caption-defaultWrap { + bottom: 0; + z-index: 2; + -webkit-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + -moz-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + -o-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + transition: bottom .6s cubic-bezier(.19, 1, .22, 1) +} + +.cbp-caption-revealBottom .cbp-caption-activeWrap { + bottom: 0; + z-index: 1; + background: none repeat scroll 0 0 #282727 +} + +.cbp-caption-revealBottom .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 100% +} + +.cbp-caption-revealBottom.cbp-ie8 .cbp-caption:hover .cbp-caption-defaultWrap, +.cbp-caption-revealBottom.cbp-ie9 .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 0 +} + +.cbp-caption-revealTop .cbp-caption-defaultWrap { + bottom: 0; + z-index: 2; + -webkit-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + -moz-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + -o-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + transition: bottom .6s cubic-bezier(.19, 1, .22, 1) +} + +.cbp-caption-revealTop .cbp-caption-activeWrap { + bottom: 0; + z-index: 1; + background: none repeat scroll 0 0 #282727 +} + +.cbp-caption-revealTop .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: -100% +} + +.cbp-caption-revealTop.cbp-ie8 .cbp-caption:hover .cbp-caption-defaultWrap, +.cbp-caption-revealTop.cbp-ie9 .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 0 +} + +.cbp-caption-overlayBottomReveal .cbp-caption-defaultWrap { + bottom: 0; + z-index: 2; + -webkit-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + -moz-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + -o-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + transition: bottom .6s cubic-bezier(.19, 1, .22, 1) +} + +.cbp-caption-overlayBottomReveal .cbp-caption-activeWrap { + bottom: 0; + z-index: 1; + height: 70px; + background: none repeat scroll 0 0 #282727 +} + +.cbp-caption-overlayBottomReveal .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 70px +} + +.cbp-caption-overlayBottomReveal.cbp-ie8 .cbp-caption:hover .cbp-caption-defaultWrap, +.cbp-caption-overlayBottomReveal.cbp-ie9 .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 0 +} + +.cbp-caption-overlayBottomPush .cbp-caption-activeWrap, +.cbp-caption-overlayBottomPush .cbp-caption-defaultWrap { + bottom: 0; + -webkit-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + -moz-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + -o-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + transition: bottom .6s cubic-bezier(.19, 1, .22, 1) +} + +.cbp-caption-overlayBottomPush .cbp-caption-activeWrap { + bottom: -70px; + height: 70px; + background: none repeat scroll 0 0 #282727 +} + +.cbp-caption-overlayBottomPush .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 70px +} + +.cbp-caption-overlayBottomPush .cbp-caption:hover .cbp-caption-activeWrap, +.cbp-caption-overlayBottomPush.cbp-ie8 .cbp-caption:hover .cbp-caption-defaultWrap, +.cbp-caption-overlayBottomPush.cbp-ie9 .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 0 +} + +.cbp-caption-overlayBottomPush.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap, +.cbp-caption-overlayBottomPush.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap { + bottom: -70px +} + +.cbp-caption-overlayBottom .cbp-caption-activeWrap { + bottom: -70px; + height: 70px; + background-color: #181616; + background-color: rgba(24, 22, 22, .7); + -webkit-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + -moz-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + -o-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + transition: bottom .6s cubic-bezier(.19, 1, .22, 1) +} + +.cbp-caption-overlayBottom .cbp-caption:hover .cbp-caption-activeWrap { + bottom: 0 +} + +.cbp-caption-overlayBottom.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap { + bottom: -70px +} + +.cbp-caption-moveRight .cbp-caption-activeWrap { + left: -100%; + top: 0; + background: none repeat scroll 0 0 #282727; + -webkit-transition: left .6s cubic-bezier(.19, 1, .22, 1); + -moz-transition: left .6s cubic-bezier(.19, 1, .22, 1); + -o-transition: left .6s cubic-bezier(.19, 1, .22, 1); + transition: left .6s cubic-bezier(.19, 1, .22, 1) +} + +.cbp-caption-moveRight .cbp-caption:hover .cbp-caption-activeWrap { + left: 0 +} + +.cbp-caption-moveRight.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap, +.cbp-caption-moveRight.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap { + left: -100% +} + +.cbp-caption-revealLeft .cbp-caption-activeWrap { + left: 100%; + top: 0; + background: none repeat scroll 0 0 #282727; + -webkit-transition: left .6s cubic-bezier(.19, 1, .22, 1); + -moz-transition: left .6s cubic-bezier(.19, 1, .22, 1); + -o-transition: left .6s cubic-bezier(.19, 1, .22, 1); + transition: left .6s cubic-bezier(.19, 1, .22, 1) +} + +.cbp-caption-revealLeft .cbp-caption:hover .cbp-caption-activeWrap { + left: 0 +} + +.cbp-caption-revealLeft.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap, +.cbp-caption-revealLeft.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap { + left: 100% +} + +.cbp-caption-minimal .cbp-caption-activeWrap { + background-color: rgba(0, 0, 0, .8); + opacity: 0 +} + +.cbp-caption-minimal .cbp-caption:hover .cbp-caption-activeWrap { + opacity: 1 +} + +.cbp-caption-minimal.cbp-ie8 .cbp-caption-activeWrap { + background-color: #000; + -ms-filter: "alpha(Opacity=0)" +} + +.cbp-caption-minimal.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap { + -ms-filter: "alpha(Opacity=90)" +} + +.cbp-caption-fadeIn .cbp-caption-activeWrap { + opacity: 0; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + background-color: rgba(0, 0, 0, .85); + -webkit-transition: opacity .6s cubic-bezier(.19, 1, .22, 1); + -moz-transition: opacity .6s cubic-bezier(.19, 1, .22, 1); + -o-transition: opacity .6s cubic-bezier(.19, 1, .22, 1); + transition: opacity .6s cubic-bezier(.19, 1, .22, 1) +} + +.cbp-caption-fadeIn.cbp-ie8 .cbp-caption-activeWrap { + background-color: #000; + -ms-filter: "alpha(Opacity=0)" +} + +.cbp-caption-fadeIn .cbp-caption:hover .cbp-caption-activeWrap { + opacity: 1 +} + +.cbp-caption-fadeIn.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap { + opacity: 0 +} + +.cbp-caption-overlayRightAlong .cbp-caption-activeWrap, +.cbp-caption-overlayRightAlong .cbp-caption-defaultWrap { + left: 0; + -webkit-transition: left .6s cubic-bezier(.19, 1, .22, 1); + -moz-transition: left .6s cubic-bezier(.19, 1, .22, 1); + -o-transition: left .6s cubic-bezier(.19, 1, .22, 1); + transition: left .6s cubic-bezier(.19, 1, .22, 1) +} + +.cbp-caption-overlayRightAlong .cbp-caption-activeWrap { + left: -50%; + width: 50%; + background: none repeat scroll 0 0 #282727 +} + +.cbp-caption-overlayRightAlong .cbp-caption:hover .cbp-caption-defaultWrap { + left: 25% +} + +.cbp-caption-overlayRightAlong .cbp-caption:hover .cbp-caption-activeWrap, +.cbp-caption-overlayRightAlong.cbp-ie8 .cbp-caption:hover .cbp-caption-defaultWrap, +.cbp-caption-overlayRightAlong.cbp-ie9 .cbp-caption:hover .cbp-caption-defaultWrap { + left: 0 +} + +.cbp-caption-overlayRightAlong.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap, +.cbp-caption-overlayRightAlong.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap { + left: -50% +} + +.cbp-caption-overlayBottomAlong .cbp-caption-activeWrap, +.cbp-caption-overlayBottomAlong .cbp-caption-defaultWrap { + bottom: 0; + -webkit-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + -moz-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + -o-transition: bottom .6s cubic-bezier(.19, 1, .22, 1); + transition: bottom .6s cubic-bezier(.19, 1, .22, 1) +} + +.cbp-caption-overlayBottomAlong .cbp-caption-activeWrap { + bottom: -70px; + height: 70px; + background: none repeat scroll 0 0 #282727 +} + +.cbp-caption-overlayBottomAlong .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 35px +} + +.cbp-caption-overlayBottomAlong .cbp-caption:hover .cbp-caption-activeWrap, +.cbp-caption-overlayBottomAlong.cbp-ie8 .cbp-caption:hover .cbp-caption-defaultWrap, +.cbp-caption-overlayBottomAlong.cbp-ie9 .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 0 +} + +.cbp-caption-overlayBottomAlong.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap, +.cbp-caption-overlayBottomAlong.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap { + bottom: -70px +} + +.cbp-caption-zoom .cbp-caption-defaultWrap { + width: 100%; + height: 100%; + overflow: hidden; + -webkit-transition: -webkit-transform .6s cubic-bezier(.19, 1, .22, 1); + -moz-transition: -moz-transform .6s cubic-bezier(.19, 1, .22, 1); + -o-transition: -o-transform .6s cubic-bezier(.19, 1, .22, 1); + transition: transform .6s cubic-bezier(.19, 1, .22, 1) +} + +.cbp-caption-zoom .cbp-caption:hover .cbp-caption-defaultWrap { + -webkit-transform: scale(1.25); + -moz-transform: scale(1.25); + -o-transform: scale(1.25); + transform: scale(1.25) +} + +.cbp-caption-zoom .cbp-caption-activeWrap { + opacity: 0; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + background-color: rgba(0, 0, 0, .9); + -webkit-transition: opacity .8s cubic-bezier(.19, 1, .22, 1); + -moz-transition: opacity .8s cubic-bezier(.19, 1, .22, 1); + -o-transition: opacity .8s cubic-bezier(.19, 1, .22, 1); + transition: opacity .8s cubic-bezier(.19, 1, .22, 1) +} + +.cbp-caption-zoom.cbp-ie8 .cbp-caption-activeWrap { + background-color: #000; + -ms-filter: "alpha(Opacity=0)" +} + +.cbp-caption-zoom .cbp-caption:hover .cbp-caption-activeWrap { + opacity: 1 +} + +.cbp-caption-zoom.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap { + opacity: 0 +} + +.cbp-animation-fadeOut { + -webkit-transition: height .6s ease-in-out; + -moz-transition: height .6s ease-in-out; + -o-transition: height .6s ease-in-out; + transition: height .6s ease-in-out +} + +.cbp-animation-fadeOut .cbp-item { + -webkit-transition: -webkit-transform .6s ease-in-out .2s, opacity .6s ease-in-out .2s; + -moz-transition: -moz-transform .6s ease-in-out .2s, opacity .6s ease-in-out .2s; + -o-transition: -o-transform .6s ease-in-out .2s, opacity .6s ease-in-out .2s; + transition: transform .6s ease-in-out .2s, opacity .6s ease-in-out .2s +} + +.cbp-animation-fadeOut .cbp-item-hidden { + -webkit-transition: -webkit-transform .6s ease-in-out 0s, opacity .4s ease-in-out 0s; + -moz-transition: -moz-transform .6s ease-in-out 0s, opacity .4s ease-in-out 0s; + -o-transition: -o-transform .6s ease-in-out 0s, opacity .4s ease-in-out 0s; + transition: transform .6s ease-in-out 0s, opacity .4s ease-in-out 0s +} + +.cbp-animation-quicksand { + -webkit-transition: height .6s ease-in-out; + -moz-transition: height .6s ease-in-out; + -o-transition: height .6s ease-in-out; + transition: height .6s ease-in-out +} + +.cbp-animation-quicksand .cbp-item { + -webkit-transition: -webkit-transform .6s ease-in-out .2s, opacity .6s ease-in-out .2s; + -moz-transition: -moz-transform .6s ease-in-out .2s, opacity .6s ease-in-out .2s; + -o-transition: -o-transform .6s ease-in-out .2s, opacity .6s ease-in-out .2s; + transition: transform .6s ease-in-out .2s, opacity .6s ease-in-out .2s +} + +.cbp-animation-quicksand .cbp-item-hidden { + -webkit-transition: -webkit-transform .6s ease-in-out 0s, opacity .4s ease-in-out 0s; + -moz-transition: -moz-transform .6s ease-in-out 0s, opacity .4s ease-in-out 0s; + -o-transition: -o-transform .6s ease-in-out 0s, opacity .4s ease-in-out 0s; + transition: transform .6s ease-in-out 0s, opacity .4s ease-in-out 0s +} + +.cbp-animation-skew { + -webkit-transition: height .3s ease-in-out; + -moz-transition: height .3s ease-in-out; + -o-transition: height .3s ease-in-out; + transition: height .3s ease-in-out +} + +.cbp-animation-skew .cbp-item { + -webkit-transition: -webkit-transform .3s ease-in, opacity .3s ease-in; + -moz-transition: -moz-transform .3s ease-in, opacity .3s ease-in; + -o-transition: -o-transform .3s ease-in, opacity .3s ease-in; + transition: transform .3s ease-in, opacity .3s ease-in +} + +.cbp-animation-skew .cbp-item-hidden { + -webkit-transition: -webkit-transform .3s ease-in 0s, opacity .3s ease-in 0s; + -moz-transition: -moz-transform .3s ease-in 0s, opacity .3s ease-in 0s; + -o-transition: -o-transform .3s ease-in 0s, opacity .3s ease-in 0s; + transition: transform .3s ease-in 0s, opacity .3s ease-in 0s +} + +.cbp-animation-boxShadow { + -webkit-transition: height .6s ease-in-out; + -moz-transition: height .6s ease-in-out; + -o-transition: height .6s ease-in-out; + transition: height .6s ease-in-out +} + +.cbp-animation-boxShadow .cbp-item { + -webkit-transition: -webkit-transform .6s ease-in-out, opacity .6s ease-in-out; + -moz-transition: -moz-transform .6s ease-in-out, opacity .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out, opacity .6s ease-in-out; + transition: transform .6s ease-in-out, opacity .6s ease-in-out +} + +.cbp-animation-boxShadow .cbp-item .cbp-animation-boxShadowMask { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: -1; + -webkit-transition: box-shadow .6s ease-in-out; + -moz-transition: box-shadow .6s ease-in-out; + -o-transition: box-shadow .6s ease-in-out; + transition: box-shadow .6s ease-in-out +} + +.cbp-animation-boxShadow .cbp-item .cbp-animation-boxShadowMask.cbp-animation-boxShadowShow { + z-index: 10 +} + +.cbp-animation-boxShadow .cbp-item .cbp-animation-boxShadowMask.cbp-animation-boxShadowActive { + box-shadow: 0 0 100px 100px #fff inset +} + +.cbp-animation-boxShadow .cbp-item .cbp-animation-boxShadowMask.cbp-animation-boxShadowInactive { + box-shadow: 0 0 #fff inset +} + +.cbp-animation-bounceLeft { + -webkit-transition: height .8s ease-in-out; + -moz-transition: height .8s ease-in-out; + -o-transition: height .8s ease-in-out; + transition: height .8s ease-in-out +} + +.cbp-animation-bounceLeft .cbp-wrapper { + -webkit-transition: opacity .8s ease-in-out, left .8s ease-in-out; + -moz-transition: opacity .8s ease-in-out, left .8s ease-in-out; + -o-transition: opacity .8s ease-in-out, left .8s ease-in-out; + transition: opacity .8s ease-in-out, left .8s ease-in-out +} + +.cbp-animation-bounceLeft .cbp-item { + overflow: visible; + -webkit-transition: -webkit-transform .8s ease-in-out; + -moz-transition: -moz-transform .8s ease-in-out; + -o-transition: -o-transform .8s ease-in-out; + transition: transform .8s ease-in-out +} + +.cbp-animation-bounceLeft .cbp-item-hidden { + display: none +} + +.cbp-animation-bounceLeft .cbp-item-wrapper { + overflow: hidden +} + +.cbp-animation-bounceTop { + -webkit-transition: height .6s ease-in-out; + -moz-transition: height .6s ease-in-out; + -o-transition: height .6s ease-in-out; + transition: height .6s ease-in-out +} + +.cbp-animation-bounceTop .cbp-wrapper { + -webkit-transition: opacity .6s ease-in-out, top .6s ease-in-out; + -moz-transition: opacity .6s ease-in-out, top .6s ease-in-out; + -o-transition: opacity .6s ease-in-out, top .6s ease-in-out; + transition: opacity .6s ease-in-out, top .6s ease-in-out +} + +.cbp-animation-bounceTop .cbp-item { + overflow: visible; + -webkit-transition: -webkit-transform .8s ease-in-out; + -moz-transition: -moz-transform .8s ease-in-out; + -o-transition: -o-transform .8s ease-in-out; + transition: transform .8s ease-in-out +} + +.cbp-animation-bounceTop .cbp-item-hidden { + display: none +} + +.cbp-animation-bounceTop .cbp-item-wrapper { + overflow: hidden +} + +.cbp-animation-bounceBottom { + -webkit-transition: height .6s ease-in-out; + -moz-transition: height .6s ease-in-out; + -o-transition: height .6s ease-in-out; + transition: height .6s ease-in-out +} + +.cbp-animation-bounceBottom .cbp-wrapper { + -webkit-transition: opacity .6s ease-in-out, top .6s ease-in-out; + -moz-transition: opacity .6s ease-in-out, top .6s ease-in-out; + -o-transition: opacity .6s ease-in-out, top .6s ease-in-out; + transition: opacity .6s ease-in-out, top .6s ease-in-out +} + +.cbp-animation-bounceBottom .cbp-item { + overflow: visible; + -webkit-transition: -webkit-transform .8s ease-in-out; + -moz-transition: -moz-transform .8s ease-in-out; + -o-transition: -o-transform .8s ease-in-out; + transition: transform .8s ease-in-out +} + +.cbp-animation-bounceBottom .cbp-item-hidden { + display: none +} + +.cbp-animation-bounceBottom .cbp-item-wrapper { + overflow: hidden +} + +.cbp-animation-moveLeft { + -webkit-transition: height .6s ease-in-out; + -moz-transition: height .6s ease-in-out; + -o-transition: height .6s ease-in-out; + transition: height .6s ease-in-out +} + +.cbp-animation-moveLeft .cbp-wrapper { + z-index: 2; + -webkit-transition: opacity .6s ease-in-out, left .6s ease-in-out; + -moz-transition: opacity .6s ease-in-out, left .6s ease-in-out; + -o-transition: opacity .6s ease-in-out, left .6s ease-in-out; + transition: opacity .6s ease-in-out, left .6s ease-in-out +} + +.cbp-animation-moveLeft .cbp-wrapper.no-trans { + z-index: 1; + -webkit-transition: none!important; + -moz-transition: none!important; + -o-transition: none!important; + transition: none!important +} + +.cbp-animation-moveLeft .cbp-item { + overflow: visible; + -webkit-transition: -webkit-transform .6s ease-in-out; + -moz-transition: -moz-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out +} + +.cbp-animation-moveLeft .cbp-item-wrapper { + overflow: hidden +} + +.cbp-animation-slideLeft { + overflow: visible +} + +.cbp-animation-slideLeft .cbp-item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -moz-transition: -moz-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out +} + +.cbp-animation-slideLeft-out { + -webkit-animation: cbp-animation-slideLeft-out .9s both ease; + -moz-animation: cbp-animation-slideLeft-out .9s both ease; + animation: cbp-animation-slideLeft-out .9s both ease +} + +.cbp-animation-slideLeft-in { + -webkit-animation: cbp-animation-slideLeft-in .9s both ease; + -moz-animation: cbp-animation-slideLeft-in .9s both ease; + animation: cbp-animation-slideLeft-in .9s both ease +} + +@-webkit-keyframes cbp-animation-slideLeft-out { + 25% { + opacity: .75; + -webkit-transform: scale(.8) + } + 100%, + 75% { + opacity: .75; + -webkit-transform: scale(.8) translateX(-200%) + } +} + +@-moz-keyframes cbp-animation-slideLeft-out { + 25% { + opacity: .75; + -moz-transform: scale(.8) + } + 100%, + 75% { + opacity: .75; + -moz-transform: scale(.8) translateX(-200%) + } +} + +@keyframes cbp-animation-slideLeft-out { + 25% { + opacity: .75; + transform: scale(.8) + } + 100%, + 75% { + opacity: .75; + transform: scale(.8) translateX(-200%) + } +} + +@-webkit-keyframes cbp-animation-slideLeft-in { + 0%, + 25% { + opacity: .75; + -webkit-transform: scale(.8) translateX(200%) + } + 75% { + opacity: .75; + -webkit-transform: scale(.8) + } + 100% { + opacity: 1; + -webkit-transform: scale(1) translateX(0) + } +} + +@-moz-keyframes cbp-animation-slideLeft-in { + 0%, + 25% { + opacity: .75; + -moz-transform: scale(.8) translateX(200%) + } + 75% { + opacity: .75; + -moz-transform: scale(.8) + } + 100% { + opacity: 1; + -moz-transform: scale(1) translateX(0) + } +} + +@keyframes cbp-animation-slideLeft-in { + 0%, + 25% { + opacity: .75; + transform: scale(.8) translateX(200%) + } + 75% { + opacity: .75; + transform: scale(.8) + } + 100% { + opacity: 1; + transform: scale(1) translateX(0) + } +} + +.cbp-animation-slideDelay { + overflow: visible +} + +.cbp-animation-slideDelay .cbp-item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -moz-transition: -moz-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out +} + +.cbp-animation-slideDelay-out { + -webkit-animation: cbp-animation-slideDelay-out .5s both ease-in-out; + -moz-animation: cbp-animation-slideDelay-out .5s both ease-in-out; + animation: cbp-animation-slideDelay-out .5s both ease-in-out +} + +.cbp-animation-slideDelay-in { + -webkit-animation: cbp-animation-slideDelay-in .5s both ease-in-out; + -moz-animation: cbp-animation-slideDelay-in .5s both ease-in-out; + animation: cbp-animation-slideDelay-in .5s both ease-in-out +} + +.cbp-animation-slideDelay-fadeOut { + -webkit-animation: cbp-animation-slideDelay-fadeOut .4s both ease; + -moz-animation: cbp-animation-slideDelay-fadeOut .4s both ease; + animation: cbp-animation-slideDelay-fadeOut .4s both ease +} + +@-webkit-keyframes cbp-animation-slideDelay-out { + 100% { + -webkit-transform: translateX(-100%) + } +} + +@-moz-keyframes cbp-animation-slideDelay-out { + 100% { + -moz-transform: translateX(-100%) + } +} + +@keyframes cbp-animation-slideDelay-out { + 100% { + transform: translateX(-100%) + } +} + +@-webkit-keyframes cbp-animation-slideDelay-in { + 0% { + -webkit-transform: translateX(100%) + } + 100% { + -webkit-transform: translateX(0) + } +} + +@-moz-keyframes cbp-animation-slideDelay-in { + 0% { + -moz-transform: translateX(100%) + } + 100% { + -moz-transform: translateX(0) + } +} + +@keyframes cbp-animation-slideDelay-in { + 0% { + transform: translateX(100%) + } + 100% { + transform: translateX(0) + } +} + +@-webkit-keyframes cbp-animation-slideDelay-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@-moz-keyframes cbp-animation-slideDelay-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@keyframes cbp-animation-slideDelay-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +.cbp-animation-3dflip { + overflow: visible +} + +.cbp-animation-3dflip .cbp-item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -moz-transition: -moz-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + -webkit-perspective: 1000px; + perspective: 1000px +} + +.cbp-animation-3dflip-out { + -webkit-transform-origin: 0 50%; + transform-origin: 0 50%; + -webkit-animation: rotateOutLeft .6s forwards; + animation: rotateOutLeft .6s forwards +} + +.cbp-animation-3dflip-in { + opacity: 0; + -webkit-transform-origin: 100% 50%; + transform-origin: 100% 50%; + -webkit-animation: rotateInRight .6s ease-in forwards; + animation: rotateInRight .6s ease-in forwards +} + +.cbp-animation-3dflip-fadeOut { + -webkit-animation: cbp-animation-3dflip-fadeOut .4s both ease; + -moz-animation: cbp-animation-3dflip-fadeOut .4s both ease; + animation: cbp-animation-3dflip-fadeOut .4s both ease +} + +@-webkit-keyframes rotateOutLeft { + 100% { + opacity: 0; + -webkit-transform: rotateY(90deg) + } +} + +@-moz-keyframes rotateOutLeft { + 100% { + opacity: 0; + -moz1-transform: rotateY(90deg) + } +} + +@keyframes rotateOutLeft { + 100% { + opacity: 0; + transform: rotateY(90deg) + } +} + +@-webkit-keyframes rotateInRight { + 0% { + opacity: 0; + -webkit-transform: rotateY(-90deg) + } + 100% { + visibility: visible; + opacity: 1; + -webkit-transform: rotateY(0deg) + } +} + +@-moz-keyframes rotateInRight { + 0% { + opacity: 0; + -moz-transform: rotateY(-90deg) + } + 100% { + visibility: visible; + opacity: 1; + -moz-transform: rotateY(0deg) + } +} + +@keyframes rotateInRight { + 0% { + opacity: 0; + transform: rotateY(-90deg) + } + 100% { + visibility: visible; + opacity: 1; + transform: rotateY(0deg) + } +} + +@-webkit-keyframes cbp-animation-3dflip-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@-moz-keyframes cbp-animation-3dflip-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@keyframes cbp-animation-3dflip-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +.cbp-animation-rotateSides { + overflow: visible +} + +.cbp-animation-rotateSides .cbp-item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -moz-transition: -moz-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + -webkit-perspective: 1000px; + perspective: 1000px +} + +.cbp-animation-rotateSides-out { + -webkit-transform-origin: -50% 50%; + -webkit-animation: rotateSides-out .5s both ease-in; + -moz-transform-origin: -50% 50%; + -moz-animation: rotateSides-out .5s both ease-in; + transform-origin: -50% 50%; + animation: rotateSides-out .5s both ease-in +} + +.cbp-animation-rotateSides-in { + -webkit-transform-origin: 150% 50%; + -webkit-animation: rotateSides-in .6s both ease-out; + -moz-transform-origin: 150% 50%; + -moz-animation: rotateSides-in .6s both ease-out; + transform-origin: 150% 50%; + animation: rotateSides-in .6s both ease-out +} + +.cbp-animation-rotateSides-fadeOut { + -webkit-animation: cbp-animation-rotateSides-fadeOut .5s both ease; + -moz-animation: cbp-animation-rotateSides-fadeOut .5s both ease; + animation: cbp-animation-rotateSides-fadeOut .5s both ease +} + +@-webkit-keyframes rotateSides-out { + 100% { + opacity: 0; + -webkit-transform: translateZ(-500px) rotateY(90deg) + } +} + +@-moz-keyframes rotateSides-out { + 100% { + opacity: 0; + -moz-transform: translateZ(-500px) rotateY(90deg) + } +} + +@keyframes rotateSides-out { + 100% { + opacity: 0; + transform: translateZ(-500px) rotateY(90deg) + } +} + +@-webkit-keyframes rotateSides-in { + 0%, + 40% { + opacity: 0; + -webkit-transform: translateZ(-500px) rotateY(-90deg) + } +} + +@-moz-keyframes rotateSides-in { + 0%, + 40% { + opacity: 0; + -moz-transform: translateZ(-500px) rotateY(-90deg) + } +} + +@keyframes rotateSides-in { + 0%, + 40% { + opacity: 0; + transform: translateZ(-500px) rotateY(-90deg) + } +} + +@-webkit-keyframes cbp-animation-rotateSides-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@-moz-keyframes cbp-animation-rotateSides-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@keyframes cbp-animation-rotateSides-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +.cbp-animation-flipOutDelay { + overflow: visible +} + +.cbp-animation-flipOutDelay .cbp-item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -moz-transition: -moz-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + -webkit-perspective: 1000px; + perspective: 1000px +} + +.cbp-animation-flipOutDelay-out { + -webkit-transform-origin: 50% 50%; + -webkit-animation: flipOutDelay-out .5s both ease-in; + -moz-transform-origin: 50% 50%; + -moz-animation: flipOutDelay-out .5s both ease-in; + transform-origin: 50% 50%; + animation: flipOutDelay-out .5s both ease-in +} + +.cbp-animation-flipOutDelay-in { + -webkit-transform-origin: 50% 50%; + -webkit-animation: flipOutDelay-in 1s both ease-out; + -moz-transform-origin: 50% 50%; + -moz-animation: flipOutDelay-in 1s both ease-out; + transform-origin: 50% 50%; + animation: flipOutDelay-in 1s both ease-out +} + +@-webkit-keyframes flipOutDelay-out { + 100% { + -webkit-transform: translateZ(-1000px) rotateY(-90deg); + opacity: .2 + } +} + +@-moz-keyframes flipOutDelay-out { + 100% { + -moz-transform: translateZ(-1000px) rotateY(-90deg); + opacity: .2 + } +} + +@keyframes flipOutDelay-out { + 100% { + transform: translateZ(-1000px) rotateY(-90deg); + opacity: .2 + } +} + +@-webkit-keyframes flipOutDelay-in { + 0%, + 50% { + -webkit-transform: translateZ(-1000px) rotateY(90deg); + opacity: .2 + } +} + +@-moz-keyframes flipOutDelay-in { + 0%, + 50% { + -moz-transform: translateZ(-1000px) rotateY(90deg); + opacity: .2 + } +} + +@keyframes flipOutDelay-in { + 0%, + 50% { + transform: translateZ(-1000px) rotateY(90deg); + opacity: .2 + } +} + +.cbp-animation-unfold { + overflow: visible +} + +.cbp-animation-unfold .cbp-item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -moz-transition: -moz-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + -webkit-perspective: 1000px; + perspective: 1000px +} + +.cbp-animation-unfold-out { + -webkit-animation: unfold-out .8s ease both; + -moz-animation: unfold-out .8s ease both; + animation: unfold-out .8s ease both +} + +.cbp-animation-unfold-in { + -webkit-transform-origin: 0 50%; + -webkit-animation: unfold-in .8s both ease; + -moz-transform-origin: 0 50%; + -moz-animation: unfold-in .8s both ease; + transform-origin: 0 50%; + animation: unfold-in .8s both ease +} + +.cbp-animation-unfold-fadeOut { + -webkit-animation: cbp-animation-unfold-fadeOut .5s both ease; + -moz-animation: cbp-animation-unfold-fadeOut .5s both ease; + animation: cbp-animation-unfold-fadeOut .5s both ease +} + +@-webkit-keyframes unfold-out { + 99% { + opacity: .3 + } + 100% { + opacity: 0; + -webkit-transform: translateX(-100%) + } +} + +@-moz-keyframes unfold-out { + 99% { + opacity: .3 + } + 100% { + opacity: 0; + -moz-transform: translateX(-100%) + } +} + +@keyframes unfold-out { + 99% { + opacity: .3 + } + 100% { + opacity: 0; + transform: translateX(-100%) + } +} + +@-webkit-keyframes unfold-in { + from { + opacity: 0; + -webkit-transform: translateX(100%) rotateY(90deg) + } +} + +@-moz-keyframes unfold-in { + from { + opacity: 0; + -moz-transform: translateX(100%) rotateY(90deg) + } +} + +@keyframes unfold-in { + from { + opacity: 0; + transform: translateX(100%) rotateY(90deg) + } +} + +@-webkit-keyframes cbp-animation-unfold-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@-moz-keyframes cbp-animation-unfold-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@keyframes cbp-animation-unfold-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +.cbp-animation-foldLeft { + overflow: visible +} + +.cbp-animation-foldLeft .cbp-item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -moz-transition: -moz-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + -webkit-perspective: 1000px; + perspective: 1000px +} + +.cbp-animation-foldLeft-out { + -webkit-transform-origin: 100% 50%; + -webkit-animation: foldLeft-out .7s both ease; + -moz-transform-origin: 100% 50%; + -moz-animation: foldLeft-out .7s both ease; + transform-origin: 100% 50%; + animation: foldLeft-out .7s both ease +} + +.cbp-animation-foldLeft-in { + -webkit-animation: foldLeft-in .7s ease both; + -moz-animation: foldLeft-in .7s ease both; + animation: foldLeft-in .7s ease both +} + +.cbp-animation-foldLeft-fadeOut { + -webkit-animation: cbp-animation-foldLeft-fadeOut .5s both ease; + -moz-animation: cbp-animation-foldLeft-fadeOut .5s both ease; + animation: cbp-animation-foldLeft-fadeOut .5s both ease +} + +@-webkit-keyframes foldLeft-out { + to { + opacity: 0; + -webkit-transform: translateX(-100%) rotateY(-90deg) + } +} + +@-moz-keyframes foldLeft-out { + to { + opacity: 0; + -moz-transform: translateX(-100%) rotateY(-90deg) + } +} + +@keyframes foldLeft-out { + to { + opacity: 0; + transform: translateX(-100%) rotateY(-90deg) + } +} + +@-webkit-keyframes foldLeft-in { + from { + opacity: .3; + -webkit-transform: translateX(100%) + } +} + +@-moz-keyframes foldLeft-in { + from { + opacity: .3; + -moz-transform: translateX(100%) + } +} + +@keyframes foldLeft-in { + from { + opacity: .3; + transform: translateX(100%) + } +} + +@-webkit-keyframes cbp-animation-foldLeft-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@-moz-keyframes cbp-animation-foldLeft-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@keyframes cbp-animation-foldLeft-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +.cbp-animation-scaleDown { + overflow: visible +} + +.cbp-animation-scaleDown .cbp-item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -moz-transition: -moz-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + -webkit-perspective: 1000px; + perspective: 1000px +} + +.cbp-animation-scaleDown-out { + -webkit-animation: scaleDown-out .7s ease both; + -moz-animation: scaleDown-out .7s ease both; + animation: scaleDown-out .7s ease both +} + +.cbp-animation-scaleDown-in { + -webkit-animation: scaleDown-in .6s ease both; + -moz-animation: scaleDown-in .6s ease both; + animation: scaleDown-in .6s ease both +} + +.cbp-animation-scaleDown-fadeOut { + -webkit-animation: cbp-animation-scaleDown-fadeOut .5s both ease; + -moz-animation: cbp-animation-scaleDown-fadeOut .5s both ease; + animation: cbp-animation-scaleDown-fadeOut .5s both ease +} + +@-webkit-keyframes scaleDown-out { + to { + opacity: 0; + -webkit-transform: scale(.8) + } +} + +@-moz-keyframes scaleDown-out { + to { + opacity: 0; + -moz-transform: scale(.8) + } +} + +@keyframes scaleDown-out { + to { + opacity: 0; + transform: scale(.8) + } +} + +@-webkit-keyframes scaleDown-in { + from { + -webkit-transform: translateX(100%) + } +} + +@-moz-keyframes scaleDown-in { + from { + -moz-transform: translateX(100%) + } +} + +@keyframes scaleDown-in { + from { + transform: translateX(100%) + } +} + +@-webkit-keyframes cbp-animation-scaleDown-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@-moz-keyframes cbp-animation-scaleDown-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@keyframes cbp-animation-scaleDown-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +.cbp-animation-frontRow { + overflow: visible +} + +.cbp-animation-frontRow .cbp-item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -moz-transition: -moz-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + -webkit-perspective: 1000px; + perspective: 1000px +} + +.cbp-animation-frontRow-out { + -webkit-animation: frontRow-out .7s ease both; + -moz-animation: frontRow-out .7s ease both; + animation: frontRow-out .7s ease both +} + +.cbp-animation-frontRow-in { + -webkit-animation: frontRow-in .6s ease both; + -moz-animation: frontRow-in .6s ease both; + animation: frontRow-in .6s ease both +} + +.cbp-animation-frontRow-fadeOut { + -webkit-animation: cbp-animation-frontRow-fadeOut .5s both ease; + -moz-animation: cbp-animation-frontRow-fadeOut .5s both ease; + animation: cbp-animation-frontRow-fadeOut .5s both ease +} + +@-webkit-keyframes frontRow-out { + 100% { + -webkit-transform: translateX(-60%) scale(.8); + opacity: 0 + } +} + +@-moz-keyframes frontRow-out { + 100% { + -moz-transform: translateX(-60%) scale(.8); + opacity: 0 + } +} + +@keyframes frontRow-out { + 100% { + transform: translateX(-60%) scale(.8); + opacity: 0 + } +} + +@-webkit-keyframes frontRow-in { + 0% { + -webkit-transform: translateX(100%) scale(.8) + } + 100% { + visibility: visible; + opacity: 1; + -webkit-transform: translateX(0%) scale(1) + } +} + +@-moz-keyframes frontRow-in { + 0% { + -moz-transform: translateX(100%) scale(.8) + } + 100% { + visibility: visible; + opacity: 1; + -moz-transform: translateX(0%) scale(1) + } +} + +@keyframes frontRow-in { + 0% { + transform: translateX(100%) scale(.8) + } + 100% { + visibility: visible; + opacity: 1; + transform: translateX(0%) scale(1) + } +} + +@-webkit-keyframes cbp-animation-frontRow-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@-moz-keyframes cbp-animation-frontRow-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@keyframes cbp-animation-frontRow-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +.cbp-animation-rotateRoom { + overflow: visible +} + +.cbp-animation-rotateRoom .cbp-item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -moz-transition: -moz-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + -webkit-perspective: 1000px; + perspective: 1000px +} + +.cbp-animation-rotateRoom-out { + -webkit-transform-origin: 100% 50%; + -webkit-animation: rotateRoom-out .8s both ease; + -moz-transform-origin: 100% 50%; + -moz-animation: rotateRoom-out .8s both ease; + transform-origin: 100% 50%; + animation: rotateRoom-out .8s both ease +} + +.cbp-animation-rotateRoom-in { + -webkit-transform-origin: 0 50%; + -webkit-animation: rotateRoom-in .8s both ease; + -moz-transform-origin: 0 50%; + -moz-animation: rotateRoom-in .8s both ease; + transform-origin: 0 50%; + animation: rotateRoom-in .8s both ease +} + +.cbp-animation-rotateRoom-fadeOut { + -webkit-animation: cbp-animation-rotateRoom-fadeOut .5s both ease; + -moz-animation: cbp-animation-rotateRoom-fadeOut .5s both ease; + animation: cbp-animation-rotateRoom-fadeOut .5s both ease +} + +@-webkit-keyframes rotateRoom-out { + 99% { + opacity: .3 + } + 100% { + opacity: 0; + -webkit-transform: translateX(-100%) rotateY(90deg) + } +} + +@-moz-keyframes rotateRoom-out { + 99% { + opacity: .3 + } + 100% { + opacity: 0; + -moz-transform: translateX(-100%) rotateY(90deg) + } +} + +@keyframes rotateRoom-out { + 99% { + opacity: .3 + } + 100% { + opacity: 0; + transform: translateX(-100%) rotateY(90deg) + } +} + +@-webkit-keyframes rotateRoom-in { + from { + opacity: .3; + -webkit-transform: translateX(100%) rotateY(-90deg) + } +} + +@-moz-keyframes rotateRoom-in { + from { + opacity: .3; + -moz-transform: translateX(100%) rotateY(-90deg) + } +} + +@keyframes rotateRoom-in { + from { + opacity: .3; + transform: translateX(100%) rotateY(-90deg) + } +} + +@-webkit-keyframes cbp-animation-rotateRoom-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@-moz-keyframes cbp-animation-rotateRoom-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@keyframes cbp-animation-rotateRoom-fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +.cbp-animation-scaleSides { + overflow: visible +} + +.cbp-animation-scaleSides .cbp-item { + -webkit-transition: -webkit-transform .5s ease-in-out; + -moz-transition: -moz-transform .5s ease-in-out; + -o-transition: -o-transform .5s ease-in-out; + transition: transform .5s ease-in-out; + -webkit-perspective: 1000px; + perspective: 1000px +} + +.cbp-animation-scaleSides-out { + -webkit-animation: scaleSides-out .5s ease both; + -moz-animation: scaleSides-out .5s ease both; + animation: scaleSides-out .5s ease both +} + +.cbp-animation-scaleSides-in { + -webkit-animation: scaleUpCenter .5s ease .5s both; + -moz-animation: scaleUpCenter .5s ease .5s both; + animation: scaleUpCenter .5s ease .5s both +} + +@-webkit-keyframes scaleSides-out { + to { + opacity: 0; + -webkit-transform: scale(.6) + } +} + +@-moz-keyframes scaleSides-out { + to { + opacity: 0; + -moz-transform: scale(.6) + } +} + +@keyframes scaleSides-out { + to { + opacity: 0; + transform: scale(.6) + } +} + +@-webkit-keyframes scaleUpCenter { + from { + opacity: 0; + -webkit-transform: scale(.6) + } +} + +@-moz-keyframes scaleUpCenter { + from { + opacity: 0; + -moz-transform: scale(.6) + } +} + +@keyframes scaleUpCenter { + from { + opacity: 0; + transform: scale(.6) + } +} + +.cbp-animation-flipOut { + -webkit-transition: height .7s ease-in-out; + -moz-transition: height .7s ease-in-out; + -o-transition: height .7s ease-in-out; + transition: height .7s ease-in-out +} + +.cbp-animation-flipOut .cbp-item { + -webkit-transition: -webkit-transform .7s ease-in-out; + -moz-transition: -moz-transform .7s ease-in-out; + -o-transition: -o-transform .7s ease-in-out; + transition: transform .7s ease-in-out; + -webkit-perspective: 1000px; + perspective: 1000px +} + +.cbp-animation-flipOut-out { + -webkit-transform-origin: 50% 50%; + -webkit-animation: flipOut-out .35s ease-in both; + -moz-transform-origin: 50% 50%; + -moz-animation: flipOut-out .35s ease-in both; + transform-origin: 50% 50%; + animation: flipOut-out .35s ease-in both +} + +.cbp-animation-flipOut-in { + -webkit-transform-origin: 50% 50%; + -webkit-animation: flipOut-in .35s ease-out .35s both; + -moz-transform-origin: 50% 50%; + -moz-animation: flipOut-in .35s ease-out .35s both; + transform-origin: 50% 50%; + animation: flipOut-in .35s ease-out .35s both +} + +@-webkit-keyframes flipOut-out { + 100% { + -webkit-transform: translateZ(-1000px) rotateY(-90deg); + opacity: .2 + } +} + +@-moz-keyframes flipOut-out { + 100% { + -moz-transform: translateZ(-1000px) rotateY(-90deg); + opacity: .2 + } +} + +@keyframes flipOut-out { + 100% { + transform: translateZ(-1000px) rotateY(-90deg); + opacity: .2 + } +} + +@-webkit-keyframes flipOut-in { + 0% { + -webkit-transform: translateZ(-1000px) rotateY(90deg); + opacity: .2 + } +} + +@-moz-keyframes flipOut-in { + 0% { + -moz-transform: translateZ(-1000px) rotateY(90deg); + opacity: .2 + } +} + +@keyframes flipOut-in { + 0% { + transform: translateZ(-1000px) rotateY(90deg); + opacity: .2 + } +} + +.cbp-animation-flipBottom { + -webkit-transition: height .7s ease-in-out; + -moz-transition: height .7s ease-in-out; + -o-transition: height .7s ease-in-out; + transition: height .7s ease-in-out +} + +.cbp-animation-flipBottom .cbp-item { + -webkit-transition: -webkit-transform .7s ease-in-out; + -moz-transition: -moz-transform .7s ease-in-out; + -o-transition: -o-transform .7s ease-in-out; + transition: transform .7s ease-in-out; + -webkit-perspective: 1000px; + perspective: 1000px +} + +.cbp-animation-flipBottom-out { + -webkit-transform-origin: 50% 50%; + -webkit-animation: flipBottom-out .35s both 0s ease-in; + -moz-transform-origin: 50% 50%; + -moz-animation: flipBottom-out .35s both 0s ease-in; + transform-origin: 50% 50%; + animation: flipBottom-out .35s both 0s ease-in +} + +.cbp-animation-flipBottom-in { + -webkit-transform-origin: 50% 50%; + -webkit-animation: flipBottom-in .35s ease-out .35s both; + -moz-transform-origin: 50% 50%; + -moz-animation: flipBottom-in .35s ease-out .35s both; + transform-origin: 50% 50%; + animation: flipBottom-in .35s ease-out .35s both +} + +@-webkit-keyframes flipBottom-out { + to { + -webkit-transform: translateZ(-1000px) rotateX(-90deg); + opacity: .2 + } +} + +@-moz-keyframes flipBottom-out { + to { + -moz-transform: translateZ(-1000px) rotateX(-90deg); + opacity: .2 + } +} + +@keyframes flipBottom-out { + to { + transform: translateZ(-1000px) rotateX(-90deg); + opacity: .2 + } +} + +@-webkit-keyframes flipBottom-in { + from { + -webkit-transform: translateZ(-1000px) rotateX(90deg); + opacity: .2 + } +} + +@-moz-keyframes flipBottom-in { + from { + -moz-transform: translateZ(-1000px) rotateX(90deg); + opacity: .2 + } +} + +@keyframes flipBottom-in { + from { + transform: translateZ(-1000px) rotateX(90deg); + opacity: .2 + } +} + +.cbp-animation-fadeOutTop { + overflow: visible; + -webkit-transition: height .2s ease-in-out; + -moz-transition: height .2s ease-in-out; + -o-transition: height .2s ease-in-out; + transition: height .2s ease-in-out +} + +.cbp-animation-fadeOutTop .cbp-wrapper { + -webkit-transition: opacity .3s ease-in-out, top .3s ease-in-out; + -moz-transition: opacity .3s ease-in-out, top .3s ease-in-out; + -o-transition: opacity .3s ease-in-out, top .3s ease-in-out; + transition: opacity .3s ease-in-out, top .3s ease-in-out +} + +.cbp-animation-fadeOutTop .cbp-item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -moz-transition: -moz-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out +} + +.cbp-animation-sequentially { + overflow: visible; + -webkit-transition: height .2s ease-in-out; + -moz-transition: height .2s ease-in-out; + -o-transition: height .2s ease-in-out; + transition: height .2s ease-in-out +} + +.cbp-animation-sequentially .cbp-item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -moz-transition: -moz-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out +} + +.cbp-animation-sequentially.cbp-no-transition .cbp-item { + -webkit-transition: opacity .5s ease, top .5s ease!important; + -moz-transition: opacity .5s ease, top .5s ease!important; + -o-transition: opacity .5s ease, top .5s ease!important; + transition: opacity .5s ease, top .5s ease!important +} + +.cbp-popup-ie8bg { + position: absolute; + width: 100%; + height: 100%; + min-height: 100%; + top: 0; + left: 0; + z-index: -1; + background: #000; + -ms-filter: "alpha(Opacity=70)" +} + +.cbp-popup-wrap { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + height: 100%; + text-align: center; + position: fixed; + width: 100%; + left: 0; + top: 0; + display: none; + overflow: auto; + z-index: 9999; + padding: 0 10px +} + +.cbp-popup-lightbox { + background: rgba(0, 0, 0, .8) +} + +.cbp-popup-singlePage { + background: #fff; + padding: 0 +} + +.cbp-popup-singlePage .cbp-popup-ie8bg { + background: #fff; + -ms-filter: "alpha(Opacity=100)" +} + +.cbp-popup-wrap:before { + content: ''; + display: inline-block; + height: 100%; + vertical-align: middle; + margin-right: -.25em +} + +.cbp-popup-content { + position: relative; + display: inline-block; + vertical-align: middle; + text-align: left; + max-width: 100% +} + +.cbp-popup-singlePage .cbp-popup-content { + margin-top: 140px; + max-width: 1024px; + vertical-align: top; + width: 96% +} + +.cbp-popup-lightbox-figure { + position: relative +} + +.cbp-popup-lightbox-bottom { + left: 0; + position: absolute; + top: 100%; + width: 100%; + margin-top: 3px +} + +.cbp-popup-lightbox-title { + padding-right: 70px; + font: 400 12px/18px sans-serif; + color: #eee +} + +.cbp-popup-lightbox-counter { + position: absolute; + top: 0; + right: 0; + font: 400 12px/18px sans-serif; + color: #eee +} + +.cbp-popup-lightbox-img { + width: auto; + max-width: 100%; + height: auto; + display: block; + margin: 40px 0; + box-shadow: 0 0 8px rgba(0, 0, 0, .6) +} + +.cbp-popup-lightbox-img[data-action] { + cursor: pointer +} + +.cbp-popup-lightbox-isIframe .cbp-popup-content { + width: 50% +} + +.cbp-popup-lightbox-isIframe .cbp-lightbox-bottom { + left: 0; + position: absolute; + top: 100%; + width: 100%; + margin-top: 3px +} + +.cbp-popup-lightbox-iframe { + position: relative; + height: 0; + padding-bottom: 56.25%; + background: #000 +} + +.cbp-popup-lightbox-iframe iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + box-shadow: 0 0 8px rgba(0, 0, 0, .6) +} + +.cbp-popup-singlePage { + overflow-x: hidden +} + +.cbp-popup-singlePage .cbp-popup-navigation-wrap { + position: absolute; + top: 0; + left: 0; + width: 100%; + z-index: 2; + height: 104px; + background-color: #34425C +} + +.cbp-popup-singlePage .cbp-popup-navigation { + position: absolute; + top: 0; + left: 0; + width: 100% +} + +.cbp-popup-singlePage-sticky .cbp-popup-navigation, +.cbp-popup-singlePage-sticky .cbp-popup-navigation-wrap { + position: fixed +} + +.cbp-popup-singlePage-counter { + color: #bbc0df; + font: italic 14px/104px 'Open Sans', sans-serif; + position: absolute; + right: 50px; + top: 0 +} + +.cbp-popup-close, +.cbp-popup-next, +.cbp-popup-prev { + padding: 0; + border: medium none; + position: absolute; + cursor: pointer +} + +.cbp-popup-lightbox .cbp-popup-close, +.cbp-popup-lightbox .cbp-popup-next, +.cbp-popup-lightbox .cbp-popup-prev { + visibility: hidden +} + +.cbp-popup-ready.cbp-popup-lightbox .cbp-popup-close, +.cbp-popup-ready.cbp-popup-lightbox .cbp-popup-next, +.cbp-popup-ready.cbp-popup-lightbox .cbp-popup-prev { + visibility: visible +} + +.cbp-popup-lightbox .cbp-popup-prev { + background: url(../images/cbp-sprite.png) no-repeat scroll -2px -2px transparent; + width: 44px; + height: 44px; + top: 0; + bottom: 0; + left: 20px; + margin: auto +} + +.cbp-popup-lightbox .cbp-popup-prev:hover { + background-position: -2px -48px +} + +.cbp-popup-singlePage .cbp-popup-prev { + background: url(../images/cbp-sprite.png) no-repeat scroll -2px -94px transparent; + width: 44px; + height: 44px; + top: 30px; + left: 0; + margin: auto; + right: 108px +} + +.cbp-popup-singlePage .cbp-popup-prev:hover { + background-position: -2px -140px +} + +.cbp-popup-lightbox .cbp-popup-next { + background: url(../images/cbp-sprite.png) no-repeat scroll -48px -2px transparent; + width: 44px; + height: 44px; + top: 0; + bottom: 0; + right: 20px; + margin: auto +} + +.cbp-popup-lightbox .cbp-popup-next:hover { + background-position: -48px -48px +} + +.cbp-popup-singlePage .cbp-popup-next { + background: url(../images/cbp-sprite.png) no-repeat scroll -48px -94px transparent; + width: 44px; + height: 44px; + top: 30px; + right: 0; + margin: auto; + left: 108px +} + +.cbp-popup-singlePage .cbp-popup-next:hover { + background-position: -48px -140px +} + +.cbp-popup-lightbox .cbp-popup-close { + background: url(../images/cbp-sprite.png) no-repeat scroll -94px -2px transparent; + height: 40px; + width: 40px; + right: 20px; + top: 20px +} + +.cbp-popup-lightbox .cbp-popup-close:hover { + background-position: -94px -48px +} + +.cbp-popup-singlePage .cbp-popup-close { + background: url(../images/cbp-sprite.png) no-repeat scroll -94px -94px transparent; + height: 44px; + width: 44px; + margin: auto; + right: 0; + top: 30px; + left: 0 +} + +.cbp-popup-singlePage .cbp-popup-close:hover { + background-position: -94px -140px +} + +.cbp-popup-loadingBox { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + z-index: 2; + background: url(../images/cbp-loading-popup.gif) no-repeat scroll center center #0D0D0D; + border: 1px solid rgba(79, 80, 79, .3); + border-radius: 3px; + -ms-filter: "alpha(Opacity=71)"; + opacity: .71; + width: 50px; + height: 50px +} + +.cbp-popup-ready .cbp-popup-loadingBox { + visibility: hidden +} + +.cbp-popup-loading .cbp-popup-loadingBox { + visibility: visible +} + +.cbp-popup-singlePage { + left: 100%; + -webkit-transition: left .6s ease-in-out; + -moz-transition: left .6s ease-in-out; + -o-transition: left .6s ease-in-out; + transition: left .6s ease-in-out +} + +.cbp-popup-singlePage-open { + left: 0 +} + +.cbp-popup-singlePage .cbp-l-project-title { + color: #454444; + font: 700 42px/60px 'Open sans', sans-serif; + letter-spacing: 2px; + margin-bottom: 10px; + text-align: center; + text-transform: uppercase +} + +.cbp-popup-singlePage .cbp-l-project-subtitle { + color: #787878; + font: 300 14px/21px 'Open sans', sans-serif; + margin: 0 auto 50px; + max-width: 500px; + text-align: center +} + +.cbp-popup-singlePage .cbp-popup-content .cbp-l-project-img { + display: block; + margin: 0 auto; + max-width: 100% +} + +.cbp-popup-singlePage .cbp-l-project-container { + overflow: hidden; + margin: 0 auto +} + +.cbp-popup-singlePage .cbp-l-project-desc { + float: left; + width: 64%; + margin: 30px 0 100px +} + +.cbp-popup-singlePage .cbp-l-project-details { + float: right; + width: 36%; + margin: 30px 0 100px +} + +.cbp-popup-singlePage .cbp-l-project-desc-title { + margin-right: 20px; + border-bottom: 1px solid #cdcdcd; + margin-bottom: 22px; + color: #444 +} + +.cbp-popup-singlePage .cbp-l-project-desc-title span, +.cbp-popup-singlePage .cbp-l-project-details-title span { + border-bottom: 1px solid #747474; + display: inline-block; + margin: 0 0 -1px 0; + font: 400 16px/36px "Open Sans", sans-serif; + padding: 0 5px 0 0 +} + +.cbp-popup-singlePage .cbp-l-project-desc-text { + margin-right: 20px; + font: 400 13px/20px "Open Sans", sans-serif; + color: #555 +} + +.cbp-popup-singlePage .cbp-l-project-details-title { + border-bottom: 1px solid #cdcdcd; + margin-bottom: 19px; + margin-left: 20px; + color: #444 +} + +.cbp-popup-singlePage .cbp-l-project-details-list { + margin-left: 20px +} + +.cbp-popup-singlePage .cbp-l-project-details-list li { + border-bottom: 1px dotted #DFDFDF; + padding: inherit; + color: #666; + font: 400 12px/30px "Open Sans", sans-serif +} + +.cbp-popup-singlePage .cbp-l-project-details-list strong { + display: inline-block; + color: #696969; + font: 600 12px "Open Sans", sans-serif; + min-width: 100px +} + +.cbp-popup-singlePage .cbp-l-project-details-visit { + color: #FFF; + float: right; + text-decoration: none; + font: 400 11px/18px "Open Sans", sans-serif; + margin-top: 12px; + text-transform: uppercase; + background-color: #34425C; + padding: 6px 12px +} + +.cbp-popup-singlePage .cbp-l-project-details-visit:hover { + color: #AFBBDB +} + +.cbp-popup-singlePage .cbp-l-member-img { + float: left; + margin-right: 20px; + margin-top: 20px; + border: 1px solid #e2e2e2 +} + +.cbp-popup-singlePage .cbp-l-member-img img { + display: block +} + +.cbp-popup-singlePage .cbp-l-member-info { + margin-top: 20px +} + +.cbp-popup-singlePage .cbp-l-member-name { + font: 700 16px/12px "Open Sans", sans-serif; + margin-bottom: 6px +} + +.cbp-popup-singlePage .cbp-l-member-position { + font: 400 13px "Open Sans", sans-serif +} + +.cbp-popup-singlePage .cbp-l-member-desc { + font: 400 12px "Open Sans", sans-serif; + margin-top: 15px +} + +.cbp-popup-singlePageInline { + width: 100%; + height: 0; + position: absolute; + top: 0; + left: 0; + overflow: hidden +} + +.cbp-popup-singlePageInline .cbp-popup-navigation { + position: absolute; + top: 0; + right: 0; + z-index: 2; + width: 40px; + height: 40px +} + +.cbp-popup-singlePageInline .cbp-popup-close { + background: url(../images/cbp-sprite.png) no-repeat scroll -94px -2px transparent; + height: 40px; + width: 40px; + right: 20px; + top: 30px +} + +.cbp-popup-singlePageInline .cbp-popup-close:hover { + opacity: .7 +} + +.cbp-popup-singlePageInline .cbp-popup-content { + width: 100%; + min-height: 200px +} + +.cbp.cbp-popup-isOpening, +.cbp.cbp-popup-isOpening .cbp-popup-singlePageInline { + -webkit-transition: height .4s ease 0s!important; + -moz-transition: height .4s ease 0s!important; + -o-transition: height .4s ease 0s!important; + transition: height .4s ease 0s!important +} + +.cbp.cbp-popup-isOpening .cbp-item { + -webkit-transition: -webkit-transform .4s ease 0s!important; + -moz-transition: -moz-transform .4s ease 0s!important; + -o-transition: -o-transform .4s ease 0s!important; + transition: transform .4s ease 0s!important +} + +.cbp-singlePageInline-active { + opacity: .6!important +} + +.cbp-popup-singlePageInline .cbp-popup-loadingBox { + visibility: hidden; + background: url(../images/cbp-loading.gif) no-repeat scroll center center transparent; + border: medium none; + border-radius: 0; + -ms-filter: "alpha(Opacity=100)"; + opacity: 1 +} + +.cbp-popup-singlePageInline.cbp-popup-loading .cbp-popup-loadingBox { + visibility: visible +} + +.cbp-popup-singlePageInline.cbp-popup-loading .cbp-popup-content, +.cbp-popup-singlePageInline.cbp-popup-loading .cbp-popup-navigation { + visibility: hidden +} + +.cbp-l-inline { + margin-bottom: 20px; + overflow: hidden; + margin-top: 10px; + background: #FAFAFA; + padding: 30px +} + +.cbp-l-inline-left { + float: left; + width: 44% +} + +.cbp-l-project-img { + max-width: 100% +} + +.cbp-l-inline-right { + float: right; + width: 56%; + padding-left: inherit +} + +.cbp-l-inline-title { + font: 400 28px/28px "Open Sans", sans-serif; + color: #666 +} + +.cbp-l-inline-subtitle { + font: 400 13px "Open Sans", sans-serif; + color: #666; + margin: 3px 0 25px +} + +.cbp-l-inline-desc { + font: 400 13px/21px "Open Sans", sans-serif; + color: #888 +} + +.cbp-l-inline-view { + font: 400 13px "Open Sans", sans-serif; + color: #9C9C9C; + text-decoration: none; + margin: 22px 0 0; + display: inline-block; + padding: 8px 18px 7px; + border: 2px solid #ccc +} + +.cbp-l-inline-view:hover { + color: #757575; + border-color: #DFDFDF +} + +.cbp-l-filters-button { + margin: 0 auto 30px; + text-align: left +} + +.cbp-l-filters-button .cbp-filter-item { + background-color: #FFF; + border: 2px solid #ECECEC; + border-radius: 2px; + color: #888; + cursor: pointer; + font: 400 12px/29px "Open Sans", sans-serif; + margin: 10px 10px 0 0; + overflow: visible; + padding: 0 17px; + position: relative; + -webkit-transition: all .3s ease-in-out; + -moz-transition: all .3s ease-in-out; + -o-transition: all .3s ease-in-out; + transition: all .3s ease-in-out +} + +.cbp-l-filters-button .cbp-filter-item:hover { + color: #5d5d5d +} + +.cbp-l-filters-button .cbp-filter-item-active { + background-color: #5d5d5d; + color: #fff!important; + border-color: #5d5d5d +} + +.cbp-l-filters-button .cbp-filter-counter { + background-color: #3288C4; + border-radius: 3px; + color: #fff; + font: 400 11px/18px "Open Sans", sans-serif; + margin: 0 auto; + padding: 4px 0; + text-align: center; + width: 34px; + position: absolute; + bottom: 0; + left: 0; + right: 0; + -ms-filter: "alpha(Opacity=0)"; + opacity: 0; + -webkit-transition: opacity .25s ease, bottom .25s ease; + -moz-transition: opacity .25s ease, bottom .25s ease; + -o-transition: opacity .25s ease, bottom .25s ease; + transition: opacity .25s ease, bottom .25s ease +} + +.cbp-l-filters-button .cbp-filter-counter:before { + content: ""; + position: absolute; + bottom: -4px; + left: 0; + right: 0; + margin: 0 auto; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #3288C4; + visibility: hidden +} + +.cbp-l-filters-button .cbp-filter-item:hover .cbp-filter-counter:before { + visibility: visible +} + +.cbp-l-filters-button .cbp-filter-item:hover .cbp-filter-counter { + bottom: 44px; + -ms-filter: "alpha(Opacity=100)"; + opacity: 1 +} + +.cbp-l-filters-dropdown { + margin: 0 auto; + height: 70px; + position: relative; + z-index: 10 +} + +.cbp-l-filters-dropdownWrap { + width: 200px; + position: absolute; + right: 0; + background: #3288C4 +} + +.cbp-l-filters-dropdownHeader { + font: 12px/38px "Open Sans", sans-serif; + padding: 0 17px; + color: #FFF; + cursor: pointer; + position: relative +} + +.cbp-l-filters-dropdownHeader:after { + border-color: #FFF rgba(0, 0, 0, 0); + border-style: solid; + border-width: 5px 5px 0; + content: ""; + height: 0; + position: absolute; + right: 16px; + top: 50%; + width: 0; + margin-top: -1px +} + +.cbp-l-filters-dropdownWrap:hover .cbp-l-filters-dropdownHeader:after { + border-width: 0 5px 5px +} + +.cbp-l-filters-dropdownList { + display: none; + list-style: none outside none; + margin: 0; + padding: 0 +} + +.cbp-l-filters-dropdownWrap:hover .cbp-l-filters-dropdownList { + display: block +} + +.cbp-l-filters-dropdownList .cbp-filter-item { + background: 0 0; + color: #9FBCE7; + width: 100%; + text-align: left; + font: 12px/40px "Open Sans", sans-serif; + margin: 0; + padding: 0 17px; + cursor: pointer; + border: 0; + border-top: 1px solid #5592C2 +} + +.cbp-l-filters-dropdownList .cbp-filter-item-active, +.cbp-l-filters-dropdownList .cbp-filter-item:hover { + color: #e6e6e6 +} + +.cbp-l-filters-alignLeft { + margin: 0 auto 40px; + text-align: left +} + +.cbp-l-filters-alignLeft .cbp-filter-item { + background-color: #fff; + border: 1px solid #cdcdcd; + cursor: pointer; + font: 400 12px/30px "Open Sans", sans-serif; + padding: 0 13px; + position: relative; + overflow: visible; + margin: 10px 8px 0 0; + -webkit-transition: all .3s ease-in-out; + -moz-transition: all .3s ease-in-out; + -o-transition: all .3s ease-in-out; + transition: all .3s ease-in-out; + color: #888 +} + +.cbp-l-filters-alignLeft .cbp-filter-item:hover { + color: #3c3c3c +} + +.cbp-l-filters-alignLeft .cbp-filter-item-active { + background-color: #3288C4; + color: #fff!important; + opacity: 1; + border: 1px solid #3288C4 +} + +.cbp-l-filters-alignLeft .cbp-filter-counter { + display: inline +} + +.cbp-l-filters-alignCenter { + margin: 0 auto 50px; + text-align: center; + font-size: 12px; + color: #cacaca +} + +.cbp-l-filters-alignCenter .cbp-filter-item { + color: #5A5A5A; + cursor: pointer; + font: 400 13px "Open Sans", sans-serif; + padding: 0 12px; + transition: all .3s ease-in-out; + position: relative; + overflow: visible; + margin: 10px 0 0; + border: medium none; + background-color: transparent +} + +.cbp-l-filters-alignCenter .cbp-filter-item:hover { + color: #3288C4 +} + +.cbp-l-filters-alignCenter .cbp-filter-item-active { + color: #3288C4!important +} + +.cbp-l-filters-alignCenter .cbp-filter-counter { + background: none repeat scroll 0 0 #3288C4; + border-radius: 3px; + color: #FFF; + font-size: 11px; + margin: 0 auto; + padding: 4px 0; + text-align: center; + width: 34px; + position: absolute; + bottom: 0; + left: 0; + right: 0; + -ms-filter: "alpha(Opacity=0)"; + opacity: 0; + -webkit-transition: all .25s ease; + -moz-transition: all .25s ease; + -o-transition: all .25s ease; + transition: all .25s ease +} + +.cbp-l-filters-alignCenter .cbp-filter-counter:before { + content: ""; + position: absolute; + bottom: -4px; + left: 0; + right: 0; + margin: 0 auto; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #3288C4; + visibility: hidden +} + +.cbp-l-filters-alignCenter button:hover .cbp-filter-counter:before { + visibility: visible +} + +.cbp-l-filters-alignCenter button:hover .cbp-filter-counter { + bottom: 30px; + -ms-filter: "alpha(Opacity=100)"; + opacity: 1 +} + +.cbp-l-filters-alignRight { + margin: 0 auto 40px; + text-align: right +} + +.cbp-l-filters-alignRight .cbp-filter-item { + background-color: transparent; + color: #8B8B8B; + cursor: pointer; + font: 400 11px "Open Sans", sans-serif; + padding: 7px 12px; + position: relative; + overflow: visible; + margin: 10px 0 0 5px; + border: 1px solid #E4E2E2; + text-transform: uppercase; + -webkit-transition: all .3s ease-in-out; + -moz-transition: all .3s ease-in-out; + -o-transition: all .3s ease-in-out; + transition: all .3s ease-in-out +} + +.cbp-l-filters-alignRight .cbp-filter-item:hover { + color: #2B3444 +} + +.cbp-l-filters-alignRight .cbp-filter-item-active { + opacity: 1; + color: #FFF!important; + background-color: #3C3C3C; + border-color: #3C3C3C +} + +.cbp-l-filters-alignRight .cbp-filter-counter { + background: none repeat scroll 0 0 #3288C4; + border-radius: 3px; + color: #fff; + font-size: 11px; + margin: 0 auto; + padding: 4px 0; + text-align: center; + width: 34px; + position: absolute; + bottom: 0; + left: 0; + right: 0; + -ms-filter: "alpha(Opacity=0)"; + opacity: 0; + -webkit-transition: opacity .25s ease, bottom .25s ease; + -moz-transition: opacity .25s ease, bottom .25s ease; + -o-transition: opacity .25s ease, bottom .25s ease; + transition: opacity .25s ease, bottom .25s ease +} + +.cbp-l-filters-alignRight .cbp-filter-counter:before { + content: ""; + position: absolute; + bottom: -4px; + left: 0; + right: 0; + margin: 0 auto; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #3288C4; + visibility: hidden +} + +.cbp-l-filters-alignRight .cbp-filter-item:hover .cbp-filter-counter:before { + visibility: visible +} + +.cbp-l-filters-alignRight .cbp-filter-item:hover .cbp-filter-counter { + bottom: 44px; + -ms-filter: "alpha(Opacity=100)"; + opacity: 1 +} + +.cbp-l-filters-list { + margin: 0 auto 40px; + height: 46px +} + +.cbp-l-filters-list .cbp-filter-item { + background-color: transparent; + color: #585252; + cursor: pointer; + font: 400 12px/35px "Open Sans", sans-serif; + padding: 0 18px; + position: relative; + overflow: visible; + margin: 10px 0 0; + float: left; + border-width: 1px 0 1px 1px; + border-style: solid; + border-color: #3288C4; + -webkit-transition: all .3s ease-in-out; + -moz-transition: all .3s ease-in-out; + -o-transition: all .3s ease-in-out; + transition: all .3s ease-in-out +} + +.cbp-l-filters-list .cbp-filter-item:hover { + color: #000 +} + +.cbp-l-filters-list .cbp-filter-item-active { + opacity: 1; + color: #FFF!important; + background-color: #3288C4 +} + +.cbp-l-filters-list-first { + border-radius: 6px 0 0 6px +} + +.cbp-l-filters-list-last { + border-radius: 0 6px 6px 0; + border-right-width: 1px!important +} + +.cbp-l-filters-list .cbp-filter-counter { + display: inline +} + +.cbp-l-grid-projects { + visibility: hidden +} + +.cbp-l-grid-projects .cbp-item { + width: 270px; + height: 250px +} + +.cbp-l-grid-projects .cbp-caption { + height: 68%; + margin-bottom: 20px +} + +.cbp-l-grid-projects-title { + font: 700 14px sans-serif; + color: #474747 +} + +.cbp-l-grid-projects-desc { + font: 400 12px sans-serif; + margin-top: 6px; + color: #888 +} + +.cbp-l-grid-projects-inlineFilters { + cursor: pointer +} + +.cbp-l-grid-projects-inlineFilters:hover { + text-decoration: underline +} + +.cbp-l-grid-projects.cbp-caption-overlayBottomPush .cbp-caption-activeWrap { + bottom: -50px; + height: 50px +} + +.cbp-l-grid-projects.cbp-caption-overlayBottomPush .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 50px +} + +.cbp-l-grid-projects.cbp-caption-overlayBottomPush.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap, +.cbp-l-grid-projects.cbp-caption-overlayBottomPush.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap { + bottom: -50px +} + +.cbp-l-grid-projects.cbp-caption-overlayBottomAlong .cbp-caption-activeWrap { + bottom: -50px; + height: 50px +} + +.cbp-l-grid-projects.cbp-caption-overlayBottomAlong .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 25px +} + +.cbp-l-grid-projects.cbp-caption-overlayBottomAlong.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap, +.cbp-l-grid-projects.cbp-caption-overlayBottomAlong.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap { + bottom: -50px +} + +.cbp-l-grid-projects.cbp-caption-overlayBottom .cbp-caption-activeWrap { + bottom: -50px; + height: 50px +} + +.cbp-l-grid-projects.cbp-caption-overlayBottom.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap { + bottom: -50px +} + +.cbp-l-grid-projects.cbp-caption-overlayBottomReveal .cbp-caption-activeWrap { + height: 50px +} + +.cbp-l-grid-projects.cbp-caption-overlayBottomReveal .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 50px +} + +.cbp-l-grid-gallery { + visibility: hidden +} + +.cbp-l-grid-gallery .cbp-item { + width: 320px; + height: 236px +} + +.cbp-l-grid-team { + visibility: hidden +} + +.cbp-l-grid-team .cbp-item { + width: 290px; + height: 270px +} + +.cbp-l-grid-team .cbp-caption { + height: 73%; + margin-bottom: 20px; + border: 1px solid #E7E7E7 +} + +.cbp-l-grid-team-name { + font: 400 17px "Open Sans", sans-serif; + color: #456297; + text-decoration: none; + display: block; + text-align: center; + margin-bottom: 3px +} + +.cbp-l-grid-team-name:hover { + color: #34425C +} + +.cbp-l-grid-team-position { + font: italic 400 13px "Open Sans", sans-serif; + color: #888; + text-align: center +} + +@media only screen and (max-width:799px) { + .cbp-l-grid-team-desc { + font: 400 11px/14px "Open Sans", sans-serif; + margin-top: 5px + } +} + +.cbp-l-grid-team.cbp-caption-overlayBottomPush .cbp-caption-activeWrap { + bottom: -44px; + height: 44px +} + +.cbp-l-grid-team.cbp-caption-overlayBottomPush .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 44px +} + +.cbp-l-grid-team.cbp-caption-overlayBottomPush.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap, +.cbp-l-grid-team.cbp-caption-overlayBottomPush.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap { + bottom: -44px +} + +.cbp-l-grid-team.cbp-caption-overlayBottomAlong .cbp-caption-activeWrap { + bottom: -44px; + height: 44px +} + +.cbp-l-grid-team.cbp-caption-overlayBottomAlong .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 22px +} + +.cbp-l-grid-team.cbp-caption-overlayBottomAlong.cbp-ie8 .cbp-caption:hover .cbp-caption-activeWrap, +.cbp-l-grid-team.cbp-caption-overlayBottomAlong.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap { + bottom: -44px +} + +.cbp-l-grid-team.cbp-caption-overlayBottom .cbp-caption-activeWrap { + bottom: -44px; + height: 44px +} + +.cbp-l-grid-team.cbp-caption-overlayBottom.cbp-ie9 .cbp-caption:hover .cbp-caption-activeWrap { + bottom: -44px +} + +.cbp-l-grid-team.cbp-caption-overlayBottomReveal .cbp-caption-activeWrap { + height: 44px +} + +.cbp-l-grid-team.cbp-caption-overlayBottomReveal .cbp-caption:hover .cbp-caption-defaultWrap { + bottom: 44px +} + +.cbp-l-grid-fullScreen { + visibility: hidden +} + +.cbp-l-grid-fullScreen .cbp-item { + width: 350px; + height: 263px +} + +.cbp-l-grid-masonry { + visibility: hidden +} + +.cbp-l-grid-masonry .cbp-item { + width: 277px +} + +.cbp-l-grid-masonry .cbp-l-grid-masonry-height1 { + height: 267px +} + +.cbp-l-grid-masonry .cbp-l-grid-masonry-height2 { + height: 415px +} + +.cbp-l-grid-blog { + visibility: hidden +} + +.cbp-l-grid-blog .cbp-item { + width: 313px; + height: 330px +} + +.cbp-l-grid-blog .cbp-caption { + height: 58%; + margin-bottom: 20px +} + +.cbp-l-grid-blog-title { + font: 400 18px/28px "Open Sans", sans-serif; + color: #444; + display: block; + clear: both; + text-decoration: none +} + +.cbp-l-grid-blog-title:hover { + color: #787878 +} + +.cbp-l-grid-blog-date { + font: 400 12px/18px "Open Sans", sans-serif; + float: left; + color: #787878 +} + +.cbp-l-grid-blog-comments { + font: 400 12px/18px "Open Sans", sans-serif; + float: left; + color: #3C6FBB; + text-decoration: none +} + +.cbp-l-grid-blog-comments:hover { + opacity: .8 +} + +.cbp-l-grid-blog-desc { + font: 400 13px/19px "Open Sans", sans-serif; + clear: both; + color: #9B9B9B; + padding-top: 15px +} + +.cbp-l-grid-blog-split { + float: left; + margin: 0 8px; + font: 13px/16px "Open Sans", sans-serif; + color: #787878 +} + +.cbp-l-loadMore-button { + text-align: center; + margin-top: 30px +} + +.cbp-l-loadMore-button-link { + border: 2px solid #DEDEDE; + border-radius: 2px; + color: #7E7B7B; + display: inline-block; + font: 11px/34px "Open Sans", sans-serif; + min-width: 120px; + text-decoration: none +} + +.cbp-l-loadMore-button-link:hover { + color: #B0B0B0 +} + +.cbp-l-loadMore-button-stop { + cursor: default; + color: #B0B0B0 +} + +.cbp-l-loadMore-text { + text-align: center; + margin-top: 30px +} + +.cbp-l-loadMore-text-link { + font: 400 16px "Open Sans", sans-serif; + color: #5D5D5D; + text-decoration: none; + cursor: default +} + +.cbp-l-loadMore-text-stop { + color: #5D5D5D +} + +@charset "UTF-8"; + +/*! Animate.css - http://daneden.me/animate Licensed under the MIT license - http://opensource.org/licenses/MIT Copyright (c) 2015 Daniel Eden -*/.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.animated.bounceIn,.animated.bounceOut,.animated.flipOutX,.animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{0%,100%,20%,53%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{0%,100%,20%,53%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes pulse{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes rubberBand{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{0%,100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{0%,100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes tada{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}100%{-webkit-transform:none;transform:none}}@keyframes wobble{0%{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}100%{-webkit-transform:none;transform:none}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes bounceIn{0%,100%,20%,40%,60%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{0%,100%,20%,40%,60%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInDown{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInRight{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;transform:none;opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{0%{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{0%{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;transform:none}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp} +*/ + +.animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both +} + +.animated.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite +} + +.animated.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s +} + +.animated.bounceIn, +.animated.bounceOut, +.animated.flipOutX, +.animated.flipOutY { + -webkit-animation-duration: .75s; + animation-duration: .75s +} + +@-webkit-keyframes bounce { + 0%, + 100%, + 20%, + 53%, + 80% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } + 40%, + 43% { + -webkit-transition-timing-function: cubic-bezier(0.755, .050, .855, .060); + transition-timing-function: cubic-bezier(0.755, .050, .855, .060); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0) + } + 70% { + -webkit-transition-timing-function: cubic-bezier(0.755, .050, .855, .060); + transition-timing-function: cubic-bezier(0.755, .050, .855, .060); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0) + } + 90% { + -webkit-transform: translate3d(0, -4px, 0); + transform: translate3d(0, -4px, 0) + } +} + +@keyframes bounce { + 0%, + 100%, + 20%, + 53%, + 80% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } + 40%, + 43% { + -webkit-transition-timing-function: cubic-bezier(0.755, .050, .855, .060); + transition-timing-function: cubic-bezier(0.755, .050, .855, .060); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0) + } + 70% { + -webkit-transition-timing-function: cubic-bezier(0.755, .050, .855, .060); + transition-timing-function: cubic-bezier(0.755, .050, .855, .060); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0) + } + 90% { + -webkit-transform: translate3d(0, -4px, 0); + transform: translate3d(0, -4px, 0) + } +} + +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce; + -webkit-transform-origin: center bottom; + transform-origin: center bottom +} + +@-webkit-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1 + } + 25%, + 75% { + opacity: 0 + } +} + +@keyframes flash { + 0%, + 100%, + 50% { + opacity: 1 + } + 25%, + 75% { + opacity: 0 + } +} + +.flash { + -webkit-animation-name: flash; + animation-name: flash +} + +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) + } + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05) + } + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) + } +} + +@keyframes pulse { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) + } + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05) + } + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) + } +} + +.pulse { + -webkit-animation-name: pulse; + animation-name: pulse +} + +@-webkit-keyframes rubberBand { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) + } + 30% { + -webkit-transform: scale3d(1.25, .75, 1); + transform: scale3d(1.25, .75, 1) + } + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1) + } + 50% { + -webkit-transform: scale3d(1.15, .85, 1); + transform: scale3d(1.15, .85, 1) + } + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1) + } + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1) + } + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) + } +} + +@keyframes rubberBand { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) + } + 30% { + -webkit-transform: scale3d(1.25, .75, 1); + transform: scale3d(1.25, .75, 1) + } + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1) + } + 50% { + -webkit-transform: scale3d(1.15, .85, 1); + transform: scale3d(1.15, .85, 1) + } + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1) + } + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1) + } + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) + } +} + +.rubberBand { + -webkit-animation-name: rubberBand; + animation-name: rubberBand +} + +@-webkit-keyframes shake { + 0%, + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } + 10%, + 30%, + 50%, + 70%, + 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0) + } + 20%, + 40%, + 60%, + 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0) + } +} + +@keyframes shake { + 0%, + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } + 10%, + 30%, + 50%, + 70%, + 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0) + } + 20%, + 40%, + 60%, + 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0) + } +} + +.shake { + -webkit-animation-name: shake; + animation-name: shake +} + +@-webkit-keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg) + } + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg) + } + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg) + } + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg) + } + 100% { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg) + } +} + +@keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg) + } + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg) + } + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg) + } + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg) + } + 100% { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg) + } +} + +.swing { + -webkit-transform-origin: top center; + transform-origin: top center; + -webkit-animation-name: swing; + animation-name: swing +} + +@-webkit-keyframes tada { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) + } + 10%, + 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg) + } + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg) + } + 40%, + 60%, + 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg) + } + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) + } +} + +@keyframes tada { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) + } + 10%, + 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg) + } + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg) + } + 40%, + 60%, + 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg) + } + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) + } +} + +.tada { + -webkit-animation-name: tada; + animation-name: tada +} + +@-webkit-keyframes wobble { + 0% { + -webkit-transform: none; + transform: none + } + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg) + } + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg) + } + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg) + } + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg) + } + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg) + } + 100% { + -webkit-transform: none; + transform: none + } +} + +@keyframes wobble { + 0% { + -webkit-transform: none; + transform: none + } + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg) + } + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg) + } + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg) + } + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg) + } + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg) + } + 100% { + -webkit-transform: none; + transform: none + } +} + +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble +} + +@-webkit-keyframes bounceIn { + 0%, + 100%, + 20%, + 40%, + 60%, + 80% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) + } + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3) + } + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1) + } + 40% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9) + } + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03) + } + 80% { + -webkit-transform: scale3d(.97, .97, .97); + transform: scale3d(.97, .97, .97) + } + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) + } +} + +@keyframes bounceIn { + 0%, + 100%, + 20%, + 40%, + 60%, + 80% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) + } + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3) + } + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1) + } + 40% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9) + } + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03) + } + 80% { + -webkit-transform: scale3d(.97, .97, .97); + transform: scale3d(.97, .97, .97) + } + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) + } +} + +.bounceIn { + -webkit-animation-name: bounceIn; + animation-name: bounceIn +} + +@-webkit-keyframes bounceInDown { + 0%, + 100%, + 60%, + 75%, + 90% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) + } + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0) + } + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0) + } + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0) + } + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0) + } + 100% { + -webkit-transform: none; + transform: none + } +} + +@keyframes bounceInDown { + 0%, + 100%, + 60%, + 75%, + 90% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) + } + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0) + } + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0) + } + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0) + } + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0) + } + 100% { + -webkit-transform: none; + transform: none + } +} + +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown +} + +@-webkit-keyframes bounceInLeft { + 0%, + 100%, + 60%, + 75%, + 90% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) + } + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0) + } + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0) + } + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0) + } + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0) + } + 100% { + -webkit-transform: none; + transform: none + } +} + +@keyframes bounceInLeft { + 0%, + 100%, + 60%, + 75%, + 90% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) + } + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0) + } + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0) + } + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0) + } + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0) + } + 100% { + -webkit-transform: none; + transform: none + } +} + +.bounceInLeft { + -webkit-animation-name: bounceInLeft; + animation-name: bounceInLeft +} + +@-webkit-keyframes bounceInRight { + 0%, + 100%, + 60%, + 75%, + 90% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) + } + 0% { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0) + } + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0) + } + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0) + } + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0) + } + 100% { + -webkit-transform: none; + transform: none + } +} + +@keyframes bounceInRight { + 0%, + 100%, + 60%, + 75%, + 90% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) + } + 0% { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0) + } + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0) + } + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0) + } + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0) + } + 100% { + -webkit-transform: none; + transform: none + } +} + +.bounceInRight { + -webkit-animation-name: bounceInRight; + animation-name: bounceInRight +} + +@-webkit-keyframes bounceInUp { + 0%, + 100%, + 60%, + 75%, + 90% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) + } + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0) + } + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0) + } + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0) + } + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0) + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } +} + +@keyframes bounceInUp { + 0%, + 100%, + 60%, + 75%, + 90% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) + } + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0) + } + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0) + } + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0) + } + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0) + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } +} + +.bounceInUp { + -webkit-animation-name: bounceInUp; + animation-name: bounceInUp +} + +@-webkit-keyframes bounceOut { + 20% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9) + } + 50%, + 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1) + } + 100% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3) + } +} + +@keyframes bounceOut { + 20% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9) + } + 50%, + 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1) + } + 100% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3) + } +} + +.bounceOut { + -webkit-animation-name: bounceOut; + animation-name: bounceOut +} + +@-webkit-keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0) + } + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0) + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0) + } +} + +@keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0) + } + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0) + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0) + } +} + +.bounceOutDown { + -webkit-animation-name: bounceOutDown; + animation-name: bounceOutDown +} + +@-webkit-keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0) + } + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0) + } +} + +@keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0) + } + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0) + } +} + +.bounceOutLeft { + -webkit-animation-name: bounceOutLeft; + animation-name: bounceOutLeft +} + +@-webkit-keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0) + } + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0) + } +} + +@keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0) + } + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0) + } +} + +.bounceOutRight { + -webkit-animation-name: bounceOutRight; + animation-name: bounceOutRight +} + +@-webkit-keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0) + } + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0) + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0) + } +} + +@keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0) + } + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0) + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0) + } +} + +.bounceOutUp { + -webkit-animation-name: bounceOutUp; + animation-name: bounceOutUp +} + +@-webkit-keyframes fadeIn { + 0% { + opacity: 0 + } + 100% { + opacity: 1 + } +} + +@keyframes fadeIn { + 0% { + opacity: 0 + } + 100% { + opacity: 1 + } +} + +.fadeIn { + -webkit-animation-name: fadeIn; + animation-name: fadeIn +} + +@-webkit-keyframes fadeInDown { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +@keyframes fadeInDown { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +.fadeInDown { + -webkit-animation-name: fadeInDown; + animation-name: fadeInDown +} + +@-webkit-keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +@keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +.fadeInDownBig { + -webkit-animation-name: fadeInDownBig; + animation-name: fadeInDownBig +} + +@-webkit-keyframes fadeInLeft { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +@keyframes fadeInLeft { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +.fadeInLeft { + -webkit-animation-name: fadeInLeft; + animation-name: fadeInLeft +} + +@-webkit-keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +@keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +.fadeInLeftBig { + -webkit-animation-name: fadeInLeftBig; + animation-name: fadeInLeftBig +} + +@-webkit-keyframes fadeInRight { + 0% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +@keyframes fadeInRight { + 0% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +.fadeInRight { + -webkit-animation-name: fadeInRight; + animation-name: fadeInRight +} + +@-webkit-keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +@keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +.fadeInRightBig { + -webkit-animation-name: fadeInRightBig; + animation-name: fadeInRightBig +} + +@-webkit-keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +@keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +.fadeInUp { + -webkit-animation-name: fadeInUp; + animation-name: fadeInUp +} + +@-webkit-keyframes fadeInUpBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +@keyframes fadeInUpBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +.fadeInUpBig { + -webkit-animation-name: fadeInUpBig; + animation-name: fadeInUpBig +} + +@-webkit-keyframes fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +@keyframes fadeOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0 + } +} + +.fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut +} + +@-webkit-keyframes fadeOutDown { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0) + } +} + +@keyframes fadeOutDown { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0) + } +} + +.fadeOutDown { + -webkit-animation-name: fadeOutDown; + animation-name: fadeOutDown +} + +@-webkit-keyframes fadeOutDownBig { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0) + } +} + +@keyframes fadeOutDownBig { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0) + } +} + +.fadeOutDownBig { + -webkit-animation-name: fadeOutDownBig; + animation-name: fadeOutDownBig +} + +@-webkit-keyframes fadeOutLeft { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0) + } +} + +@keyframes fadeOutLeft { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0) + } +} + +.fadeOutLeft { + -webkit-animation-name: fadeOutLeft; + animation-name: fadeOutLeft +} + +@-webkit-keyframes fadeOutLeftBig { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0) + } +} + +@keyframes fadeOutLeftBig { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0) + } +} + +.fadeOutLeftBig { + -webkit-animation-name: fadeOutLeftBig; + animation-name: fadeOutLeftBig +} + +@-webkit-keyframes fadeOutRight { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0) + } +} + +@keyframes fadeOutRight { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0) + } +} + +.fadeOutRight { + -webkit-animation-name: fadeOutRight; + animation-name: fadeOutRight +} + +@-webkit-keyframes fadeOutRightBig { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0) + } +} + +@keyframes fadeOutRightBig { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0) + } +} + +.fadeOutRightBig { + -webkit-animation-name: fadeOutRightBig; + animation-name: fadeOutRightBig +} + +@-webkit-keyframes fadeOutUp { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0) + } +} + +@keyframes fadeOutUp { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0) + } +} + +.fadeOutUp { + -webkit-animation-name: fadeOutUp; + animation-name: fadeOutUp +} + +@-webkit-keyframes fadeOutUpBig { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0) + } +} + +@keyframes fadeOutUpBig { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0) + } +} + +.fadeOutUpBig { + -webkit-animation-name: fadeOutUpBig; + animation-name: fadeOutUpBig +} + +@-webkit-keyframes flip { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out + } + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out + } + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in + } + 80% { + -webkit-transform: perspective(400px) scale3d(.95, .95, .95); + transform: perspective(400px) scale3d(.95, .95, .95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in + } + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in + } +} + +@keyframes flip { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out + } + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out + } + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in + } + 80% { + -webkit-transform: perspective(400px) scale3d(.95, .95, .95); + transform: perspective(400px) scale3d(.95, .95, .95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in + } + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in + } +} + +.animated.flip { + -webkit-backface-visibility: visible; + backface-visibility: visible; + -webkit-animation-name: flip; + animation-name: flip +} + +@-webkit-keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0 + } + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in + } + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1 + } + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg) + } + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px) + } +} + +@keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0 + } + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in + } + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1 + } + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg) + } + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px) + } +} + +.flipInX { + -webkit-backface-visibility: visible!important; + backface-visibility: visible!important; + -webkit-animation-name: flipInX; + animation-name: flipInX +} + +@-webkit-keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0 + } + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in + } + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1 + } + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg) + } + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px) + } +} + +@keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0 + } + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in + } + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1 + } + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg) + } + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px) + } +} + +.flipInY { + -webkit-backface-visibility: visible!important; + backface-visibility: visible!important; + -webkit-animation-name: flipInY; + animation-name: flipInY +} + +@-webkit-keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px); + transform: perspective(400px) + } + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1 + } + 100% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0 + } +} + +@keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px); + transform: perspective(400px) + } + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1 + } + 100% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0 + } +} + +.flipOutX { + -webkit-animation-name: flipOutX; + animation-name: flipOutX; + -webkit-backface-visibility: visible!important; + backface-visibility: visible!important +} + +@-webkit-keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px); + transform: perspective(400px) + } + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1 + } + 100% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0 + } +} + +@keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px); + transform: perspective(400px) + } + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1 + } + 100% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0 + } +} + +.flipOutY { + -webkit-backface-visibility: visible!important; + backface-visibility: visible!important; + -webkit-animation-name: flipOutY; + animation-name: flipOutY +} + +@-webkit-keyframes lightSpeedIn { + 0% { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0 + } + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1 + } + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1 + } + 100% { + -webkit-transform: none; + transform: none; + opacity: 1 + } +} + +@keyframes lightSpeedIn { + 0% { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0 + } + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1 + } + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1 + } + 100% { + -webkit-transform: none; + transform: none; + opacity: 1 + } +} + +.lightSpeedIn { + -webkit-animation-name: lightSpeedIn; + animation-name: lightSpeedIn; + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out +} + +@-webkit-keyframes lightSpeedOut { + 0% { + opacity: 1 + } + 100% { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0 + } +} + +@keyframes lightSpeedOut { + 0% { + opacity: 1 + } + 100% { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0 + } +} + +.lightSpeedOut { + -webkit-animation-name: lightSpeedOut; + animation-name: lightSpeedOut; + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in +} + +@-webkit-keyframes rotateIn { + 0% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1 + } +} + +@keyframes rotateIn { + 0% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1 + } +} + +.rotateIn { + -webkit-animation-name: rotateIn; + animation-name: rotateIn +} + +@-webkit-keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1 + } +} + +@keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1 + } +} + +.rotateInDownLeft { + -webkit-animation-name: rotateInDownLeft; + animation-name: rotateInDownLeft +} + +@-webkit-keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1 + } +} + +@keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1 + } +} + +.rotateInDownRight { + -webkit-animation-name: rotateInDownRight; + animation-name: rotateInDownRight +} + +@-webkit-keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1 + } +} + +@keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1 + } +} + +.rotateInUpLeft { + -webkit-animation-name: rotateInUpLeft; + animation-name: rotateInUpLeft +} + +@-webkit-keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1 + } +} + +@keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0 + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1 + } +} + +.rotateInUpRight { + -webkit-animation-name: rotateInUpRight; + animation-name: rotateInUpRight +} + +@-webkit-keyframes rotateOut { + 0% { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1 + } + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0 + } +} + +@keyframes rotateOut { + 0% { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1 + } + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0 + } +} + +.rotateOut { + -webkit-animation-name: rotateOut; + animation-name: rotateOut +} + +@-webkit-keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1 + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0 + } +} + +@keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1 + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0 + } +} + +.rotateOutDownLeft { + -webkit-animation-name: rotateOutDownLeft; + animation-name: rotateOutDownLeft +} + +@-webkit-keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1 + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0 + } +} + +@keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1 + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0 + } +} + +.rotateOutDownRight { + -webkit-animation-name: rotateOutDownRight; + animation-name: rotateOutDownRight +} + +@-webkit-keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1 + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0 + } +} + +@keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1 + } + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0 + } +} + +.rotateOutUpLeft { + -webkit-animation-name: rotateOutUpLeft; + animation-name: rotateOutUpLeft +} + +@-webkit-keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1 + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0 + } +} + +@keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1 + } + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0 + } +} + +.rotateOutUpRight { + -webkit-animation-name: rotateOutUpRight; + animation-name: rotateOutUpRight +} + +@-webkit-keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out + } + 20%, + 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out + } + 40%, + 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1 + } + 100% { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0 + } +} + +@keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out + } + 20%, + 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out + } + 40%, + 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1 + } + 100% { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0 + } +} + +.hinge { + -webkit-animation-name: hinge; + animation-name: hinge +} + +@-webkit-keyframes rollIn { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +@keyframes rollIn { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg) + } + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +.rollIn { + -webkit-animation-name: rollIn; + animation-name: rollIn +} + +@-webkit-keyframes rollOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg) + } +} + +@keyframes rollOut { + 0% { + opacity: 1 + } + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg) + } +} + +.rollOut { + -webkit-animation-name: rollOut; + animation-name: rollOut +} + +@-webkit-keyframes zoomIn { + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3) + } + 50% { + opacity: 1 + } +} + +@keyframes zoomIn { + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3) + } + 50% { + opacity: 1 + } +} + +.zoomIn { + -webkit-animation-name: zoomIn; + animation-name: zoomIn +} + +@-webkit-keyframes zoomInDown { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) + } + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) + } +} + +@keyframes zoomInDown { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) + } + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) + } +} + +.zoomInDown { + -webkit-animation-name: zoomInDown; + animation-name: zoomInDown +} + +@-webkit-keyframes zoomInLeft { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) + } + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) + } +} + +@keyframes zoomInLeft { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) + } + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) + } +} + +.zoomInLeft { + -webkit-animation-name: zoomInLeft; + animation-name: zoomInLeft +} + +@-webkit-keyframes zoomInRight { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) + } + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) + } +} + +@keyframes zoomInRight { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) + } + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) + } +} + +.zoomInRight { + -webkit-animation-name: zoomInRight; + animation-name: zoomInRight +} + +@-webkit-keyframes zoomInUp { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) + } + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) + } +} + +@keyframes zoomInUp { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) + } + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) + } +} + +.zoomInUp { + -webkit-animation-name: zoomInUp; + animation-name: zoomInUp +} + +@-webkit-keyframes zoomOut { + 0% { + opacity: 1 + } + 50% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3) + } + 100% { + opacity: 0 + } +} + +@keyframes zoomOut { + 0% { + opacity: 1 + } + 50% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3) + } + 100% { + opacity: 0 + } +} + +.zoomOut { + -webkit-animation-name: zoomOut; + animation-name: zoomOut +} + +@-webkit-keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) + } + 100% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) + } +} + +@keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) + } + 100% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) + } +} + +.zoomOutDown { + -webkit-animation-name: zoomOutDown; + animation-name: zoomOutDown +} + +@-webkit-keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0) + } + 100% { + opacity: 0; + -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); + transform: scale(.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center + } +} + +@keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0) + } + 100% { + opacity: 0; + -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); + transform: scale(.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center + } +} + +.zoomOutLeft { + -webkit-animation-name: zoomOutLeft; + animation-name: zoomOutLeft +} + +@-webkit-keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0) + } + 100% { + opacity: 0; + -webkit-transform: scale(.1) translate3d(2000px, 0, 0); + transform: scale(.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center + } +} + +@keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0) + } + 100% { + opacity: 0; + -webkit-transform: scale(.1) translate3d(2000px, 0, 0); + transform: scale(.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center + } +} + +.zoomOutRight { + -webkit-animation-name: zoomOutRight; + animation-name: zoomOutRight +} + +@-webkit-keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) + } + 100% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) + } +} + +@keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) + } + 100% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) + } +} + +.zoomOutUp { + -webkit-animation-name: zoomOutUp; + animation-name: zoomOutUp +} + +@-webkit-keyframes slideInDown { + 0% { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } +} + +@keyframes slideInDown { + 0% { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } +} + +.slideInDown { + -webkit-animation-name: slideInDown; + animation-name: slideInDown +} + +@-webkit-keyframes slideInLeft { + 0% { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } +} + +@keyframes slideInLeft { + 0% { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } +} + +.slideInLeft { + -webkit-animation-name: slideInLeft; + animation-name: slideInLeft +} + +@-webkit-keyframes slideInRight { + 0% { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } +} + +@keyframes slideInRight { + 0% { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } +} + +.slideInRight { + -webkit-animation-name: slideInRight; + animation-name: slideInRight +} + +@-webkit-keyframes slideInUp { + 0% { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } +} + +@keyframes slideInUp { + 0% { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } +} + +.slideInUp { + -webkit-animation-name: slideInUp; + animation-name: slideInUp +} + +@-webkit-keyframes slideOutDown { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } + 100% { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0) + } +} + +@keyframes slideOutDown { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } + 100% { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0) + } +} + +.slideOutDown { + -webkit-animation-name: slideOutDown; + animation-name: slideOutDown +} + +@-webkit-keyframes slideOutLeft { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } + 100% { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0) + } +} + +@keyframes slideOutLeft { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } + 100% { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0) + } +} + +.slideOutLeft { + -webkit-animation-name: slideOutLeft; + animation-name: slideOutLeft +} + +@-webkit-keyframes slideOutRight { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } + 100% { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0) + } +} + +@keyframes slideOutRight { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } + 100% { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0) + } +} + +.slideOutRight { + -webkit-animation-name: slideOutRight; + animation-name: slideOutRight +} + +@-webkit-keyframes slideOutUp { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } + 100% { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0) + } +} + +@keyframes slideOutUp { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } + 100% { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0) + } +} + +.slideOutUp { + -webkit-animation-name: slideOutUp; + animation-name: slideOutUp +} .flex-container a:active, .flexslider a:active, .flex-container a:focus, -.flexslider a:focus{outline:none;} +.flexslider a:focus { + outline: none; +} + .slides, .flex-control-nav, -.flex-direction-nav{margin:0;padding:0;list-style:none;} -@font-face{font-family:'flexslider-icon';src:url('fonts/flexslider-icon.eot');src:url('fonts/flexslider-icon.eot?#iefix') format('embedded-opentype'), -url('fonts/flexslider-icon.woff') format('woff'), -url('fonts/flexslider-icon.ttf') format('truetype'), -url('fonts/flexslider-icon.svg#flexslider-icon') format('svg');font-weight:normal;font-style:normal;} -.flexslider{margin:0;padding:0;} -.flexslider .slides > li{display:none;-webkit-backface-visibility:hidden;} -.flexslider .slides img{width:100%;display:block;} -.flex-pauseplay span{text-transform:capitalize;} -.slides:after{content:"\0020";display:block;clear:both;visibility:hidden;line-height:0;height:0;} -html[xmlns] .slides{display:block;} -* html .slides{height:1%;} -.no-js .slides > li:first-child{display:block;} -.flexslider{margin:0 0 60px;background:#fff;border:4px solid #fff;position:relative;-webkit-border-radius:4px;-moz-border-radius:4px;-o-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.2);-moz-box-shadow:0 1px 4px rgba(0,0,0,.2);-o-box-shadow:0 1px 4px rgba(0,0,0,.2);box-shadow:0 1px 4px rgba(0,0,0,.2);zoom:1;} -.flex-viewport{max-height:2000px;-webkit-transition:all 1s ease;-moz-transition:all 1s ease;-o-transition:all 1s ease;transition:all 1s ease;} -.loading .flex-viewport{max-height:300px;} -.flexslider .slides{zoom:1;} -.carousel li{margin-right:5px;} -.flex-direction-nav{*height:0;} -.flex-direction-nav a{text-decoration:none;display:block;width:40px;height:40px;margin:-20px 0 0;position:absolute;top:50%;z-index:10;overflow:hidden;opacity:0;cursor:pointer;color:rgba(0,0,0,0.8);text-shadow:1px 1px 0 rgba(255,255,255,0.3);-webkit-transition:all .3s ease;-moz-transition:all .3s ease;transition:all .3s ease;} -.flex-direction-nav .flex-prev{left:-50px;} -.flex-direction-nav .flex-next{right:-50px;text-align:right;} -.flexslider:hover .flex-prev{opacity:0.7;left:10px;} -.flexslider:hover .flex-next{opacity:0.7;right:10px;} -.flexslider:hover .flex-next:hover, .flexslider:hover .flex-prev:hover{opacity:1;} -.flex-direction-nav .flex-disabled{opacity:0!important;filter:alpha(opacity=0);cursor:default;} -.flex-direction-nav a:before{font-family:"flexslider-icon";font-size:40px;display:inline-block;content:'\f001';} -.flex-direction-nav a.flex-next:before{content:'\f002';} -.flex-pauseplay a{display:block;width:20px;height:20px;position:absolute;bottom:5px;left:10px;opacity:0.8;z-index:10;overflow:hidden;cursor:pointer;color:#000;} -.flex-pauseplay a:before{font-family:"flexslider-icon";font-size:20px;display:inline-block;content:'\f004';} -.flex-pauseplay a:hover{opacity:1;} -.flex-pauseplay a.flex-play:before{content:'\f003';} -.flex-control-nav{width:100%;position:absolute;bottom:-40px;text-align:center;} -.flex-control-nav li{margin:0 6px;display:inline-block;zoom:1;*display:inline;} -.flex-control-paging li a{width:11px;height:11px;display:block;background:#666;background:rgba(0,0,0,0.5);cursor:pointer;text-indent:-9999px;-webkit-border-radius:20px;-moz-border-radius:20px;-o-border-radius:20px;border-radius:20px;-webkit-box-shadow:inset 0 0 3px rgba(0,0,0,0.3);-moz-box-shadow:inset 0 0 3px rgba(0,0,0,0.3);-o-box-shadow:inset 0 0 3px rgba(0,0,0,0.3);box-shadow:inset 0 0 3px rgba(0,0,0,0.3);} -.flex-control-paging li a:hover{background:#333;background:rgba(0,0,0,0.7);} -.flex-control-paging li a.flex-active{background:#000;background:rgba(0,0,0,0.9);cursor:default;} -.flex-control-thumbs{margin:5px 0 0;position:static;overflow:hidden;} -.flex-control-thumbs li{width:25%;float:left;margin:0;} -.flex-control-thumbs img{width:100%;display:block;opacity:.7;cursor:pointer;} -.flex-control-thumbs img:hover{opacity:1;} -.flex-control-thumbs .flex-active{opacity:1;cursor:default;} -@media screen and (max-width:860px){.flex-direction-nav .flex-prev{opacity:1;left:10px;} -.flex-direction-nav .flex-next{opacity:1;right:10px;} +.flex-direction-nav { + margin: 0; + padding: 0; + list-style: none; } -.mfp-bg{top:0;left:0;width:100%;height:100%;z-index:1042;overflow:hidden;position:fixed;background:#0b0b0b;opacity:0.8;filter:alpha(opacity=80);} -.mfp-wrap{top:0;left:0;width:100%;height:100%;z-index:1043;position:fixed;outline:none !important;-webkit-backface-visibility:hidden;} -.mfp-container{text-align:center;position:absolute;width:100%;height:100%;left:0;top:0;padding:0 8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} -.mfp-container:before{content:'';display:inline-block;height:100%;vertical-align:middle;} -.mfp-align-top .mfp-container:before{display:none;} -.mfp-content{position:relative;display:inline-block;vertical-align:middle;margin:0 auto;text-align:left;z-index:1045;} -.mfp-inline-holder .mfp-content, .mfp-ajax-holder .mfp-content{width:100%;cursor:auto;} -.mfp-ajax-cur{cursor:progress;} -.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close{cursor:-moz-zoom-out;cursor:-webkit-zoom-out;cursor:zoom-out;} -.mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in;} -.mfp-auto-cursor .mfp-content{cursor:auto;} -.mfp-close, .mfp-arrow, .mfp-preloader, .mfp-counter{-webkit-user-select:none;-moz-user-select:none;user-select:none;} -.mfp-loading.mfp-figure{display:none;} -.mfp-hide{display:none !important;} -.mfp-preloader{color:#CCC;position:absolute;top:50%;width:auto;text-align:center;margin-top:-0.8em;left:8px;right:8px;z-index:1044;} -.mfp-preloader a{color:#CCC;} -.mfp-preloader a:hover{color:#FFF;} -.mfp-s-ready .mfp-preloader{display:none;} -.mfp-s-error .mfp-content{display:none;} -button.mfp-close, button.mfp-arrow{overflow:visible;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;display:block;outline:none;padding:0;z-index:1046;-webkit-box-shadow:none;box-shadow:none;} -button::-moz-focus-inner{padding:0;border:0;} -.mfp-close{width:44px;height:44px;line-height:44px;position:absolute;right:0;top:0;text-decoration:none;text-align:center;opacity:0.65;filter:alpha(opacity=65);padding:0 0 18px 10px;color:#FFF;font-style:normal;font-size:28px;font-family:Arial, Baskerville, monospace;} -.mfp-close:hover, .mfp-close:focus{opacity:1;filter:alpha(opacity=100);} -.mfp-close:active{top:1px;} -.mfp-close-btn-in .mfp-close{color:#333;} -.mfp-image-holder .mfp-close, .mfp-iframe-holder .mfp-close{color:#FFF;right:-6px;text-align:right;padding-right:6px;width:100%;} -.mfp-counter{position:absolute;top:0;right:0;color:#CCC;font-size:12px;line-height:18px;white-space:nowrap;} -.mfp-arrow{position:absolute;opacity:0.65;filter:alpha(opacity=65);margin:0;top:50%;margin-top:-55px;padding:0;width:90px;height:110px;-webkit-tap-highlight-color:rgba(0, 0, 0, 0);} -.mfp-arrow:active{margin-top:-54px;} -.mfp-arrow:hover, .mfp-arrow:focus{opacity:1;filter:alpha(opacity=100);} -.mfp-arrow:before, .mfp-arrow:after, .mfp-arrow .mfp-b, .mfp-arrow .mfp-a{content:'';display:block;width:0;height:0;position:absolute;left:0;top:0;margin-top:35px;margin-left:35px;border:medium inset transparent;} -.mfp-arrow:after, .mfp-arrow .mfp-a{border-top-width:13px;border-bottom-width:13px;top:8px;} -.mfp-arrow:before, .mfp-arrow .mfp-b{border-top-width:21px;border-bottom-width:21px;opacity:0.7;} -.mfp-arrow-left{left:0;} -.mfp-arrow-left:after, .mfp-arrow-left .mfp-a{border-right:17px solid #FFF;margin-left:31px;} -.mfp-arrow-left:before, .mfp-arrow-left .mfp-b{margin-left:25px;border-right:27px solid #3F3F3F;} -.mfp-arrow-right{right:0;} -.mfp-arrow-right:after, .mfp-arrow-right .mfp-a{border-left:17px solid #FFF;margin-left:39px;} -.mfp-arrow-right:before, .mfp-arrow-right .mfp-b{border-left:27px solid #3F3F3F;} -.mfp-iframe-holder{padding-top:40px;padding-bottom:40px;} -.mfp-iframe-holder .mfp-content{line-height:0;width:100%;max-width:900px;} -.mfp-iframe-holder .mfp-close{top:-40px;} -.mfp-iframe-scaler{width:100%;height:0;overflow:hidden;padding-top:56.25%;} -.mfp-iframe-scaler iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;box-shadow:0 0 8px rgba(0, 0, 0, 0.6);background:#000;} -img.mfp-img{width:auto;max-width:100%;height:auto;display:block;line-height:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:40px 0 40px;margin:0 auto;} -.mfp-figure{line-height:0;} -.mfp-figure:after{content:'';position:absolute;left:0;top:40px;bottom:40px;display:block;right:0;width:auto;height:auto;z-index:-1;box-shadow:0 0 8px rgba(0, 0, 0, 0.6);background:#444;} -.mfp-figure small{color:#BDBDBD;display:block;font-size:12px;line-height:14px;} -.mfp-figure figure{margin:0;} -.mfp-bottom-bar{margin-top:-36px;position:absolute;top:100%;left:0;width:100%;cursor:auto;} -.mfp-title{text-align:left;line-height:18px;color:#F3F3F3;word-wrap:break-word;padding-right:36px;} -.mfp-image-holder .mfp-content{max-width:100%;} -.mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer;} -@media screen and (max-width:800px) and (orientation:landscape), screen and (max-height:300px){.mfp-img-mobile .mfp-image-holder{padding-left:0;padding-right:0;} -.mfp-img-mobile img.mfp-img{padding:0;} -.mfp-img-mobile .mfp-figure:after{top:0;bottom:0;} -.mfp-img-mobile .mfp-figure small{display:inline;margin-left:5px;} -.mfp-img-mobile .mfp-bottom-bar{background:rgba(0, 0, 0, 0.6);bottom:0;margin:0;top:auto;padding:3px 5px;position:fixed;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} -.mfp-img-mobile .mfp-bottom-bar:empty{padding:0;} -.mfp-img-mobile .mfp-counter{right:5px;top:3px;} -.mfp-img-mobile .mfp-close{top:0;right:0;width:35px;height:35px;line-height:35px;background:rgba(0, 0, 0, 0.6);position:fixed;text-align:center;padding:0;} +@font-face { + font-family: 'flexslider-icon'; + src: url('fonts/flexslider-icon.eot'); + src: url('fonts/flexslider-icon.eot?#iefix') format('embedded-opentype'), url('fonts/flexslider-icon.woff') format('woff'), url('fonts/flexslider-icon.ttf') format('truetype'), url('fonts/flexslider-icon.svg#flexslider-icon') format('svg'); + font-weight: normal; + font-style: normal; +} + +.flexslider { + margin: 0; + padding: 0; +} + +.flexslider .slides > li { + display: none; + -webkit-backface-visibility: hidden; +} + +.flexslider .slides img { + width: 100%; + display: block; +} + +.flex-pauseplay span { + text-transform: capitalize; +} + +.slides:after { + content: "\0020"; + display: block; + clear: both; + visibility: hidden; + line-height: 0; + height: 0; +} + +html[xmlns] .slides { + display: block; +} + +* html .slides { + height: 1%; +} + +.no-js .slides > li:first-child { + display: block; +} + +.flexslider { + margin: 0 0 60px; + background: #fff; + border: 4px solid #fff; + position: relative; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, .2); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, .2); + -o-box-shadow: 0 1px 4px rgba(0, 0, 0, .2); + box-shadow: 0 1px 4px rgba(0, 0, 0, .2); + zoom: 1; +} + +.flex-viewport { + max-height: 2000px; + -webkit-transition: all 1s ease; + -moz-transition: all 1s ease; + -o-transition: all 1s ease; + transition: all 1s ease; +} + +.loading .flex-viewport { + max-height: 300px; +} + +.flexslider .slides { + zoom: 1; +} + +.carousel li { + margin-right: 5px; +} + +.flex-direction-nav { + *height: 0; +} + +.flex-direction-nav a { + text-decoration: none; + display: block; + width: 40px; + height: 40px; + margin: -20px 0 0; + position: absolute; + top: 50%; + z-index: 10; + overflow: hidden; + opacity: 0; + cursor: pointer; + color: rgba(0, 0, 0, 0.8); + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3); + -webkit-transition: all .3s ease; + -moz-transition: all .3s ease; + transition: all .3s ease; +} + +.flex-direction-nav .flex-prev { + left: -50px; +} + +.flex-direction-nav .flex-next { + right: -50px; + text-align: right; +} + +.flexslider:hover .flex-prev { + opacity: 0.7; + left: 10px; +} + +.flexslider:hover .flex-next { + opacity: 0.7; + right: 10px; +} + +.flexslider:hover .flex-next:hover, +.flexslider:hover .flex-prev:hover { + opacity: 1; +} + +.flex-direction-nav .flex-disabled { + opacity: 0!important; + filter: alpha(opacity=0); + cursor: default; +} + +.flex-direction-nav a:before { + font-family: "flexslider-icon"; + font-size: 40px; + display: inline-block; + content: '\f001'; +} + +.flex-direction-nav a.flex-next:before { + content: '\f002'; +} + +.flex-pauseplay a { + display: block; + width: 20px; + height: 20px; + position: absolute; + bottom: 5px; + left: 10px; + opacity: 0.8; + z-index: 10; + overflow: hidden; + cursor: pointer; + color: #000; +} + +.flex-pauseplay a:before { + font-family: "flexslider-icon"; + font-size: 20px; + display: inline-block; + content: '\f004'; +} + +.flex-pauseplay a:hover { + opacity: 1; +} + +.flex-pauseplay a.flex-play:before { + content: '\f003'; +} + +.flex-control-nav { + width: 100%; + position: absolute; + bottom: -40px; + text-align: center; +} + +.flex-control-nav li { + margin: 0 6px; + display: inline-block; + zoom: 1; + *display: inline; +} + +.flex-control-paging li a { + width: 11px; + height: 11px; + display: block; + background: #666; + background: rgba(0, 0, 0, 0.5); + cursor: pointer; + text-indent: -9999px; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + -o-border-radius: 20px; + border-radius: 20px; + -webkit-box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3); + -moz-box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3); + -o-box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3); + box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3); +} + +.flex-control-paging li a:hover { + background: #333; + background: rgba(0, 0, 0, 0.7); +} + +.flex-control-paging li a.flex-active { + background: #000; + background: rgba(0, 0, 0, 0.9); + cursor: default; +} + +.flex-control-thumbs { + margin: 5px 0 0; + position: static; + overflow: hidden; +} + +.flex-control-thumbs li { + width: 25%; + float: left; + margin: 0; +} + +.flex-control-thumbs img { + width: 100%; + display: block; + opacity: .7; + cursor: pointer; +} + +.flex-control-thumbs img:hover { + opacity: 1; +} + +.flex-control-thumbs .flex-active { + opacity: 1; + cursor: default; +} + +@media screen and (max-width:860px) { + .flex-direction-nav .flex-prev { + opacity: 1; + left: 10px; + } + .flex-direction-nav .flex-next { + opacity: 1; + right: 10px; + } +} + +.mfp-bg { + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1042; + overflow: hidden; + position: fixed; + background: #0b0b0b; + opacity: 0.8; + filter: alpha(opacity=80); +} + +.mfp-wrap { + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1043; + position: fixed; + outline: none !important; + -webkit-backface-visibility: hidden; +} + +.mfp-container { + text-align: center; + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + padding: 0 8px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.mfp-container:before { + content: ''; + display: inline-block; + height: 100%; + vertical-align: middle; +} + +.mfp-align-top .mfp-container:before { + display: none; +} + +.mfp-content { + position: relative; + display: inline-block; + vertical-align: middle; + margin: 0 auto; + text-align: left; + z-index: 1045; +} + +.mfp-inline-holder .mfp-content, +.mfp-ajax-holder .mfp-content { + width: 100%; + cursor: auto; +} + +.mfp-ajax-cur { + cursor: progress; +} + +.mfp-zoom-out-cur, +.mfp-zoom-out-cur .mfp-image-holder .mfp-close { + cursor: -moz-zoom-out; + cursor: -webkit-zoom-out; + cursor: zoom-out; +} + +.mfp-zoom { + cursor: pointer; + cursor: -webkit-zoom-in; + cursor: -moz-zoom-in; + cursor: zoom-in; +} + +.mfp-auto-cursor .mfp-content { + cursor: auto; +} + +.mfp-close, +.mfp-arrow, +.mfp-preloader, +.mfp-counter { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.mfp-loading.mfp-figure { + display: none; +} + +.mfp-hide { + display: none !important; +} + +.mfp-preloader { + color: #CCC; + position: absolute; + top: 50%; + width: auto; + text-align: center; + margin-top: -0.8em; + left: 8px; + right: 8px; + z-index: 1044; +} + +.mfp-preloader a { + color: #CCC; +} + +.mfp-preloader a:hover { + color: #FFF; +} + +.mfp-s-ready .mfp-preloader { + display: none; +} + +.mfp-s-error .mfp-content { + display: none; +} + +button.mfp-close, +button.mfp-arrow { + overflow: visible; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + display: block; + outline: none; + padding: 0; + z-index: 1046; + -webkit-box-shadow: none; + box-shadow: none; +} + +button::-moz-focus-inner { + padding: 0; + border: 0; +} + +.mfp-close { + width: 44px; + height: 44px; + line-height: 44px; + position: absolute; + right: 0; + top: 0; + text-decoration: none; + text-align: center; + opacity: 0.65; + filter: alpha(opacity=65); + padding: 0 0 18px 10px; + color: #FFF; + font-style: normal; + font-size: 28px; + font-family: Arial, Baskerville, monospace; +} + +.mfp-close:hover, +.mfp-close:focus { + opacity: 1; + filter: alpha(opacity=100); +} + +.mfp-close:active { + top: 1px; +} + +.mfp-close-btn-in .mfp-close { + color: #333; +} + +.mfp-image-holder .mfp-close, +.mfp-iframe-holder .mfp-close { + color: #FFF; + right: -6px; + text-align: right; + padding-right: 6px; + width: 100%; +} + +.mfp-counter { + position: absolute; + top: 0; + right: 0; + color: #CCC; + font-size: 12px; + line-height: 18px; + white-space: nowrap; +} + +.mfp-arrow { + position: absolute; + opacity: 0.65; + filter: alpha(opacity=65); + margin: 0; + top: 50%; + margin-top: -55px; + padding: 0; + width: 90px; + height: 110px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +.mfp-arrow:active { + margin-top: -54px; +} + +.mfp-arrow:hover, +.mfp-arrow:focus { + opacity: 1; + filter: alpha(opacity=100); +} + +.mfp-arrow:before, +.mfp-arrow:after, +.mfp-arrow .mfp-b, +.mfp-arrow .mfp-a { + content: ''; + display: block; + width: 0; + height: 0; + position: absolute; + left: 0; + top: 0; + margin-top: 35px; + margin-left: 35px; + border: medium inset transparent; +} + +.mfp-arrow:after, +.mfp-arrow .mfp-a { + border-top-width: 13px; + border-bottom-width: 13px; + top: 8px; +} + +.mfp-arrow:before, +.mfp-arrow .mfp-b { + border-top-width: 21px; + border-bottom-width: 21px; + opacity: 0.7; +} + +.mfp-arrow-left { + left: 0; +} + +.mfp-arrow-left:after, +.mfp-arrow-left .mfp-a { + border-right: 17px solid #FFF; + margin-left: 31px; +} + +.mfp-arrow-left:before, +.mfp-arrow-left .mfp-b { + margin-left: 25px; + border-right: 27px solid #3F3F3F; +} + +.mfp-arrow-right { + right: 0; +} + +.mfp-arrow-right:after, +.mfp-arrow-right .mfp-a { + border-left: 17px solid #FFF; + margin-left: 39px; +} + +.mfp-arrow-right:before, +.mfp-arrow-right .mfp-b { + border-left: 27px solid #3F3F3F; +} + +.mfp-iframe-holder { + padding-top: 40px; + padding-bottom: 40px; +} + +.mfp-iframe-holder .mfp-content { + line-height: 0; + width: 100%; + max-width: 900px; +} + +.mfp-iframe-holder .mfp-close { + top: -40px; +} + +.mfp-iframe-scaler { + width: 100%; + height: 0; + overflow: hidden; + padding-top: 56.25%; +} + +.mfp-iframe-scaler iframe { + position: absolute; + display: block; + top: 0; + left: 0; + width: 100%; + height: 100%; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: #000; +} + +img.mfp-img { + width: auto; + max-width: 100%; + height: auto; + display: block; + line-height: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 40px 0 40px; + margin: 0 auto; +} + +.mfp-figure { + line-height: 0; +} + +.mfp-figure:after { + content: ''; + position: absolute; + left: 0; + top: 40px; + bottom: 40px; + display: block; + right: 0; + width: auto; + height: auto; + z-index: -1; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: #444; +} + +.mfp-figure small { + color: #BDBDBD; + display: block; + font-size: 12px; + line-height: 14px; +} + +.mfp-figure figure { + margin: 0; +} + +.mfp-bottom-bar { + margin-top: -36px; + position: absolute; + top: 100%; + left: 0; + width: 100%; + cursor: auto; +} + +.mfp-title { + text-align: left; + line-height: 18px; + color: #F3F3F3; + word-wrap: break-word; + padding-right: 36px; +} + +.mfp-image-holder .mfp-content { + max-width: 100%; +} + +.mfp-gallery .mfp-image-holder .mfp-figure { + cursor: pointer; +} + +@media screen and (max-width:800px) and (orientation:landscape), +screen and (max-height:300px) { + .mfp-img-mobile .mfp-image-holder { + padding-left: 0; + padding-right: 0; + } + .mfp-img-mobile img.mfp-img { + padding: 0; + } + .mfp-img-mobile .mfp-figure:after { + top: 0; + bottom: 0; + } + .mfp-img-mobile .mfp-figure small { + display: inline; + margin-left: 5px; + } + .mfp-img-mobile .mfp-bottom-bar { + background: rgba(0, 0, 0, 0.6); + bottom: 0; + margin: 0; + top: auto; + padding: 3px 5px; + position: fixed; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .mfp-img-mobile .mfp-bottom-bar:empty { + padding: 0; + } + .mfp-img-mobile .mfp-counter { + right: 5px; + top: 3px; + } + .mfp-img-mobile .mfp-close { + top: 0; + right: 0; + width: 35px; + height: 35px; + line-height: 35px; + background: rgba(0, 0, 0, 0.6); + position: fixed; + text-align: center; + padding: 0; + } +} + +@media all and (max-width:900px) { + .mfp-arrow { + -webkit-transform: scale(0.75); + transform: scale(0.75); + } + .mfp-arrow-left { + -webkit-transform-origin: 0; + transform-origin: 0; + } + .mfp-arrow-right { + -webkit-transform-origin: 100%; + transform-origin: 100%; + } + .mfp-container { + padding-left: 6px; + padding-right: 6px; + } +} + +.mfp-ie7 .mfp-img { + padding: 0; +} + +.mfp-ie7 .mfp-bottom-bar { + width: 600px; + left: 50%; + margin-left: -300px; + margin-top: 5px; + padding-bottom: 5px; +} + +.mfp-ie7 .mfp-container { + padding: 0; +} + +.mfp-ie7 .mfp-content { + padding-top: 44px; +} + +.mfp-ie7 .mfp-close { + top: 0; + right: 0; + padding-top: 0; +} + +.ui-slider-horizontal.ui-slider-pips { + margin-bottom: 1.4em; } -@media all and (max-width:900px){.mfp-arrow{-webkit-transform:scale(0.75);transform:scale(0.75);} -.mfp-arrow-left{-webkit-transform-origin:0;transform-origin:0;} -.mfp-arrow-right{-webkit-transform-origin:100%;transform-origin:100%;} -.mfp-container{padding-left:6px;padding-right:6px;} -} -.mfp-ie7 .mfp-img{padding:0;} -.mfp-ie7 .mfp-bottom-bar{width:600px;left:50%;margin-left:-300px;margin-top:5px;padding-bottom:5px;} -.mfp-ie7 .mfp-container{padding:0;} -.mfp-ie7 .mfp-content{padding-top:44px;} -.mfp-ie7 .mfp-close{top:0;right:0;padding-top:0;} -.ui-slider-horizontal.ui-slider-pips{margin-bottom:1.4em;} .ui-slider-pips .ui-slider-label, -.ui-slider-pips .ui-slider-pip-hide{display:none;} -.ui-slider-pips .ui-slider-pip-label .ui-slider-label{display:block;} -.ui-slider-pips .ui-slider-pip{width:2em;height:1em;line-height:1em;position:absolute;font-size:0.8em;color:#999;overflow:visible;text-align:center;top:20px;left:20px;margin-left:-1em;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;} -.ui-state-disabled.ui-slider-pips .ui-slider-pip{cursor:default;} -.ui-slider-pips .ui-slider-line{background:#999;width:1px;height:3px;position:absolute;left:50%;} -.ui-slider-pips .ui-slider-label{position:absolute;top:5px;left:50%;margin-left:-1em;width:2em;} -.ui-slider-pips:not(.ui-slider-disabled) .ui-slider-pip:hover .ui-slider-label{color:black;font-weight:bold;} -.ui-slider-vertical.ui-slider-pips{margin-bottom:1em;margin-right:2em;} -.ui-slider-vertical.ui-slider-pips .ui-slider-pip{text-align:left;top:auto;left:20px;margin-left:0;margin-bottom:-0.5em;} -.ui-slider-vertical.ui-slider-pips .ui-slider-line{width:3px;height:1px;position:absolute;top:50%;left:0;} -.ui-slider-vertical.ui-slider-pips .ui-slider-label{top:50%;left:0.5em;margin-left:0;margin-top:-0.5em;width:2em;} +.ui-slider-pips .ui-slider-pip-hide { + display: none; +} + +.ui-slider-pips .ui-slider-pip-label .ui-slider-label { + display: block; +} + +.ui-slider-pips .ui-slider-pip { + width: 2em; + height: 1em; + line-height: 1em; + position: absolute; + font-size: 0.8em; + color: #999; + overflow: visible; + text-align: center; + top: 20px; + left: 20px; + margin-left: -1em; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.ui-state-disabled.ui-slider-pips .ui-slider-pip { + cursor: default; +} + +.ui-slider-pips .ui-slider-line { + background: #999; + width: 1px; + height: 3px; + position: absolute; + left: 50%; +} + +.ui-slider-pips .ui-slider-label { + position: absolute; + top: 5px; + left: 50%; + margin-left: -1em; + width: 2em; +} + +.ui-slider-pips:not(.ui-slider-disabled) .ui-slider-pip:hover .ui-slider-label { + color: black; + font-weight: bold; +} + +.ui-slider-vertical.ui-slider-pips { + margin-bottom: 1em; + margin-right: 2em; +} + +.ui-slider-vertical.ui-slider-pips .ui-slider-pip { + text-align: left; + top: auto; + left: 20px; + margin-left: 0; + margin-bottom: -0.5em; +} + +.ui-slider-vertical.ui-slider-pips .ui-slider-line { + width: 3px; + height: 1px; + position: absolute; + top: 50%; + left: 0; +} + +.ui-slider-vertical.ui-slider-pips .ui-slider-label { + top: 50%; + left: 0.5em; + margin-left: 0; + margin-top: -0.5em; + width: 2em; +} + .ui-slider-float .ui-slider-handle:focus, .ui-slider-float .ui-slider-handle.ui-state-focus .ui-slider-tip-label, .ui-slider-float .ui-slider-handle:focus .ui-slider-tip, .ui-slider-float .ui-slider-handle.ui-state-focus .ui-slider-tip-label, -.ui-slider-float .ui-slider-handle:focus .ui-slider-tip-label -.ui-slider-float .ui-slider-handle.ui-state-focus .ui-slider-tip-label{outline:none;} +.ui-slider-float .ui-slider-handle:focus .ui-slider-tip-label .ui-slider-float .ui-slider-handle.ui-state-focus .ui-slider-tip-label { + outline: none; +} + .ui-slider-float .ui-slider-tip, -.ui-slider-float .ui-slider-tip-label{position:absolute;visibility:hidden;top:-40px;display:block;width:34px;margin-left:-18px;left:50%;height:20px;line-height:20px;background:white;border-radius:3px;border:1px solid #888;text-align:center;font-size:12px;opacity:0;color:#333;-webkit-transition-property:opacity, top, visibility;-moz-transition-property:opacity, top, visibility;-ms-transition-property:opacity, top, visibility;transition-property:opacity, top, visibility;-webkit-transition-timing-function:ease-in;-moz-transition-timing-function:ease-in;-ms-transition-timing-function:ease-in;transition-timing-function:ease-in;-webkit-transition-duration:200ms, 200ms, 0ms;-moz-transition-duration:200ms, 200ms, 0ms;-ms-transition-duration:200ms, 200ms, 0ms;transition-duration:200ms, 200ms, 0ms;-webkit-transition-delay:0ms, 0ms, 200ms;-moz-transition-delay:0ms, 0ms, 200ms;-ms-transition-delay:0ms, 0ms, 200ms;transition-delay:0ms, 0ms, 200ms;} +.ui-slider-float .ui-slider-tip-label { + position: absolute; + visibility: hidden; + top: -40px; + display: block; + width: 34px; + margin-left: -18px; + left: 50%; + height: 20px; + line-height: 20px; + background: white; + border-radius: 3px; + border: 1px solid #888; + text-align: center; + font-size: 12px; + opacity: 0; + color: #333; + -webkit-transition-property: opacity, top, visibility; + -moz-transition-property: opacity, top, visibility; + -ms-transition-property: opacity, top, visibility; + transition-property: opacity, top, visibility; + -webkit-transition-timing-function: ease-in; + -moz-transition-timing-function: ease-in; + -ms-transition-timing-function: ease-in; + transition-timing-function: ease-in; + -webkit-transition-duration: 200ms, 200ms, 0ms; + -moz-transition-duration: 200ms, 200ms, 0ms; + -ms-transition-duration: 200ms, 200ms, 0ms; + transition-duration: 200ms, 200ms, 0ms; + -webkit-transition-delay: 0ms, 0ms, 200ms; + -moz-transition-delay: 0ms, 0ms, 200ms; + -ms-transition-delay: 0ms, 0ms, 200ms; + transition-delay: 0ms, 0ms, 200ms; +} + .ui-slider-float .ui-slider-handle:hover .ui-slider-tip, .ui-slider-float .ui-slider-handle.ui-state-hover .ui-slider-tip, .ui-slider-float .ui-slider-handle:focus .ui-slider-tip, .ui-slider-float .ui-slider-handle.ui-state-focus .ui-slider-tip, .ui-slider-float .ui-slider-handle.ui-state-active .ui-slider-tip, -.ui-slider-float .ui-slider-pip:hover .ui-slider-tip-label{opacity:1;top:-30px;visibility:visible;-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;transition-timing-function:ease-out;-webkit-transition-delay:200ms, 200ms, 0ms;-moz-transition-delay:200ms, 200ms, 0ms;-ms-transition-delay:200ms, 200ms, 0ms;transition-delay:200ms, 200ms, 0ms;} -.ui-slider-float .ui-slider-pip .ui-slider-tip-label{top:42px;} -.ui-slider-float .ui-slider-pip:hover .ui-slider-tip-label{top:32px;font-weight:normal;} +.ui-slider-float .ui-slider-pip:hover .ui-slider-tip-label { + opacity: 1; + top: -30px; + visibility: visible; + -webkit-transition-timing-function: ease-out; + -moz-transition-timing-function: ease-out; + -ms-transition-timing-function: ease-out; + transition-timing-function: ease-out; + -webkit-transition-delay: 200ms, 200ms, 0ms; + -moz-transition-delay: 200ms, 200ms, 0ms; + -ms-transition-delay: 200ms, 200ms, 0ms; + transition-delay: 200ms, 200ms, 0ms; +} + +.ui-slider-float .ui-slider-pip .ui-slider-tip-label { + top: 42px; +} + +.ui-slider-float .ui-slider-pip:hover .ui-slider-tip-label { + top: 32px; + font-weight: normal; +} + .ui-slider-float .ui-slider-tip:after, -.ui-slider-float .ui-slider-pip .ui-slider-tip-label:after{content:" ";width:0;height:0;border:5px solid rgba(255,255,255,0);border-top-color:rgba(255,255,255,1);position:absolute;bottom:-10px;left:50%;margin-left:-5px;} +.ui-slider-float .ui-slider-pip .ui-slider-tip-label:after { + content: " "; + width: 0; + height: 0; + border: 5px solid rgba(255, 255, 255, 0); + border-top-color: rgba(255, 255, 255, 1); + position: absolute; + bottom: -10px; + left: 50%; + margin-left: -5px; +} + .ui-slider-float .ui-slider-tip:before, -.ui-slider-float .ui-slider-pip .ui-slider-tip-label:before{content:" ";width:0;height:0;border:5px solid rgba(255,255,255,0);border-top-color:#888;position:absolute;bottom:-11px;left:50%;margin-left:-5px;} -.ui-slider-float .ui-slider-pip .ui-slider-tip-label:after{border:5px solid rgba(255,255,255,0);border-bottom-color:rgba(255,255,255,1);top:-10px;} -.ui-slider-float .ui-slider-pip .ui-slider-tip-label:before{border:5px solid rgba(255,255,255,0);border-bottom-color:#888;top:-11px;} +.ui-slider-float .ui-slider-pip .ui-slider-tip-label:before { + content: " "; + width: 0; + height: 0; + border: 5px solid rgba(255, 255, 255, 0); + border-top-color: #888; + position: absolute; + bottom: -11px; + left: 50%; + margin-left: -5px; +} + +.ui-slider-float .ui-slider-pip .ui-slider-tip-label:after { + border: 5px solid rgba(255, 255, 255, 0); + border-bottom-color: rgba(255, 255, 255, 1); + top: -10px; +} + +.ui-slider-float .ui-slider-pip .ui-slider-tip-label:before { + border: 5px solid rgba(255, 255, 255, 0); + border-bottom-color: #888; + top: -11px; +} + .ui-slider-vertical.ui-slider-float .ui-slider-tip, -.ui-slider-vertical.ui-slider-float .ui-slider-tip-label{top:50%;margin-top:-11px;width:34px;margin-left:0px;left:-60px;color:#333;-webkit-transition-duration:200ms, 200ms, 0;-moz-transition-duration:200ms, 200ms, 0;-ms-transition-duration:200ms, 200ms, 0;transition-duration:200ms, 200ms, 0;-webkit-transition-property:opacity, left, visibility;-moz-transition-property:opacity, left, visibility;-ms-transition-property:opacity, left, visibility;transition-property:opacity, left, visibility;-webkit-transition-delay:0, 0, 200ms;-moz-transition-delay:0, 0, 200ms;-ms-transition-delay:0, 0, 200ms;transition-delay:0, 0, 200ms;} +.ui-slider-vertical.ui-slider-float .ui-slider-tip-label { + top: 50%; + margin-top: -11px; + width: 34px; + margin-left: 0px; + left: -60px; + color: #333; + -webkit-transition-duration: 200ms, 200ms, 0; + -moz-transition-duration: 200ms, 200ms, 0; + -ms-transition-duration: 200ms, 200ms, 0; + transition-duration: 200ms, 200ms, 0; + -webkit-transition-property: opacity, left, visibility; + -moz-transition-property: opacity, left, visibility; + -ms-transition-property: opacity, left, visibility; + transition-property: opacity, left, visibility; + -webkit-transition-delay: 0, 0, 200ms; + -moz-transition-delay: 0, 0, 200ms; + -ms-transition-delay: 0, 0, 200ms; + transition-delay: 0, 0, 200ms; +} + .ui-slider-vertical.ui-slider-float .ui-slider-handle:hover .ui-slider-tip, .ui-slider-vertical.ui-slider-float .ui-slider-handle.ui-state-hover .ui-slider-tip, .ui-slider-vertical.ui-slider-float .ui-slider-handle:focus .ui-slider-tip, .ui-slider-vertical.ui-slider-float .ui-slider-handle.ui-state-focus .ui-slider-tip, .ui-slider-vertical.ui-slider-float .ui-slider-handle.ui-state-active .ui-slider-tip, -.ui-slider-vertical.ui-slider-float .ui-slider-pip:hover .ui-slider-tip-label{top:50%;margin-top:-11px;left:-50px;} -.ui-slider-vertical.ui-slider-float .ui-slider-pip .ui-slider-tip-label{left:47px;} -.ui-slider-vertical.ui-slider-float .ui-slider-pip:hover .ui-slider-tip-label{left:37px;} +.ui-slider-vertical.ui-slider-float .ui-slider-pip:hover .ui-slider-tip-label { + top: 50%; + margin-top: -11px; + left: -50px; +} + +.ui-slider-vertical.ui-slider-float .ui-slider-pip .ui-slider-tip-label { + left: 47px; +} + +.ui-slider-vertical.ui-slider-float .ui-slider-pip:hover .ui-slider-tip-label { + left: 37px; +} + .ui-slider-vertical.ui-slider-float .ui-slider-tip:after, -.ui-slider-vertical.ui-slider-float .ui-slider-pip .ui-slider-tip-label:after{border:5px solid rgba(255,255,255,0);border-left-color:rgba(255,255,255,1);border-top-color:transparent;position:absolute;bottom:50%;margin-bottom:-5px;right:-10px;margin-left:0;top:auto;left:auto;} +.ui-slider-vertical.ui-slider-float .ui-slider-pip .ui-slider-tip-label:after { + border: 5px solid rgba(255, 255, 255, 0); + border-left-color: rgba(255, 255, 255, 1); + border-top-color: transparent; + position: absolute; + bottom: 50%; + margin-bottom: -5px; + right: -10px; + margin-left: 0; + top: auto; + left: auto; +} + .ui-slider-vertical.ui-slider-float .ui-slider-tip:before, -.ui-slider-vertical.ui-slider-float .ui-slider-pip .ui-slider-tip-label:before{border:5px solid rgba(255,255,255,0);border-left-color:#888;border-top-color:transparent;position:absolute;bottom:50%;margin-bottom:-5px;right:-11px;margin-left:0;top:auto;left:auto;} -.ui-slider-vertical.ui-slider-float .ui-slider-pip .ui-slider-tip-label:after{border:5px solid rgba(255,255,255,0);border-right-color:rgba(255,255,255,1);right:auto;left:-10px;} -.ui-slider-vertical.ui-slider-float .ui-slider-pip .ui-slider-tip-label:before{border:5px solid rgba(255,255,255,0);border-right-color:#888;right:auto;left:-11px;} -.ui-slider-pips [class*=ui-slider-pip-initial]{font-weight:bold;color:#14CA82;} -.ui-slider-pips .ui-slider-pip-initial-1{} -.ui-slider-pips .ui-slider-pip-initial-2{color:#1897C9;} -.ui-slider-pips [class*=ui-slider-pip-selected]{font-weight:bold;color:#FF7A00;} -.ui-slider-pips .ui-slider-pip-inrange{color:black;} -.ui-slider-pips .ui-slider-pip-selected-1{} -.ui-slider-pips .ui-slider-pip-selected-2{color:#E70081;} +.ui-slider-vertical.ui-slider-float .ui-slider-pip .ui-slider-tip-label:before { + border: 5px solid rgba(255, 255, 255, 0); + border-left-color: #888; + border-top-color: transparent; + position: absolute; + bottom: 50%; + margin-bottom: -5px; + right: -11px; + margin-left: 0; + top: auto; + left: auto; +} + +.ui-slider-vertical.ui-slider-float .ui-slider-pip .ui-slider-tip-label:after { + border: 5px solid rgba(255, 255, 255, 0); + border-right-color: rgba(255, 255, 255, 1); + right: auto; + left: -10px; +} + +.ui-slider-vertical.ui-slider-float .ui-slider-pip .ui-slider-tip-label:before { + border: 5px solid rgba(255, 255, 255, 0); + border-right-color: #888; + right: auto; + left: -11px; +} + +.ui-slider-pips [class*=ui-slider-pip-initial] { + font-weight: bold; + color: #14CA82; +} + +.ui-slider-pips .ui-slider-pip-initial-1 {} + +.ui-slider-pips .ui-slider-pip-initial-2 { + color: #1897C9; +} + +.ui-slider-pips [class*=ui-slider-pip-selected] { + font-weight: bold; + color: #FF7A00; +} + +.ui-slider-pips .ui-slider-pip-inrange { + color: black; +} + +.ui-slider-pips .ui-slider-pip-selected-1 {} + +.ui-slider-pips .ui-slider-pip-selected-2 { + color: #E70081; +} + .ui-slider-pips [class*=ui-slider-pip-selected] .ui-slider-line, -.ui-slider-pips .ui-slider-pip-inrange .ui-slider-line{background:black;} +.ui-slider-pips .ui-slider-pip-inrange .ui-slider-line { + background: black; +} meta.foundation-version { font-family: "/5.5.2/" } + meta.foundation-mq-small { font-family: "/only screen/"; width: 0em } + meta.foundation-mq-small-only { font-family: "/only screen and (max-width: 40em)/"; width: 0em } + meta.foundation-mq-medium { font-family: "/only screen and (min-width:40.0625em)/"; width: 40.0625em } + meta.foundation-mq-medium-only { font-family: "/only screen and (min-width:40.0625em) and (max-width:58.75em)/"; width: 40.0625em } + meta.foundation-mq-large { font-family: "/only screen and (min-width:58.8125em)/"; width: 58.8125em } + meta.foundation-mq-large-only { font-family: "/only screen and (min-width:58.8125em) and (max-width:90em)/"; width: 58.8125em } + meta.foundation-mq-xlarge { font-family: "/only screen and (min-width:90.0625em)/"; width: 90.0625em } + meta.foundation-mq-xlarge-only { font-family: "/only screen and (min-width:90.0625em) and (max-width:120em)/"; width: 90.0625em } + meta.foundation-mq-xxlarge { font-family: "/only screen and (min-width:120.0625em)/"; width: 120.0625em } + meta.foundation-data-attribute-namespace { font-family: false } + html, body { height: 100% } + html { box-sizing: border-box } + *, *:before, *:after { @@ -288,10 +20128,12 @@ html { -moz-box-sizing: inherit; box-sizing: inherit } + html, body { font-size: 100% } + body { background: #fff; color: #7A8491; @@ -304,16 +20146,20 @@ body { padding: 0; position: relative } + a:hover { cursor: pointer } + img { max-width: 100%; height: auto } + img { -ms-interpolation-mode: bicubic } + #map_canvas img, #map_canvas embed, #map_canvas object, @@ -325,89 +20171,111 @@ img { .mqa-display object { max-width: none !important } + .left { float: left !important } + .right { float: right !important } + .clearfix:before, .clearfix:after { content: " "; display: table } + .clearfix:after { clear: both } + .hide { display: none } + .invisible { visibility: hidden } + .antialiased { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale } + img { display: inline-block; vertical-align: middle } + textarea { height: auto; min-height: 50px } + select { width: 100% } + .row { margin: 0 auto; max-width: 75rem; width: 100% } + .row:before, .row:after { content: " "; display: table } + .row:after { clear: both } + .row.collapse>.column, .row.collapse>.columns { padding-left: 0; padding-right: 0 } + .row.collapse .row { margin-left: 0; margin-right: 0 } + .row .row { margin: 0 -0.9375rem; max-width: none; width: auto } + .row .row:before, .row .row:after { content: " "; display: table } + .row .row:after { clear: both } + .row .row.collapse { margin: 0; max-width: none; width: auto } + .row .row.collapse:before, .row .row.collapse:after { content: " "; display: table } + .row .row.collapse:after { clear: both } + .column, .columns { padding-left: 0.9375rem; @@ -415,18 +20283,21 @@ select { width: 100%; float: left } + .column+.column:last-child, .columns+.column:last-child, .column+.columns:last-child, .columns+.columns:last-child { float: right } + .column+.column.end, .columns+.column.end, .column+.columns.end, .columns+.columns.end { float: left } + @media only screen { .small-push-0 { position: relative; @@ -674,6 +20545,7 @@ select { float: left } } + @media only screen and (min-width: 40.0625em) { .medium-push-0 { position: relative; @@ -1041,6 +20913,7 @@ select { left: auto } } + @media only screen and (min-width: 58.8125em) { .large-push-0 { position: relative; @@ -1408,26 +21281,32 @@ select { left: auto } } + .accordion { margin-bottom: 0 } + .accordion:before, .accordion:after { content: " "; display: table } + .accordion:after { clear: both } + .accordion .accordion-navigation, .accordion dd { display: block; margin-bottom: 0 !important } + .accordion .accordion-navigation.active>a, .accordion dd.active>a { background: #e8e8e8 } + .accordion .accordion-navigation>a, .accordion dd>a { background: #EFEFEF; @@ -1437,20 +21316,24 @@ select { font-size: 1rem; padding: 1rem } + .accordion .accordion-navigation>a:hover, .accordion dd>a:hover { background: #e3e3e3 } + .accordion .accordion-navigation>.content, .accordion dd>.content { display: none; padding: 0.9375rem } + .accordion .accordion-navigation>.content.active, .accordion dd>.content.active { background: #fff; display: block } + .alert-box { border-style: solid; border-width: 1px; @@ -1465,6 +21348,7 @@ select { border-color: #13a3d4; color: #fff } + .alert-box .close { right: 0.25rem; background: inherit; @@ -1477,63 +21361,77 @@ select { position: absolute; top: 50% } + .alert-box .close:hover, .alert-box .close:focus { opacity: 0.5 } + .alert-box.radius { border-radius: 5px } + .alert-box.round { border-radius: 1000px } + .alert-box.success { background-color: #43AC6A; border-color: #3a945b; color: #fff } + .alert-box.alert { background-color: #f04124; border-color: #de2d0f; color: #fff } + .alert-box.secondary { background-color: #FF992E; border-color: #ff8404; color: #fff } + .alert-box.warning { background-color: #f08a24; border-color: #de770f; color: #fff } + .alert-box.info { background-color: #a0d3e8; border-color: #74bfdd; color: #663400 } + .alert-box.alert-close { opacity: 0 } + [class*="block-grid-"] { display: block; padding: 0; margin: 0 -0.625rem } + [class*="block-grid-"]:before, [class*="block-grid-"]:after { content: " "; display: table } + [class*="block-grid-"]:after { clear: both } + [class*="block-grid-"]>li { display: block; float: left; height: auto; padding: 0 0.625rem 1.25rem } + @media only screen { .small-block-grid-1>li { list-style: none; @@ -1656,6 +21554,7 @@ select { clear: both } } + @media only screen and (min-width: 40.0625em) { .medium-block-grid-1>li { list-style: none; @@ -1778,6 +21677,7 @@ select { clear: both } } + @media only screen and (min-width: 58.8125em) { .large-block-grid-1>li { list-style: none; @@ -1900,6 +21800,7 @@ select { clear: both } } + .breadcrumbs { border-style: solid; border-width: 1px; @@ -1912,6 +21813,7 @@ select { border-color: #ffbd77; border-radius: 5px } + .breadcrumbs>* { color: #22b8eb; float: left; @@ -1920,33 +21822,41 @@ select { margin: 0; text-transform: uppercase } + .breadcrumbs>*:hover a, .breadcrumbs>*:focus a { text-decoration: underline } + .breadcrumbs>* a { color: #22b8eb } + .breadcrumbs>*.current { color: #333; cursor: default } + .breadcrumbs>*.current a { color: #333; cursor: default } + .breadcrumbs>*.current:hover, .breadcrumbs>*.current:hover a, .breadcrumbs>*.current:focus, .breadcrumbs>*.current:focus a { text-decoration: none } + .breadcrumbs>*.unavailable { color: #999 } + .breadcrumbs>*.unavailable a { color: #999 } + .breadcrumbs>*.unavailable:hover, .breadcrumbs>*.unavailable:hover a, .breadcrumbs>*.unavailable:focus, @@ -1955,6 +21865,7 @@ select { cursor: not-allowed; text-decoration: none } + .breadcrumbs>*:before { color: #aaa; content: "/"; @@ -1962,13 +21873,16 @@ select { position: relative; top: 1px } + .breadcrumbs>*:first-child:before { content: " "; margin: 0 } + [aria-label="breadcrumbs"] [aria-hidden="true"]:after { content: "/" } + button, .button { -webkit-appearance: none; @@ -1992,147 +21906,173 @@ button, color: #fff; transition: background-color 300ms ease-out } + button:hover, button:focus, .button:hover, .button:focus { background-color: #1298c5 } + button:hover, button:focus, .button:hover, .button:focus { color: #fff } + button.secondary, .button.secondary { background-color: #FF992E; border-color: #f17b00; color: #fff } + button.secondary:hover, button.secondary:focus, .button.secondary:hover, .button.secondary:focus { background-color: #f17b00 } + button.secondary:hover, button.secondary:focus, .button.secondary:hover, .button.secondary:focus { color: #fff } + button.success, .button.success { background-color: #43AC6A; border-color: #368a55; color: #fff } + button.success:hover, button.success:focus, .button.success:hover, .button.success:focus { background-color: #368a55 } + button.success:hover, button.success:focus, .button.success:hover, .button.success:focus { color: #fff } + button.alert, .button.alert { background-color: #f04124; border-color: #cf2a0e; color: #fff } + button.alert:hover, button.alert:focus, .button.alert:hover, .button.alert:focus { background-color: #cf2a0e } + button.alert:hover, button.alert:focus, .button.alert:hover, .button.alert:focus { color: #fff } + button.warning, .button.warning { background-color: #f08a24; border-color: #cf6e0e; color: #fff } + button.warning:hover, button.warning:focus, .button.warning:hover, .button.warning:focus { background-color: #cf6e0e } + button.warning:hover, button.warning:focus, .button.warning:hover, .button.warning:focus { color: #fff } + button.info, .button.info { background-color: #a0d3e8; border-color: #61b6d9; color: #333 } + button.info:hover, button.info:focus, .button.info:hover, .button.info:focus { background-color: #61b6d9 } + button.info:hover, button.info:focus, .button.info:hover, .button.info:focus { color: #fff } + button.large, .button.large { padding: 1.125rem 2.25rem 1.1875rem 2.25rem; font-size: 1.25rem } + button.small, .button.small { padding: 0.875rem 1.75rem 0.9375rem 1.75rem; font-size: 0.8125rem } + button.tiny, .button.tiny { padding: 0.625rem 1.25rem 0.6875rem 1.25rem; font-size: 0.6875rem } + button.expand, .button.expand { padding-left: 0; padding-right: 0; width: 100% } + button.left-align, .button.left-align { text-align: left; text-indent: 0.75rem } + button.right-align, .button.right-align { text-align: right; padding-right: 0.75rem } + button.radius, .button.radius { border-radius: 5px } + button.round, .button.round { border-radius: 1000px } + button.disabled, button[disabled], .button.disabled, @@ -2144,6 +22084,7 @@ button[disabled], cursor: default; opacity: 0.7 } + button.disabled:hover, button.disabled:focus, button[disabled]:hover, @@ -2154,6 +22095,7 @@ button[disabled]:focus, .button[disabled]:focus { background-color: #1298c5 } + button.disabled:hover, button.disabled:focus, button[disabled]:hover, @@ -2164,6 +22106,7 @@ button[disabled]:focus, .button[disabled]:focus { color: #fff } + button.disabled:hover, button.disabled:focus, button[disabled]:hover, @@ -2174,6 +22117,7 @@ button[disabled]:focus, .button[disabled]:focus { background-color: #22b8eb } + button.disabled.secondary, button[disabled].secondary, .button.disabled.secondary, @@ -2185,6 +22129,7 @@ button[disabled].secondary, cursor: default; opacity: 0.7 } + button.disabled.secondary:hover, button.disabled.secondary:focus, button[disabled].secondary:hover, @@ -2195,6 +22140,7 @@ button[disabled].secondary:focus, .button[disabled].secondary:focus { background-color: #f17b00 } + button.disabled.secondary:hover, button.disabled.secondary:focus, button[disabled].secondary:hover, @@ -2205,6 +22151,7 @@ button[disabled].secondary:focus, .button[disabled].secondary:focus { color: #fff } + button.disabled.secondary:hover, button.disabled.secondary:focus, button[disabled].secondary:hover, @@ -2215,6 +22162,7 @@ button[disabled].secondary:focus, .button[disabled].secondary:focus { background-color: #FF992E } + button.disabled.success, button[disabled].success, .button.disabled.success, @@ -2226,6 +22174,7 @@ button[disabled].success, cursor: default; opacity: 0.7 } + button.disabled.success:hover, button.disabled.success:focus, button[disabled].success:hover, @@ -2236,6 +22185,7 @@ button[disabled].success:focus, .button[disabled].success:focus { background-color: #368a55 } + button.disabled.success:hover, button.disabled.success:focus, button[disabled].success:hover, @@ -2246,6 +22196,7 @@ button[disabled].success:focus, .button[disabled].success:focus { color: #fff } + button.disabled.success:hover, button.disabled.success:focus, button[disabled].success:hover, @@ -2256,6 +22207,7 @@ button[disabled].success:focus, .button[disabled].success:focus { background-color: #43AC6A } + button.disabled.alert, button[disabled].alert, .button.disabled.alert, @@ -2267,6 +22219,7 @@ button[disabled].alert, cursor: default; opacity: 0.7 } + button.disabled.alert:hover, button.disabled.alert:focus, button[disabled].alert:hover, @@ -2277,6 +22230,7 @@ button[disabled].alert:focus, .button[disabled].alert:focus { background-color: #cf2a0e } + button.disabled.alert:hover, button.disabled.alert:focus, button[disabled].alert:hover, @@ -2287,6 +22241,7 @@ button[disabled].alert:focus, .button[disabled].alert:focus { color: #fff } + button.disabled.alert:hover, button.disabled.alert:focus, button[disabled].alert:hover, @@ -2297,6 +22252,7 @@ button[disabled].alert:focus, .button[disabled].alert:focus { background-color: #f04124 } + button.disabled.warning, button[disabled].warning, .button.disabled.warning, @@ -2308,6 +22264,7 @@ button[disabled].warning, cursor: default; opacity: 0.7 } + button.disabled.warning:hover, button.disabled.warning:focus, button[disabled].warning:hover, @@ -2318,6 +22275,7 @@ button[disabled].warning:focus, .button[disabled].warning:focus { background-color: #cf6e0e } + button.disabled.warning:hover, button.disabled.warning:focus, button[disabled].warning:hover, @@ -2328,6 +22286,7 @@ button[disabled].warning:focus, .button[disabled].warning:focus { color: #fff } + button.disabled.warning:hover, button.disabled.warning:focus, button[disabled].warning:hover, @@ -2338,6 +22297,7 @@ button[disabled].warning:focus, .button[disabled].warning:focus { background-color: #f08a24 } + button.disabled.info, button[disabled].info, .button.disabled.info, @@ -2349,6 +22309,7 @@ button[disabled].info, cursor: default; opacity: 0.7 } + button.disabled.info:hover, button.disabled.info:focus, button[disabled].info:hover, @@ -2359,6 +22320,7 @@ button[disabled].info:focus, .button[disabled].info:focus { background-color: #61b6d9 } + button.disabled.info:hover, button.disabled.info:focus, button[disabled].info:hover, @@ -2369,6 +22331,7 @@ button[disabled].info:focus, .button[disabled].info:focus { color: #fff } + button.disabled.info:hover, button.disabled.info:focus, button[disabled].info:hover, @@ -2379,182 +22342,222 @@ button[disabled].info:focus, .button[disabled].info:focus { background-color: #a0d3e8 } + button::-moz-focus-inner { border: 0; padding: 0 } + @media only screen and (min-width: 40.0625em) { button, .button { display: inline-block } } + .button-group { list-style: none; margin: 0; left: 0 } + .button-group:before, .button-group:after { content: " "; display: table } + .button-group:after { clear: both } + .button-group.even-2 li { display: inline-block; margin: 0 -2px; width: 50% } + .button-group.even-2 li>button, .button-group.even-2 li .button { border-left: 1px solid; border-color: rgba(255, 255, 255, 0.5) } + .button-group.even-2 li:first-child button, .button-group.even-2 li:first-child .button { border-left: 0 } + .button-group.even-2 li button, .button-group.even-2 li .button { width: 100% } + .button-group.even-3 li { display: inline-block; margin: 0 -2px; width: 33.33333% } + .button-group.even-3 li>button, .button-group.even-3 li .button { border-left: 1px solid; border-color: rgba(255, 255, 255, 0.5) } + .button-group.even-3 li:first-child button, .button-group.even-3 li:first-child .button { border-left: 0 } + .button-group.even-3 li button, .button-group.even-3 li .button { width: 100% } + .button-group.even-4 li { display: inline-block; margin: 0 -2px; width: 25% } + .button-group.even-4 li>button, .button-group.even-4 li .button { border-left: 1px solid; border-color: rgba(255, 255, 255, 0.5) } + .button-group.even-4 li:first-child button, .button-group.even-4 li:first-child .button { border-left: 0 } + .button-group.even-4 li button, .button-group.even-4 li .button { width: 100% } + .button-group.even-5 li { display: inline-block; margin: 0 -2px; width: 20% } + .button-group.even-5 li>button, .button-group.even-5 li .button { border-left: 1px solid; border-color: rgba(255, 255, 255, 0.5) } + .button-group.even-5 li:first-child button, .button-group.even-5 li:first-child .button { border-left: 0 } + .button-group.even-5 li button, .button-group.even-5 li .button { width: 100% } + .button-group.even-6 li { display: inline-block; margin: 0 -2px; width: 16.66667% } + .button-group.even-6 li>button, .button-group.even-6 li .button { border-left: 1px solid; border-color: rgba(255, 255, 255, 0.5) } + .button-group.even-6 li:first-child button, .button-group.even-6 li:first-child .button { border-left: 0 } + .button-group.even-6 li button, .button-group.even-6 li .button { width: 100% } + .button-group.even-7 li { display: inline-block; margin: 0 -2px; width: 14.28571% } + .button-group.even-7 li>button, .button-group.even-7 li .button { border-left: 1px solid; border-color: rgba(255, 255, 255, 0.5) } + .button-group.even-7 li:first-child button, .button-group.even-7 li:first-child .button { border-left: 0 } + .button-group.even-7 li button, .button-group.even-7 li .button { width: 100% } + .button-group.even-8 li { display: inline-block; margin: 0 -2px; width: 12.5% } + .button-group.even-8 li>button, .button-group.even-8 li .button { border-left: 1px solid; border-color: rgba(255, 255, 255, 0.5) } + .button-group.even-8 li:first-child button, .button-group.even-8 li:first-child .button { border-left: 0 } + .button-group.even-8 li button, .button-group.even-8 li .button { width: 100% } + .button-group>li { display: inline-block; margin: 0 -2px } + .button-group>li>button, .button-group>li .button { border-left: 1px solid; border-color: rgba(255, 255, 255, 0.5) } + .button-group>li:first-child button, .button-group>li:first-child .button { border-left: 0 } + .button-group.stack>li { display: block; margin: 0; float: none } + .button-group.stack>li>button, .button-group.stack>li .button { border-left: 1px solid; border-color: rgba(255, 255, 255, 0.5) } + .button-group.stack>li:first-child button, .button-group.stack>li:first-child .button { border-left: 0 } + .button-group.stack>li>button, .button-group.stack>li .button { border-color: rgba(255, 255, 255, 0.5); @@ -2563,26 +22566,32 @@ button::-moz-focus-inner { display: block; margin: 0 } + .button-group.stack>li>button { width: 100% } + .button-group.stack>li:first-child button, .button-group.stack>li:first-child .button { border-top: 0 } + .button-group.stack-for-small>li { display: inline-block; margin: 0 -2px } + .button-group.stack-for-small>li>button, .button-group.stack-for-small>li .button { border-left: 1px solid; border-color: rgba(255, 255, 255, 0.5) } + .button-group.stack-for-small>li:first-child button, .button-group.stack-for-small>li:first-child .button { border-left: 0 } + @media only screen and (max-width: 40em) { .button-group.stack-for-small>li { display: block; @@ -2613,25 +22622,30 @@ button::-moz-focus-inner { border-top: 0 } } + .button-group.radius>* { display: inline-block; margin: 0 -2px } + .button-group.radius>*>button, .button-group.radius>* .button { border-left: 1px solid; border-color: rgba(255, 255, 255, 0.5) } + .button-group.radius>*:first-child button, .button-group.radius>*:first-child .button { border-left: 0 } + .button-group.radius>*, .button-group.radius>*>a, .button-group.radius>*>button, .button-group.radius>*>.button { border-radius: 0 } + .button-group.radius>*:first-child, .button-group.radius>*:first-child>a, .button-group.radius>*:first-child>button, @@ -2641,6 +22655,7 @@ button::-moz-focus-inner { border-bottom-left-radius: 5px; border-top-left-radius: 5px } + .button-group.radius>*:last-child, .button-group.radius>*:last-child>a, .button-group.radius>*:last-child>button, @@ -2650,19 +22665,23 @@ button::-moz-focus-inner { border-bottom-right-radius: 5px; border-top-right-radius: 5px } + .button-group.radius.stack>* { display: block; margin: 0 } + .button-group.radius.stack>*>button, .button-group.radius.stack>* .button { border-left: 1px solid; border-color: rgba(255, 255, 255, 0.5) } + .button-group.radius.stack>*:first-child button, .button-group.radius.stack>*:first-child .button { border-left: 0 } + .button-group.radius.stack>*>button, .button-group.radius.stack>* .button { border-color: rgba(255, 255, 255, 0.5); @@ -2671,19 +22690,23 @@ button::-moz-focus-inner { display: block; margin: 0 } + .button-group.radius.stack>*>button { width: 100% } + .button-group.radius.stack>*:first-child button, .button-group.radius.stack>*:first-child .button { border-top: 0 } + .button-group.radius.stack>*, .button-group.radius.stack>*>a, .button-group.radius.stack>*>button, .button-group.radius.stack>*>.button { border-radius: 0 } + .button-group.radius.stack>*:first-child, .button-group.radius.stack>*:first-child>a, .button-group.radius.stack>*:first-child>button, @@ -2693,6 +22716,7 @@ button::-moz-focus-inner { border-top-left-radius: 5px; border-top-right-radius: 5px } + .button-group.radius.stack>*:last-child, .button-group.radius.stack>*:last-child>a, .button-group.radius.stack>*:last-child>button, @@ -2702,6 +22726,7 @@ button::-moz-focus-inner { border-bottom-left-radius: 5px; border-bottom-right-radius: 5px } + @media only screen and (min-width: 40.0625em) { .button-group.radius.stack-for-small>* { display: inline-block; @@ -2741,6 +22766,7 @@ button::-moz-focus-inner { border-top-right-radius: 5px } } + @media only screen and (max-width: 40em) { .button-group.radius.stack-for-small>* { display: block; @@ -2795,25 +22821,30 @@ button::-moz-focus-inner { border-bottom-right-radius: 5px } } + .button-group.round>* { display: inline-block; margin: 0 -2px } + .button-group.round>*>button, .button-group.round>* .button { border-left: 1px solid; border-color: rgba(255, 255, 255, 0.5) } + .button-group.round>*:first-child button, .button-group.round>*:first-child .button { border-left: 0 } + .button-group.round>*, .button-group.round>*>a, .button-group.round>*>button, .button-group.round>*>.button { border-radius: 0 } + .button-group.round>*:first-child, .button-group.round>*:first-child>a, .button-group.round>*:first-child>button, @@ -2823,6 +22854,7 @@ button::-moz-focus-inner { border-bottom-left-radius: 1000px; border-top-left-radius: 1000px } + .button-group.round>*:last-child, .button-group.round>*:last-child>a, .button-group.round>*:last-child>button, @@ -2832,19 +22864,23 @@ button::-moz-focus-inner { border-bottom-right-radius: 1000px; border-top-right-radius: 1000px } + .button-group.round.stack>* { display: block; margin: 0 } + .button-group.round.stack>*>button, .button-group.round.stack>* .button { border-left: 1px solid; border-color: rgba(255, 255, 255, 0.5) } + .button-group.round.stack>*:first-child button, .button-group.round.stack>*:first-child .button { border-left: 0 } + .button-group.round.stack>*>button, .button-group.round.stack>* .button { border-color: rgba(255, 255, 255, 0.5); @@ -2853,19 +22889,23 @@ button::-moz-focus-inner { display: block; margin: 0 } + .button-group.round.stack>*>button { width: 100% } + .button-group.round.stack>*:first-child button, .button-group.round.stack>*:first-child .button { border-top: 0 } + .button-group.round.stack>*, .button-group.round.stack>*>a, .button-group.round.stack>*>button, .button-group.round.stack>*>.button { border-radius: 0 } + .button-group.round.stack>*:first-child, .button-group.round.stack>*:first-child>a, .button-group.round.stack>*:first-child>button, @@ -2875,6 +22915,7 @@ button::-moz-focus-inner { border-top-left-radius: 1rem; border-top-right-radius: 1rem } + .button-group.round.stack>*:last-child, .button-group.round.stack>*:last-child>a, .button-group.round.stack>*:last-child>button, @@ -2884,6 +22925,7 @@ button::-moz-focus-inner { border-bottom-left-radius: 1rem; border-bottom-right-radius: 1rem } + @media only screen and (min-width: 40.0625em) { .button-group.round.stack-for-small>* { display: inline-block; @@ -2923,6 +22965,7 @@ button::-moz-focus-inner { border-top-right-radius: 1000px } } + @media only screen and (max-width: 40em) { .button-group.round.stack-for-small>* { display: block; @@ -2977,27 +23020,33 @@ button::-moz-focus-inner { border-bottom-right-radius: 1rem } } + .button-bar:before, .button-bar:after { content: " "; display: table } + .button-bar:after { clear: both } + .button-bar .button-group { float: left; margin-right: 0.625rem } + .button-bar .button-group div { overflow: hidden } + .clearing-thumbs, [data-clearing] { list-style: none; margin-left: 0; margin-bottom: 0 } + .clearing-thumbs:before, .clearing-thumbs:after, [data-clearing]:before, @@ -3005,19 +23054,23 @@ button::-moz-focus-inner { content: " "; display: table } + .clearing-thumbs:after, [data-clearing]:after { clear: both } + .clearing-thumbs li, [data-clearing] li { float: left; margin-right: 10px } + .clearing-thumbs[class*="block-grid-"] li, [data-clearing][class*="block-grid-"] li { margin-right: 0 } + .clearing-blackout { background: #333; height: 100%; @@ -3027,9 +23080,11 @@ button::-moz-focus-inner { z-index: 998; left: 0 } + .clearing-blackout .clearing-close { display: block } + .clearing-container { height: 100%; margin: 0; @@ -3037,6 +23092,7 @@ button::-moz-focus-inner { position: relative; z-index: 998 } + .clearing-touch-label { color: #aaa; font-size: .6em; @@ -3044,10 +23100,12 @@ button::-moz-focus-inner { position: absolute; top: 50% } + .visible-img { height: 95%; position: relative } + .visible-img img { position: absolute; left: 50%; @@ -3060,6 +23118,7 @@ button::-moz-focus-inner { max-height: 100%; max-width: 100% } + .clearing-caption { background: #333; bottom: 0; @@ -3073,6 +23132,7 @@ button::-moz-focus-inner { width: 100%; left: 0 } + .clearing-close { color: #ccc; display: none; @@ -3082,22 +23142,28 @@ button::-moz-focus-inner { padding-top: 10px; z-index: 999 } + .clearing-close:hover, .clearing-close:focus { color: #ccc } + .clearing-assembled .clearing-container { height: 100% } + .clearing-assembled .clearing-container .carousel>ul { display: none } + .clearing-feature li { display: none } + .clearing-feature li.clearing-featured-img { display: block } + @media only screen and (min-width: 40.0625em) { .clearing-main-prev, .clearing-main-next { @@ -3196,6 +23262,7 @@ button::-moz-focus-inner { right: 20px } } + .f-dropdown { display: none; left: -9999px; @@ -3212,15 +23279,19 @@ button::-moz-focus-inner { margin-top: 2px; max-width: 200px } + .f-dropdown.open { display: block } + .f-dropdown>*:first-child { margin-top: 0 } + .f-dropdown>*:last-child { margin-bottom: 0 } + .f-dropdown:before { border: inset 6px; content: ""; @@ -3234,6 +23305,7 @@ button::-moz-focus-inner { left: 10px; z-index: 89 } + .f-dropdown:after { border: inset 7px; content: ""; @@ -3247,14 +23319,17 @@ button::-moz-focus-inner { left: 9px; z-index: 88 } + .f-dropdown.right:before { left: auto; right: 10px } + .f-dropdown.right:after { left: auto; right: 9px } + .f-dropdown.drop-right { display: none; left: -9999px; @@ -3272,15 +23347,19 @@ button::-moz-focus-inner { margin-left: 2px; max-width: 200px } + .f-dropdown.drop-right.open { display: block } + .f-dropdown.drop-right>*:first-child { margin-top: 0 } + .f-dropdown.drop-right>*:last-child { margin-bottom: 0 } + .f-dropdown.drop-right:before { border: inset 6px; content: ""; @@ -3294,6 +23373,7 @@ button::-moz-focus-inner { left: -12px; z-index: 89 } + .f-dropdown.drop-right:after { border: inset 7px; content: ""; @@ -3307,6 +23387,7 @@ button::-moz-focus-inner { left: -14px; z-index: 88 } + .f-dropdown.drop-left { display: none; left: -9999px; @@ -3324,15 +23405,19 @@ button::-moz-focus-inner { margin-left: -2px; max-width: 200px } + .f-dropdown.drop-left.open { display: block } + .f-dropdown.drop-left>*:first-child { margin-top: 0 } + .f-dropdown.drop-left>*:last-child { margin-bottom: 0 } + .f-dropdown.drop-left:before { border: inset 6px; content: ""; @@ -3347,6 +23432,7 @@ button::-moz-focus-inner { left: auto; z-index: 89 } + .f-dropdown.drop-left:after { border: inset 7px; content: ""; @@ -3361,6 +23447,7 @@ button::-moz-focus-inner { left: auto; z-index: 88 } + .f-dropdown.drop-top { display: none; left: -9999px; @@ -3378,15 +23465,19 @@ button::-moz-focus-inner { margin-top: -2px; max-width: 200px } + .f-dropdown.drop-top.open { display: block } + .f-dropdown.drop-top>*:first-child { margin-top: 0 } + .f-dropdown.drop-top>*:last-child { margin-bottom: 0 } + .f-dropdown.drop-top:before { border: inset 6px; content: ""; @@ -3402,6 +23493,7 @@ button::-moz-focus-inner { right: auto; z-index: 89 } + .f-dropdown.drop-top:after { border: inset 7px; content: ""; @@ -3417,24 +23509,29 @@ button::-moz-focus-inner { right: auto; z-index: 88 } + .f-dropdown li { cursor: pointer; font-size: 0.875rem; line-height: 1.125rem; margin: 0 } + .f-dropdown li:hover, .f-dropdown li:focus { background: #eee } + .f-dropdown li.radius { border-radius: 5px } + .f-dropdown li a { display: block; padding: 0.5rem; color: #555 } + .f-dropdown.content { display: none; left: -9999px; @@ -3451,39 +23548,50 @@ button::-moz-focus-inner { z-index: 89; max-width: 200px } + .f-dropdown.content.open { display: block } + .f-dropdown.content>*:first-child { margin-top: 0 } + .f-dropdown.content>*:last-child { margin-bottom: 0 } + .f-dropdown.tiny { max-width: 200px } + .f-dropdown.small { max-width: 300px } + .f-dropdown.medium { max-width: 500px } + .f-dropdown.large { max-width: 800px } + .f-dropdown.mega { width: 100% !important; max-width: 100% !important } + .f-dropdown.mega.open { left: 0 !important } + .dropdown.button, button.dropdown { position: relative; padding-right: 3.5625rem } + .dropdown.button::after, button.dropdown::after { border-color: #fff transparent transparent transparent; @@ -3495,62 +23603,75 @@ button.dropdown::after { top: 50%; width: 0 } + .dropdown.button::after, button.dropdown::after { border-width: 0.375rem; right: 1.40625rem; margin-top: -0.15625rem } + .dropdown.button::after, button.dropdown::after { border-color: #fff transparent transparent transparent } + .dropdown.button.tiny, button.dropdown.tiny { padding-right: 2.625rem } + .dropdown.button.tiny:after, button.dropdown.tiny:after { border-width: 0.375rem; right: 1.125rem; margin-top: -0.125rem } + .dropdown.button.tiny::after, button.dropdown.tiny::after { border-color: #fff transparent transparent transparent } + .dropdown.button.small, button.dropdown.small { padding-right: 3.0625rem } + .dropdown.button.small::after, button.dropdown.small::after { border-width: 0.4375rem; right: 1.3125rem; margin-top: -0.15625rem } + .dropdown.button.small::after, button.dropdown.small::after { border-color: #fff transparent transparent transparent } + .dropdown.button.large, button.dropdown.large { padding-right: 3.625rem } + .dropdown.button.large::after, button.dropdown.large::after { border-width: 0.3125rem; right: 1.71875rem; margin-top: -0.15625rem } + .dropdown.button.large::after, button.dropdown.large::after { border-color: #fff transparent transparent transparent } + .dropdown.button.secondary:after, button.dropdown.secondary:after { border-color: #333 transparent transparent transparent } + .flex-video { height: 0; margin-bottom: 1rem; @@ -3559,12 +23680,15 @@ button.dropdown.secondary:after { padding-top: 1.5625rem; position: relative } + .flex-video.widescreen { padding-bottom: 56.34% } + .flex-video.vimeo { padding-top: 0 } + .flex-video iframe, .flex-video object, .flex-video embed, @@ -3575,35 +23699,43 @@ button.dropdown.secondary:after { width: 100%; left: 0 } + form { margin: 0 0 1rem } + form .row .row { margin: 0 -0.5rem } + form .row .row .column, form .row .row .columns { padding: 0 0.5rem } + form .row .row.collapse { margin: 0 } + form .row .row.collapse .column, form .row .row.collapse .columns { padding: 0 } + form .row .row.collapse input { -webkit-border-bottom-right-radius: 0; -webkit-border-top-right-radius: 0; border-bottom-right-radius: 0; border-top-right-radius: 0 } + form .row input.column, form .row input.columns, form .row textarea.column, form .row textarea.columns { padding-left: 0.5rem } + label { color: #4d4d4d; cursor: pointer; @@ -3613,18 +23745,22 @@ label { line-height: 2; margin-bottom: 0 } + label.right { float: none !important; text-align: right } + label.inline { margin: 0 0 1rem 0; padding: 0.5625rem 0 } + label small { text-transform: capitalize; color: #676767 } + .prefix, .postfix { border-style: solid; @@ -3641,9 +23777,11 @@ label small { width: 100%; z-index: 2 } + .postfix.button { border-color: true } + .prefix.button { border: none; padding-left: 0; @@ -3652,6 +23790,7 @@ label small { padding-top: 0; text-align: center } + .prefix.button.radius { border-radius: 0; -webkit-border-bottom-left-radius: 5px; @@ -3659,6 +23798,7 @@ label small { border-bottom-left-radius: 5px; border-top-left-radius: 5px } + .postfix.button.radius { border-radius: 0; -webkit-border-bottom-right-radius: 5px; @@ -3666,6 +23806,7 @@ label small { border-bottom-right-radius: 5px; border-top-right-radius: 5px } + .prefix.button.round { border-radius: 0; -webkit-border-bottom-left-radius: 1000px; @@ -3673,6 +23814,7 @@ label small { border-bottom-left-radius: 1000px; border-top-left-radius: 1000px } + .postfix.button.round { border-radius: 0; -webkit-border-bottom-right-radius: 1000px; @@ -3680,6 +23822,7 @@ label small { border-bottom-right-radius: 1000px; border-top-right-radius: 1000px } + span.prefix, label.prefix { background: #f2f2f2; @@ -3687,12 +23830,14 @@ label.prefix { color: #333; border-color: #ccc } + span.postfix, label.postfix { background: #f2f2f2; color: #333; border-color: #ccc } + input[type="text"], input[type="password"], input[type="date"], @@ -3733,6 +23878,7 @@ textarea { -o-transition: border-color 0.15s linear, background 0.15s linear; transition: border-color 0.15s linear, background 0.15s linear } + input[type="text"]:focus, input[type="password"]:focus, input[type="date"]:focus, @@ -3752,6 +23898,7 @@ textarea:focus { border-color: #999; outline: none } + input[type="text"]:disabled, input[type="password"]:disabled, input[type="date"]:disabled, @@ -3770,6 +23917,7 @@ textarea:disabled { background-color: #ddd; cursor: default } + input[type="text"][disabled], input[type="text"][readonly], fieldset[disabled] input[type="text"], @@ -3818,6 +23966,7 @@ fieldset[disabled] textarea { background-color: #ddd; cursor: default } + input[type="text"].radius, input[type="password"].radius, input[type="date"].radius, @@ -3835,6 +23984,7 @@ input[type="color"].radius, textarea.radius { border-radius: 5px } + form .row .prefix-radius.row.collapse input, form .row .prefix-radius.row.collapse textarea, form .row .prefix-radius.row.collapse select, @@ -3845,6 +23995,7 @@ form .row .prefix-radius.row.collapse button { border-bottom-right-radius: 5px; border-top-right-radius: 5px } + form .row .prefix-radius.row.collapse .prefix { border-radius: 0; -webkit-border-bottom-left-radius: 5px; @@ -3852,6 +24003,7 @@ form .row .prefix-radius.row.collapse .prefix { border-bottom-left-radius: 5px; border-top-left-radius: 5px } + form .row .postfix-radius.row.collapse input, form .row .postfix-radius.row.collapse textarea, form .row .postfix-radius.row.collapse select, @@ -3862,6 +24014,7 @@ form .row .postfix-radius.row.collapse button { border-bottom-left-radius: 5px; border-top-left-radius: 5px } + form .row .postfix-radius.row.collapse .postfix { border-radius: 0; -webkit-border-bottom-right-radius: 5px; @@ -3869,6 +24022,7 @@ form .row .postfix-radius.row.collapse .postfix { border-bottom-right-radius: 5px; border-top-right-radius: 5px } + form .row .prefix-round.row.collapse input, form .row .prefix-round.row.collapse textarea, form .row .prefix-round.row.collapse select, @@ -3879,6 +24033,7 @@ form .row .prefix-round.row.collapse button { border-bottom-right-radius: 1000px; border-top-right-radius: 1000px } + form .row .prefix-round.row.collapse .prefix { border-radius: 0; -webkit-border-bottom-left-radius: 1000px; @@ -3886,6 +24041,7 @@ form .row .prefix-round.row.collapse .prefix { border-bottom-left-radius: 1000px; border-top-left-radius: 1000px } + form .row .postfix-round.row.collapse input, form .row .postfix-round.row.collapse textarea, form .row .postfix-round.row.collapse select, @@ -3896,6 +24052,7 @@ form .row .postfix-round.row.collapse button { border-bottom-left-radius: 1000px; border-top-left-radius: 1000px } + form .row .postfix-round.row.collapse .postfix { border-radius: 0; -webkit-border-bottom-right-radius: 1000px; @@ -3903,29 +24060,37 @@ form .row .postfix-round.row.collapse .postfix { border-bottom-right-radius: 1000px; border-top-right-radius: 1000px } + input[type="submit"] { -webkit-appearance: none; -moz-appearance: none; border-radius: 0 } + textarea[rows] { height: auto } + textarea { max-width: 100% } + ::-webkit-input-placeholder { color: #ccc } + :-moz-placeholder { color: #ccc } + ::-moz-placeholder { color: #ccc } + :-ms-input-placeholder { color: #ccc } + select { -webkit-appearance: none !important; -moz-appearance: none !important; @@ -3945,29 +24110,36 @@ select { border-radius: 0; height: 2.375rem } + select::-ms-expand { display: none } + select.radius { border-radius: 5px } + select:hover { background-color: #f3f3f3; border-color: #999 } + select:disabled { background-color: #ddd; cursor: default } + select[multiple] { height: auto } + input[type="file"], input[type="checkbox"], input[type="radio"], select { margin: 0 0 1rem 0 } + input[type="checkbox"]+label, input[type="radio"]+label { display: inline-block; @@ -3976,14 +24148,17 @@ input[type="radio"]+label { margin-bottom: 0; vertical-align: baseline } + input[type="file"] { width: 100% } + fieldset { border: 1px solid #ddd; margin: 1.125rem 0; padding: 1.25rem } + fieldset legend { background: #fff; font-weight: bold; @@ -3991,6 +24166,7 @@ fieldset legend { margin: 0; padding: 0 0.1875rem } + [data-abide] .error small.error, [data-abide] .error span.error, [data-abide] span.error, @@ -4005,10 +24181,12 @@ fieldset legend { background: #f04124; color: #fff } + [data-abide] span.error, [data-abide] small.error { display: none } + span.error, small.error { display: block; @@ -4021,19 +24199,23 @@ small.error { background: #f04124; color: #fff } + .error input, .error textarea, .error select { margin-bottom: 0 } + .error input[type="checkbox"], .error input[type="radio"] { margin-bottom: 1rem } + .error label, .error label.error { color: #f04124 } + .error small.error { display: block; font-size: 0.75rem; @@ -4045,6 +24227,7 @@ small.error { background: #f04124; color: #fff } + .error>label>small { background: transparent; color: #676767; @@ -4055,23 +24238,28 @@ small.error { padding: 0; text-transform: capitalize } + .error span.error-message { display: block } + input.error, textarea.error, select.error { margin-bottom: 0 } + label.error { color: #f04124 } + .icon-bar { display: inline-block; font-size: 0; width: 100%; background: #333 } + .icon-bar>* { display: block; float: left; @@ -4081,49 +24269,60 @@ label.error { text-align: center; width: 25% } + .icon-bar>* i, .icon-bar>* img { display: block; margin: 0 auto } + .icon-bar>* i+label, .icon-bar>* img+label { margin-top: .0625rem } + .icon-bar>* i { font-size: 1.875rem; vertical-align: middle } + .icon-bar>* img { height: 1.875rem; width: 1.875rem } + .icon-bar.label-right>* i, .icon-bar.label-right>* img { display: inline-block; margin: 0 .0625rem 0 0 } + .icon-bar.label-right>* i+label, .icon-bar.label-right>* img+label { margin-top: 0 } + .icon-bar.label-right>* label { display: inline-block } + .icon-bar.vertical.label-right>* { text-align: left } + .icon-bar.vertical, .icon-bar.small-vertical { height: 100%; width: auto } + .icon-bar.vertical .item, .icon-bar.small-vertical .item { float: none; margin: auto; width: auto } + @media only screen and (min-width: 40.0625em) { .icon-bar.medium-vertical { height: 100%; @@ -4135,6 +24334,7 @@ label.error { width: auto } } + @media only screen and (min-width: 58.8125em) { .icon-bar.large-vertical { height: 100%; @@ -4146,293 +24346,364 @@ label.error { width: auto } } + .icon-bar>* { font-size: 1rem; padding: 1.25rem } + .icon-bar>* i+label, .icon-bar>* img+label { margin-top: .0625rem; font-size: 1rem } + .icon-bar>* i { font-size: 1.875rem } + .icon-bar>* img { height: 1.875rem; width: 1.875rem } + .icon-bar>* label { color: #fff } + .icon-bar>* i { color: #fff } + .icon-bar>a:hover { background: #22b8eb } + .icon-bar>a:hover label { color: #fff } + .icon-bar>a:hover i { color: #fff } + .icon-bar>a.active { background: #22b8eb } + .icon-bar>a.active label { color: #fff } + .icon-bar>a.active i { color: #fff } + .icon-bar .item.disabled { cursor: not-allowed; opacity: 0.7; pointer-events: none } + .icon-bar .item.disabled>* { opacity: 0.7; cursor: not-allowed } + .icon-bar.two-up .item { width: 50% } + .icon-bar.two-up.vertical .item, .icon-bar.two-up.small-vertical .item { width: auto } + @media only screen and (min-width: 40.0625em) { .icon-bar.two-up.medium-vertical .item { width: auto } } + @media only screen and (min-width: 58.8125em) { .icon-bar.two-up.large-vertical .item { width: auto } } + .icon-bar.three-up .item { width: 33.3333% } + .icon-bar.three-up.vertical .item, .icon-bar.three-up.small-vertical .item { width: auto } + @media only screen and (min-width: 40.0625em) { .icon-bar.three-up.medium-vertical .item { width: auto } } + @media only screen and (min-width: 58.8125em) { .icon-bar.three-up.large-vertical .item { width: auto } } + .icon-bar.four-up .item { width: 25% } + .icon-bar.four-up.vertical .item, .icon-bar.four-up.small-vertical .item { width: auto } + @media only screen and (min-width: 40.0625em) { .icon-bar.four-up.medium-vertical .item { width: auto } } + @media only screen and (min-width: 58.8125em) { .icon-bar.four-up.large-vertical .item { width: auto } } + .icon-bar.five-up .item { width: 20% } + .icon-bar.five-up.vertical .item, .icon-bar.five-up.small-vertical .item { width: auto } + @media only screen and (min-width: 40.0625em) { .icon-bar.five-up.medium-vertical .item { width: auto } } + @media only screen and (min-width: 58.8125em) { .icon-bar.five-up.large-vertical .item { width: auto } } + .icon-bar.six-up .item { width: 16.66667% } + .icon-bar.six-up.vertical .item, .icon-bar.six-up.small-vertical .item { width: auto } + @media only screen and (min-width: 40.0625em) { .icon-bar.six-up.medium-vertical .item { width: auto } } + @media only screen and (min-width: 58.8125em) { .icon-bar.six-up.large-vertical .item { width: auto } } + .icon-bar.seven-up .item { width: 14.28571% } + .icon-bar.seven-up.vertical .item, .icon-bar.seven-up.small-vertical .item { width: auto } + @media only screen and (min-width: 40.0625em) { .icon-bar.seven-up.medium-vertical .item { width: auto } } + @media only screen and (min-width: 58.8125em) { .icon-bar.seven-up.large-vertical .item { width: auto } } + .icon-bar.eight-up .item { width: 12.5% } + .icon-bar.eight-up.vertical .item, .icon-bar.eight-up.small-vertical .item { width: auto } + @media only screen and (min-width: 40.0625em) { .icon-bar.eight-up.medium-vertical .item { width: auto } } + @media only screen and (min-width: 58.8125em) { .icon-bar.eight-up.large-vertical .item { width: auto } } + .icon-bar.two-up .item { width: 50% } + .icon-bar.two-up.vertical .item, .icon-bar.two-up.small-vertical .item { width: auto } + @media only screen and (min-width: 40.0625em) { .icon-bar.two-up.medium-vertical .item { width: auto } } + @media only screen and (min-width: 58.8125em) { .icon-bar.two-up.large-vertical .item { width: auto } } + .icon-bar.three-up .item { width: 33.3333% } + .icon-bar.three-up.vertical .item, .icon-bar.three-up.small-vertical .item { width: auto } + @media only screen and (min-width: 40.0625em) { .icon-bar.three-up.medium-vertical .item { width: auto } } + @media only screen and (min-width: 58.8125em) { .icon-bar.three-up.large-vertical .item { width: auto } } + .icon-bar.four-up .item { width: 25% } + .icon-bar.four-up.vertical .item, .icon-bar.four-up.small-vertical .item { width: auto } + @media only screen and (min-width: 40.0625em) { .icon-bar.four-up.medium-vertical .item { width: auto } } + @media only screen and (min-width: 58.8125em) { .icon-bar.four-up.large-vertical .item { width: auto } } + .icon-bar.five-up .item { width: 20% } + .icon-bar.five-up.vertical .item, .icon-bar.five-up.small-vertical .item { width: auto } + @media only screen and (min-width: 40.0625em) { .icon-bar.five-up.medium-vertical .item { width: auto } } + @media only screen and (min-width: 58.8125em) { .icon-bar.five-up.large-vertical .item { width: auto } } + .icon-bar.six-up .item { width: 16.66667% } + .icon-bar.six-up.vertical .item, .icon-bar.six-up.small-vertical .item { width: auto } + @media only screen and (min-width: 40.0625em) { .icon-bar.six-up.medium-vertical .item { width: auto } } + @media only screen and (min-width: 58.8125em) { .icon-bar.six-up.large-vertical .item { width: auto } } + .icon-bar.seven-up .item { width: 14.28571% } + .icon-bar.seven-up.vertical .item, .icon-bar.seven-up.small-vertical .item { width: auto } + @media only screen and (min-width: 40.0625em) { .icon-bar.seven-up.medium-vertical .item { width: auto } } + @media only screen and (min-width: 58.8125em) { .icon-bar.seven-up.large-vertical .item { width: auto } } + .icon-bar.eight-up .item { width: 12.5% } + .icon-bar.eight-up.vertical .item, .icon-bar.eight-up.small-vertical .item { width: auto } + @media only screen and (min-width: 40.0625em) { .icon-bar.eight-up.medium-vertical .item { width: auto } } + @media only screen and (min-width: 58.8125em) { .icon-bar.eight-up.large-vertical .item { width: auto } } + .inline-list { list-style: none; margin-left: -1.375rem; @@ -4441,18 +24712,22 @@ label.error { overflow: hidden; padding: 0 } + .inline-list>li { display: block; float: left; list-style: none; margin-left: 1.375rem } + .inline-list>li>* { display: block } + .joyride-list { display: none } + .joyride-tip-guide { background: #333; color: #fff; @@ -4465,21 +24740,26 @@ label.error { z-index: 101; left: 2.5% } + .lt-ie9 .joyride-tip-guide { margin-left: -400px; max-width: 800px; left: 50% } + .joyride-content-wrapper { padding: 1.125rem 1.25rem 1.5rem; width: 100% } + .joyride-content-wrapper .button { margin-bottom: 0 !important } + .joyride-content-wrapper .joyride-prev-tip { margin-right: 10px } + .joyride-tip-guide .joyride-nub { border: 10px solid #333; display: block; @@ -4488,6 +24768,7 @@ label.error { width: 0; left: 22px } + .joyride-tip-guide .joyride-nub.top { border-color: #333; border-top-color: transparent !important; @@ -4496,6 +24777,7 @@ label.error { border-right-color: transparent !important; top: -20px } + .joyride-tip-guide .joyride-nub.bottom { border-color: #333 !important; border-bottom-color: transparent !important; @@ -4504,12 +24786,15 @@ label.error { border-right-color: transparent !important; bottom: -20px } + .joyride-tip-guide .joyride-nub.right { right: -20px } + .joyride-tip-guide .joyride-nub.left { left: -20px } + .joyride-tip-guide h1, .joyride-tip-guide h2, .joyride-tip-guide h3, @@ -4521,11 +24806,13 @@ label.error { line-height: 1.25; margin: 0 } + .joyride-tip-guide p { font-size: 0.875rem; line-height: 1.3; margin: 0 0 1.125rem 0 } + .joyride-timer-indicator-wrap { border: solid 1px #555; bottom: 1rem; @@ -4534,12 +24821,14 @@ label.error { width: 50px; right: 1.0625rem } + .joyride-timer-indicator { background: #666; display: block; height: inherit; width: 0 } + .joyride-close-tip { color: #777 !important; font-size: 24px; @@ -4550,10 +24839,12 @@ label.error { top: 10px; right: 12px } + .joyride-close-tip:hover, .joyride-close-tip:focus { color: #eee !important } + .joyride-modal-bg { background: rgba(0, 0, 0, 0.5); cursor: pointer; @@ -4565,6 +24856,7 @@ label.error { z-index: 100; left: 0 } + .joyride-expose-wrapper { background-color: #fff; border-radius: 3px; @@ -4572,6 +24864,7 @@ label.error { position: absolute; z-index: 102 } + .joyride-expose-cover { background: transparent; border-radius: 3px; @@ -4580,6 +24873,7 @@ label.error { top: 0; z-index: 9999 } + @media only screen and (min-width: 40.0625em) { .joyride-tip-guide { width: 300px; @@ -4611,6 +24905,7 @@ label.error { top: 22px } } + .keystroke, kbd { background-color: #ededed; @@ -4624,6 +24919,7 @@ kbd { padding: 0.125rem 0.25rem 0; border-radius: 5px } + .label { display: inline-block; font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; @@ -4639,32 +24935,40 @@ kbd { background-color: #22b8eb; color: #fff } + .label.radius { border-radius: 5px } + .label.round { border-radius: 1000px } + .label.alert { background-color: #f04124; color: #fff } + .label.warning { background-color: #f08a24; color: #fff } + .label.success { background-color: #43AC6A; color: #fff } + .label.secondary { background-color: #FF992E; color: #fff } + .label.info { background-color: #a0d3e8; color: #333 } + "[data-magellan-expedition]", [data-magellan-expedition-clone] { background: #fff; @@ -4672,18 +24976,22 @@ kbd { padding: 10px; z-index: 50 } + "[data-magellan-expedition]" .sub-nav, [data-magellan-expedition-clone] .sub-nav { margin-bottom: 0 } + "[data-magellan-expedition]" .sub-nav dd, [data-magellan-expedition-clone] .sub-nav dd { margin-bottom: 0 } + "[data-magellan-expedition]" .sub-nav a, [data-magellan-expedition-clone] .sub-nav a { line-height: 1.8em } + @-webkit-keyframes rotate { from { -webkit-transform: rotate(0deg); @@ -4694,6 +25002,7 @@ kbd { transform: rotate(360deg) } } + @keyframes rotate { from { -webkit-transform: rotate(0deg); @@ -4708,32 +25017,41 @@ kbd { transform: rotate(360deg) } } + .slideshow-wrapper { position: relative } + .slideshow-wrapper ul { list-style-type: none; margin: 0 } + .slideshow-wrapper ul li, .slideshow-wrapper ul li .orbit-caption { display: none } + .slideshow-wrapper ul li:first-child { display: block } + .slideshow-wrapper .orbit-container { background-color: transparent } + .slideshow-wrapper .orbit-container li { display: block } + .slideshow-wrapper .orbit-container li .orbit-caption { display: block } + .slideshow-wrapper .orbit-container .orbit-bullets li { display: inline-block } + .slideshow-wrapper .preloader { border-radius: 1000px; animation-duration: 1.5s; @@ -4751,12 +25069,14 @@ kbd { top: 50%; width: 40px } + .orbit-container { background: none; overflow: hidden; position: relative; width: 100% } + .orbit-container .orbit-slides-container { list-style: none; margin: 0; @@ -4768,19 +25088,23 @@ kbd { -o-transform: translateZ(0); transform: translateZ(0) } + .orbit-container .orbit-slides-container img { display: block; max-width: 100% } + .orbit-container .orbit-slides-container>* { position: absolute; top: 0; width: 100%; margin-left: 100% } + .orbit-container .orbit-slides-container>*:first-child { margin-left: 0 } + .orbit-container .orbit-slides-container>* .orbit-caption { bottom: 0; position: absolute; @@ -4790,6 +25114,7 @@ kbd { padding: 0.625rem 0.875rem; width: 100% } + .orbit-container .orbit-slide-number { left: 10px; background: transparent; @@ -4799,10 +25124,12 @@ kbd { top: 10px; z-index: 10 } + .orbit-container .orbit-slide-number span { font-weight: 700; padding: 0.3125rem } + .orbit-container .orbit-timer { position: absolute; top: 12px; @@ -4811,6 +25138,7 @@ kbd { width: 100px; z-index: 10 } + .orbit-container .orbit-timer .orbit-progress { height: 3px; background-color: rgba(255, 255, 255, 0.3); @@ -4820,6 +25148,7 @@ kbd { right: 20px; top: 5px } + .orbit-container .orbit-timer>span { border: solid 4px #fff; border-bottom: none; @@ -4831,6 +25160,7 @@ kbd { width: 11px; right: 0 } + .orbit-container .orbit-timer.paused>span { top: 0; width: 11px; @@ -4841,12 +25171,15 @@ kbd { border-left-color: #fff; right: -4px } + .orbit-container .orbit-timer.paused>span.dark { border-left-color: #333 } + .orbit-container:hover .orbit-timer>span { display: block } + .orbit-container .orbit-prev, .orbit-container .orbit-next { background-color: transparent; @@ -4860,10 +25193,12 @@ kbd { width: 36px; z-index: 10 } + .orbit-container .orbit-prev:hover, .orbit-container .orbit-next:hover { background-color: rgba(0, 0, 0, 0.3) } + .orbit-container .orbit-prev>span, .orbit-container .orbit-next>span { border: inset 10px; @@ -4874,20 +25209,25 @@ kbd { top: 50%; width: 0 } + .orbit-container .orbit-prev { left: 0 } + .orbit-container .orbit-prev>span { border-right-style: solid; border-color: transparent; border-right-color: #fff } + .orbit-container .orbit-prev:hover>span { border-right-color: #fff } + .orbit-container .orbit-next { right: 0 } + .orbit-container .orbit-next>span { border-color: transparent; border-left-style: solid; @@ -4895,12 +25235,15 @@ kbd { left: 50%; margin-left: -4px } + .orbit-container .orbit-next:hover>span { border-left-color: #fff } + .orbit-bullets-container { text-align: center } + .orbit-bullets { display: block; float: none; @@ -4910,6 +25253,7 @@ kbd { text-align: center; top: 10px } + .orbit-bullets li { background: #ccc; cursor: pointer; @@ -4920,19 +25264,24 @@ kbd { width: 0.5625rem; border-radius: 1000px } + .orbit-bullets li.active { background: #999 } + .orbit-bullets li:last-child { margin-right: 0 } + .touch .orbit-container .orbit-prev, .touch .orbit-container .orbit-next { display: none } + .touch .orbit-bullets { display: none } + @media only screen and (min-width: 40.0625em) { .touch .orbit-container .orbit-prev, .touch .orbit-container .orbit-next { @@ -4942,6 +25291,7 @@ kbd { display: block } } + @media only screen and (max-width: 40em) { .orbit-stack-on-small .orbit-slides-container { height: auto !important @@ -4965,17 +25315,20 @@ kbd { display: none } } + ul.pagination { display: block; margin-left: -0.3125rem; min-height: 1.5rem } + ul.pagination li { color: #222; font-size: 0.875rem; height: 1.5rem; margin-left: 0.3125rem } + ul.pagination li a, ul.pagination li button { border-radius: 5px; @@ -4988,23 +25341,27 @@ ul.pagination li button { line-height: inherit; padding: 0.0625rem 0.625rem 0.0625rem } + ul.pagination li:hover a, ul.pagination li a:focus, ul.pagination li:hover button, ul.pagination li button:focus { background: #e6e6e6 } + ul.pagination li.unavailable a, ul.pagination li.unavailable button { cursor: default; color: #999 } + ul.pagination li.unavailable:hover a, ul.pagination li.unavailable a:focus, ul.pagination li.unavailable:hover button, ul.pagination li.unavailable button:focus { background: transparent } + ul.pagination li.current a, ul.pagination li.current button { background: #22b8eb; @@ -5012,23 +25369,28 @@ ul.pagination li.current button { cursor: default; font-weight: bold } + ul.pagination li.current a:hover, ul.pagination li.current a:focus, ul.pagination li.current button:hover, ul.pagination li.current button:focus { background: #22b8eb } + ul.pagination li { display: block; float: left } + .pagination-centered { text-align: center } + .pagination-centered ul.pagination li { display: inline-block; float: none } + .panel { border-style: solid; border-width: 1px; @@ -5038,12 +25400,15 @@ ul.pagination li { background: #f2f2f2; color: #333 } + .panel>:first-child { margin-top: 0 } + .panel>:last-child { margin-bottom: 0 } + .panel h1, .panel h2, .panel h3, @@ -5055,6 +25420,7 @@ ul.pagination li { .panel dl { color: #333 } + .panel h1, .panel h2, .panel h3, @@ -5064,6 +25430,7 @@ ul.pagination li { line-height: 1; margin-bottom: 0.625rem } + .panel h1.subheader, .panel h2.subheader, .panel h3.subheader, @@ -5072,6 +25439,7 @@ ul.pagination li { .panel h6.subheader { line-height: 1.4 } + .panel.callout { border-style: solid; border-width: 1px; @@ -5081,12 +25449,15 @@ ul.pagination li { background: #f2fbfe; color: #333 } + .panel.callout>:first-child { margin-top: 0 } + .panel.callout>:last-child { margin-bottom: 0 } + .panel.callout h1, .panel.callout h2, .panel.callout h3, @@ -5098,6 +25469,7 @@ ul.pagination li { .panel.callout dl { color: #333 } + .panel.callout h1, .panel.callout h2, .panel.callout h3, @@ -5107,6 +25479,7 @@ ul.pagination li { line-height: 1; margin-bottom: 0.625rem } + .panel.callout h1.subheader, .panel.callout h2.subheader, .panel.callout h3.subheader, @@ -5115,25 +25488,31 @@ ul.pagination li { .panel.callout h6.subheader { line-height: 1.4 } + .panel.callout a:not(.button) { color: #22b8eb } + .panel.callout a:not(.button):hover, .panel.callout a:not(.button):focus { color: #13a3d4 } + .panel.radius { border-radius: 5px } + .pricing-table { border: solid 1px #ddd; margin-left: 0; margin-bottom: 1.25rem } + .pricing-table * { list-style: none; line-height: 1 } + .pricing-table .title { background-color: #333; color: #eee; @@ -5143,6 +25522,7 @@ ul.pagination li { padding: 0.9375rem 1.25rem; text-align: center } + .pricing-table .price { background-color: #F6F6F6; color: #333; @@ -5152,6 +25532,7 @@ ul.pagination li { padding: 0.9375rem 1.25rem; text-align: center } + .pricing-table .description { background-color: #fff; border-bottom: dotted 1px #ddd; @@ -5162,6 +25543,7 @@ ul.pagination li { padding: 0.9375rem; text-align: center } + .pricing-table .bullet-item { background-color: #fff; border-bottom: dotted 1px #ddd; @@ -5171,11 +25553,13 @@ ul.pagination li { padding: 0.9375rem; text-align: center } + .pricing-table .cta-button { background-color: #fff; padding: 1.25rem 1.25rem 0; text-align: center } + .progress { background-color: #F6F6F6; border: 1px solid #fff; @@ -5183,38 +25567,47 @@ ul.pagination li { margin-bottom: 0.625rem; padding: 0.125rem } + .progress .meter { background: #22b8eb; display: block; height: 100% } + .progress.secondary .meter { background: #FF992E; display: block; height: 100% } + .progress.success .meter { background: #43AC6A; display: block; height: 100% } + .progress.alert .meter { background: #f04124; display: block; height: 100% } + .progress.radius { border-radius: 5px } + .progress.radius .meter { border-radius: 4px } + .progress.round { border-radius: 1000px } + .progress.round .meter { border-radius: 999px } + .range-slider { border: 1px solid #ddd; margin: 1.25rem 0; @@ -5226,6 +25619,7 @@ ul.pagination li { width: 100%; background: #FAFAFA } + .range-slider.vertical-range { border: 1px solid #ddd; margin: 1.25rem 0; @@ -5236,12 +25630,14 @@ ul.pagination li { height: 12.5rem; width: 1rem } + .range-slider.vertical-range .range-slider-handle { bottom: -10.5rem; margin-left: -0.5rem; margin-top: 0; position: absolute } + .range-slider.vertical-range .range-slider-active-segment { border-bottom-left-radius: inherit; border-bottom-right-radius: inherit; @@ -5250,44 +25646,54 @@ ul.pagination li { height: auto; width: 0.875rem } + .range-slider.radius { background: #FAFAFA; border-radius: 5px } + .range-slider.radius .range-slider-handle { background: #22b8eb; border-radius: 5px } + .range-slider.radius .range-slider-handle:hover { background: #14a7d9 } + .range-slider.round { background: #FAFAFA; border-radius: 1000px } + .range-slider.round .range-slider-handle { background: #22b8eb; border-radius: 1000px } + .range-slider.round .range-slider-handle:hover { background: #14a7d9 } + .range-slider.disabled, .range-slider[disabled] { background: #FAFAFA; cursor: not-allowed; opacity: 0.7 } + .range-slider.disabled .range-slider-handle, .range-slider[disabled] .range-slider-handle { background: #22b8eb; cursor: default; opacity: 0.7 } + .range-slider.disabled .range-slider-handle:hover, .range-slider[disabled] .range-slider-handle:hover { background: #14a7d9 } + .range-slider-active-segment { background: #ff982b; border-bottom-left-radius: inherit; @@ -5296,6 +25702,7 @@ ul.pagination li { height: 0.875rem; position: absolute } + .range-slider-handle { border: 1px solid none; cursor: pointer; @@ -5309,9 +25716,11 @@ ul.pagination li { touch-action: manipulation; background: #22b8eb } + .range-slider-handle:hover { background: #14a7d9 } + .reveal-modal-bg { background: #000; background: rgba(0, 0, 0, 0.45); @@ -5324,6 +25733,7 @@ ul.pagination li { z-index: 1004; left: 0 } + .reveal-modal { border-radius: 5px; display: none; @@ -5338,21 +25748,26 @@ ul.pagination li { border: solid 1px #666; box-shadow: 0 0 10px rgba(0, 0, 0, 0.4) } + @media only screen and (max-width: 40em) { .reveal-modal { min-height: 100vh } } + .reveal-modal .column, .reveal-modal .columns { min-width: 0 } + .reveal-modal>:first-child { margin-top: 0 } + .reveal-modal>:last-child { margin-bottom: 0 } + @media only screen and (min-width: 40.0625em) { .reveal-modal { left: 0; @@ -5362,20 +25777,25 @@ ul.pagination li { width: 80% } } + @media only screen and (min-width: 40.0625em) { .reveal-modal { top: 6.25rem } } + .reveal-modal.radius { border-radius: 5px } + .reveal-modal.round { border-radius: 1000px } + .reveal-modal.collapse { padding: 0 } + @media only screen and (min-width: 40.0625em) { .reveal-modal.tiny { left: 0; @@ -5385,6 +25805,7 @@ ul.pagination li { width: 30% } } + @media only screen and (min-width: 40.0625em) { .reveal-modal.small { left: 0; @@ -5394,6 +25815,7 @@ ul.pagination li { width: 40% } } + @media only screen and (min-width: 40.0625em) { .reveal-modal.medium { left: 0; @@ -5403,6 +25825,7 @@ ul.pagination li { width: 60% } } + @media only screen and (min-width: 40.0625em) { .reveal-modal.large { left: 0; @@ -5412,6 +25835,7 @@ ul.pagination li { width: 70% } } + @media only screen and (min-width: 40.0625em) { .reveal-modal.xlarge { left: 0; @@ -5421,6 +25845,7 @@ ul.pagination li { width: 95% } } + .reveal-modal.full { height: 100vh; height: 100%; @@ -5430,6 +25855,7 @@ ul.pagination li { min-height: 100vh; top: 0 } + @media only screen and (min-width: 40.0625em) { .reveal-modal.full { left: 0; @@ -5439,9 +25865,11 @@ ul.pagination li { width: 100% } } + .reveal-modal.toback { z-index: 1003 } + .reveal-modal .close-reveal-modal { color: #aaa; cursor: pointer; @@ -5452,6 +25880,7 @@ ul.pagination li { top: 0.625rem; right: 1.375rem } + .side-nav { display: block; font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; @@ -5460,30 +25889,36 @@ ul.pagination li { margin: 0; padding: 0.5rem 0 } + .side-nav li { font-size: 0.875rem; font-weight: normal; margin: 0 0 0.25rem 0 } + .side-nav li a:not(.button) { color: #22b8eb; display: block; margin: 0; padding: 0.3125rem 0.625rem } + .side-nav li a:not(.button):hover, .side-nav li a:not(.button):focus { background: rgba(0, 0, 0, 0.025); color: #64cdf1 } + .side-nav li a:not(.button):active { color: #64cdf1 } + .side-nav li.active>a:first-child:not(.button) { color: #64cdf1; font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; font-weight: normal } + .side-nav li.divider { border-top: 1px solid; height: 0; @@ -5491,16 +25926,19 @@ ul.pagination li { padding: 0; border-top-color: #e6e6e6 } + .side-nav li.heading { color: #22b8eb; font-size: 0.875rem; font-weight: bold; text-transform: uppercase } + .split.button { position: relative; padding-right: 5.0625rem } + .split.button span { display: block; height: 100%; @@ -5509,6 +25947,7 @@ ul.pagination li { top: 0; border-left: solid 1px } + .split.button span:after { position: absolute; content: ""; @@ -5519,96 +25958,121 @@ ul.pagination li { top: 50%; left: 50% } + .split.button span:active { background-color: rgba(0, 0, 0, 0.1) } + .split.button span { border-left-color: rgba(255, 255, 255, 0.5) } + .split.button span { width: 3.09375rem } + .split.button span:after { border-top-style: solid; border-width: 0.375rem; margin-left: -0.375rem; top: 48% } + .split.button span:after { border-color: #fff transparent transparent transparent } + .split.button.secondary span { border-left-color: rgba(255, 255, 255, 0.5) } + .split.button.secondary span:after { border-color: #fff transparent transparent transparent } + .split.button.alert span { border-left-color: rgba(255, 255, 255, 0.5) } + .split.button.success span { border-left-color: rgba(255, 255, 255, 0.5) } + .split.button.tiny { padding-right: 3.75rem } + .split.button.tiny span { width: 2.25rem } + .split.button.tiny span:after { border-top-style: solid; border-width: 0.375rem; margin-left: -0.375rem; top: 48% } + .split.button.small { padding-right: 4.375rem } + .split.button.small span { width: 2.625rem } + .split.button.small span:after { border-top-style: solid; border-width: 0.4375rem; margin-left: -0.375rem; top: 48% } + .split.button.large { padding-right: 5.5rem } + .split.button.large span { width: 3.4375rem } + .split.button.large span:after { border-top-style: solid; border-width: 0.3125rem; margin-left: -0.375rem; top: 48% } + .split.button.expand { padding-left: 2rem } + .split.button.secondary span:after { border-color: #333 transparent transparent transparent } + .split.button.radius span { -webkit-border-bottom-right-radius: 5px; -webkit-border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-top-right-radius: 5px } + .split.button.round span { -webkit-border-bottom-right-radius: 1000px; -webkit-border-top-right-radius: 1000px; border-bottom-right-radius: 1000px; border-top-right-radius: 1000px } + .split.button.no-pip span:before { border-style: none } + .split.button.no-pip span:after { border-style: none } + .split.button.no-pip span>i { display: block; left: 50%; @@ -5617,6 +26081,7 @@ ul.pagination li { position: absolute; top: 50% } + .sub-nav { display: block; margin: -0.25rem 0 1.125rem; @@ -5624,9 +26089,11 @@ ul.pagination li { padding-top: 0.25rem; width: auto } + .sub-nav dt { text-transform: uppercase } + .sub-nav dt, .sub-nav dd, .sub-nav li { @@ -5638,6 +26105,7 @@ ul.pagination li { margin-left: 1rem; margin-bottom: 0 } + .sub-nav dt a, .sub-nav dd a, .sub-nav li a { @@ -5645,11 +26113,13 @@ ul.pagination li { padding: 0.1875rem 1rem; text-decoration: none } + .sub-nav dt a:hover, .sub-nav dd a:hover, .sub-nav li a:hover { color: #737373 } + .sub-nav dt.active a, .sub-nav dd.active a, .sub-nav li.active a { @@ -5660,11 +26130,13 @@ ul.pagination li { font-weight: normal; padding: 0.1875rem 1rem } + .sub-nav dt.active a:hover, .sub-nav dd.active a:hover, .sub-nav li.active a:hover { background: #13a3d4 } + .switch { border: none; margin-bottom: 1.5rem; @@ -5676,6 +26148,7 @@ ul.pagination li { -ms-user-select: none; user-select: none } + .switch label { background: #ddd; color: transparent; @@ -5688,6 +26161,7 @@ ul.pagination li { height: 2rem; transition: left 0.15s ease-out } + .switch input { left: 10px; opacity: 0; @@ -5695,10 +26169,12 @@ ul.pagination li { position: absolute; top: 9px } + .switch input+label { margin-left: 0; margin-right: 0 } + .switch label:after { background: #fff; content: ""; @@ -5718,96 +26194,122 @@ ul.pagination li { -o-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0) } + .switch input:checked+label { background: #22b8eb } + .switch input:checked+label:after { left: 2.25rem } + .switch label { height: 2rem; width: 4rem } + .switch label:after { height: 1.5rem; width: 1.5rem } + .switch input:checked+label:after { left: 2.25rem } + .switch label { color: transparent; background: #ddd } + .switch label:after { background: #fff } + .switch input:checked+label { background: #22b8eb } + .switch.large label { height: 2.5rem; width: 5rem } + .switch.large label:after { height: 2rem; width: 2rem } + .switch.large input:checked+label:after { left: 2.75rem } + .switch.small label { height: 1.75rem; width: 3.5rem } + .switch.small label:after { height: 1.25rem; width: 1.25rem } + .switch.small input:checked+label:after { left: 2rem } + .switch.tiny label { height: 1.5rem; width: 3rem } + .switch.tiny label:after { height: 1rem; width: 1rem } + .switch.tiny input:checked+label:after { left: 1.75rem } + .switch.radius label { border-radius: 4px } + .switch.radius label:after { border-radius: 3px } + .switch.round { border-radius: 1000px } + .switch.round label { border-radius: 2rem } + .switch.round label:after { border-radius: 2rem } + table { background: #fff; border: solid 1px #ddd; margin-bottom: 1.25rem; table-layout: auto } + table caption { background: transparent; color: #222; font-size: 1rem; font-weight: bold } + table thead { background: #f5f5f5 } + table thead tr th, table thead tr td { color: #222; @@ -5815,9 +26317,11 @@ table thead tr td { font-weight: bold; padding: 0.5rem 0.625rem 0.625rem } + table tfoot { background: #f5f5f5 } + table tfoot tr th, table tfoot tr td { color: #222; @@ -5825,6 +26329,7 @@ table tfoot tr td { font-weight: bold; padding: 0.5rem 0.625rem 0.625rem } + table tr th, table tr td { color: #222; @@ -5832,11 +26337,13 @@ table tr td { padding: 0.5625rem 0.625rem; text-align: left } + table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #F9F9F9 } + table thead tr th, table tfoot tr th, table tfoot tr td, @@ -5846,18 +26353,22 @@ table tr td { display: table-cell; line-height: 1.125rem } + .tabs { margin-bottom: 0 !important; margin-left: 0 } + .tabs:before, .tabs:after { content: " "; display: table } + .tabs:after { clear: both } + .tabs dd, .tabs .tab-title { float: left; @@ -5865,6 +26376,7 @@ table tr td { margin-bottom: 0 !important; position: relative } + .tabs dd>a, .tabs .tab-title>a { display: block; @@ -5874,15 +26386,18 @@ table tr td { font-size: 1rem; padding: 1rem 2rem } + .tabs dd>a:hover, .tabs .tab-title>a:hover { background-color: #e1e1e1 } + .tabs dd.active a, .tabs .tab-title.active a { background-color: #fff; color: #222 } + .tabs.radius dd:first-child a, .tabs.radius .tab:first-child a { -webkit-border-bottom-left-radius: 5px; @@ -5890,6 +26405,7 @@ table tr td { border-bottom-left-radius: 5px; border-top-left-radius: 5px } + .tabs.radius dd:last-child a, .tabs.radius .tab:last-child a { -webkit-border-bottom-right-radius: 5px; @@ -5897,6 +26413,7 @@ table tr td { border-bottom-right-radius: 5px; border-top-right-radius: 5px } + .tabs.vertical dd, .tabs.vertical .tab-title { position: inherit; @@ -5904,37 +26421,46 @@ table tr td { display: block; top: auto } + .tabs-content { margin-bottom: 1.5rem; width: 100% } + .tabs-content:before, .tabs-content:after { content: " "; display: table } + .tabs-content:after { clear: both } + .tabs-content>.content { display: none; float: left; padding: 0.9375rem 0; width: 100% } + .tabs-content>.content.active { display: block; float: none } + .tabs-content>.content.contained { padding: 0.9375rem } + .tabs-content.vertical { display: block } + .tabs-content.vertical>.content { padding: 0 0.9375rem } + @media only screen and (min-width: 40.0625em) { .tabs.vertical { float: left; @@ -5951,10 +26477,12 @@ table tr td { width: 80% } } + .no-js .tabs-content>.content { display: block; float: none } + .th { border: solid 4px #fff; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2); @@ -5963,28 +26491,34 @@ table tr td { max-width: 100%; transition: all 200ms ease-out } + .th:hover, .th:focus { box-shadow: 0 0 6px 1px rgba(34, 184, 235, 0.5) } + .th.radius { border-radius: 5px } + .has-tip { border-bottom: dotted 1px #ccc; color: #333; cursor: help; font-weight: bold } + .has-tip:hover, .has-tip:focus { border-bottom: dotted 1px #0a556f; color: #22b8eb } + .has-tip.tip-left, .has-tip.tip-right { float: none !important } + .tooltip { background: #333; color: #fff; @@ -5999,6 +26533,7 @@ table tr td { z-index: 1006; left: 50% } + .tooltip>.nub { border-color: transparent transparent #333 transparent; border: solid 5px; @@ -6010,29 +26545,36 @@ table tr td { width: 0; left: 5px } + .tooltip>.nub.rtl { left: auto; right: 5px } + .tooltip.radius { border-radius: 5px } + .tooltip.round { border-radius: 1000px } + .tooltip.round>.nub { left: 2rem } + .tooltip.opened { border-bottom: dotted 1px #0a556f !important; color: #22b8eb !important } + .tap-to-close { color: #777; display: block; font-size: 0.625rem; font-weight: normal } + @media only screen and (min-width: 40.0625em) { .tooltip>.nub { border-color: transparent transparent #333 transparent; @@ -6062,17 +26604,21 @@ table tr td { top: 50% } } + meta.foundation-mq-topbar { font-family: "/only screen and (min-width:40.0625em)/"; width: 40.0625em } + .contain-to-grid { width: 100%; background: #333 } + .contain-to-grid .top-bar { margin-bottom: 0 } + .fixed { position: fixed; top: 0; @@ -6080,21 +26626,25 @@ meta.foundation-mq-topbar { z-index: 99; left: 0 } + .fixed.expanded:not(.top-bar) { height: auto; max-height: 100%; overflow-y: auto; width: 100% } + .fixed.expanded:not(.top-bar) .title-area { position: fixed; width: 100%; z-index: 99 } + .fixed.expanded:not(.top-bar) .top-bar-section { margin-top: 2.8125rem; z-index: 98 } + .top-bar { background: #333; height: 2.8125rem; @@ -6103,18 +26653,22 @@ meta.foundation-mq-topbar { overflow: hidden; position: relative } + .top-bar ul { list-style: none; margin-bottom: 0 } + .top-bar .row { max-width: none } + .top-bar form, .top-bar input, .top-bar select { margin-bottom: 0 } + .top-bar input, .top-bar select { font-size: 0.75rem; @@ -6122,6 +26676,7 @@ meta.foundation-mq-topbar { padding-bottom: .35rem; padding-top: .35rem } + .top-bar .button, .top-bar button { font-size: 0.75rem; @@ -6129,6 +26684,7 @@ meta.foundation-mq-topbar { padding-bottom: 0.4125rem; padding-top: 0.4125rem } + @media only screen and (max-width: 40em) { .top-bar .button, .top-bar button { @@ -6136,15 +26692,18 @@ meta.foundation-mq-topbar { top: -1px } } + .top-bar .title-area { margin: 0; position: relative } + .top-bar .name { font-size: 16px; height: 2.8125rem; margin: 0 } + .top-bar .name h1, .top-bar .name h2, .top-bar .name h3, @@ -6155,6 +26714,7 @@ meta.foundation-mq-topbar { line-height: 2.8125rem; margin: 0 } + .top-bar .name h1 a, .top-bar .name h2 a, .top-bar .name h3 a, @@ -6167,11 +26727,13 @@ meta.foundation-mq-topbar { padding: 0 0.9375rem; width: 75% } + .top-bar .toggle-topbar { position: absolute; right: 0; top: 0 } + .top-bar .toggle-topbar a { color: #fff; display: block; @@ -6183,10 +26745,12 @@ meta.foundation-mq-topbar { position: relative; text-transform: uppercase } + .top-bar .toggle-topbar.menu-icon { margin-top: -16px; top: 50% } + .top-bar .toggle-topbar.menu-icon a { color: #fff; height: 34px; @@ -6194,6 +26758,7 @@ meta.foundation-mq-topbar { padding: 0 2.5rem 0 0.9375rem; position: relative } + .top-bar .toggle-topbar.menu-icon a span::after { content: ""; display: block; @@ -6205,22 +26770,28 @@ meta.foundation-mq-topbar { box-shadow: 0 0 0 1px #fff, 0 7px 0 1px #fff, 0 14px 0 1px #fff; width: 16px } + .top-bar .toggle-topbar.menu-icon a span:hover:after { box-shadow: 0 0 0 1px "", 0 7px 0 1px "", 0 14px 0 1px "" } + .top-bar.expanded { background: transparent; height: auto } + .top-bar.expanded .title-area { background: #333 } + .top-bar.expanded .toggle-topbar a { color: #888 } + .top-bar.expanded .toggle-topbar a span::after { box-shadow: 0 0 0 1px #888, 0 7px 0 1px #888, 0 14px 0 1px #888 } + @media screen and (-webkit-min-device-pixel-ratio: 0) { .top-bar.expanded .top-bar-section .has-dropdown.moved>.dropdown, .top-bar.expanded .top-bar-section .dropdown { @@ -6230,12 +26801,14 @@ meta.foundation-mq-topbar { padding: 0 } } + .top-bar-section { left: 0; position: relative; width: auto; transition: left 300ms ease-out } + .top-bar-section ul { display: block; font-size: 16px; @@ -6244,6 +26817,7 @@ meta.foundation-mq-topbar { padding: 0; width: 100% } + .top-bar-section .divider, .top-bar-section [role="separator"] { border-top: solid 1px #1a1a1a; @@ -6251,9 +26825,11 @@ meta.foundation-mq-topbar { height: 1px; width: 100% } + .top-bar-section ul li { background: #333 } + .top-bar-section ul li>a { color: #fff; display: block; @@ -6265,6 +26841,7 @@ meta.foundation-mq-topbar { text-transform: none; width: 100% } + .top-bar-section ul li>a.button { font-size: 0.8125rem; padding-left: 0.9375rem; @@ -6273,79 +26850,97 @@ meta.foundation-mq-topbar { border-color: #1298c5; color: #fff } + .top-bar-section ul li>a.button:hover, .top-bar-section ul li>a.button:focus { background-color: #1298c5 } + .top-bar-section ul li>a.button:hover, .top-bar-section ul li>a.button:focus { color: #fff } + .top-bar-section ul li>a.button.secondary { background-color: #FF992E; border-color: #f17b00; color: #fff } + .top-bar-section ul li>a.button.secondary:hover, .top-bar-section ul li>a.button.secondary:focus { background-color: #f17b00 } + .top-bar-section ul li>a.button.secondary:hover, .top-bar-section ul li>a.button.secondary:focus { color: #fff } + .top-bar-section ul li>a.button.success { background-color: #43AC6A; border-color: #368a55; color: #fff } + .top-bar-section ul li>a.button.success:hover, .top-bar-section ul li>a.button.success:focus { background-color: #368a55 } + .top-bar-section ul li>a.button.success:hover, .top-bar-section ul li>a.button.success:focus { color: #fff } + .top-bar-section ul li>a.button.alert { background-color: #f04124; border-color: #cf2a0e; color: #fff } + .top-bar-section ul li>a.button.alert:hover, .top-bar-section ul li>a.button.alert:focus { background-color: #cf2a0e } + .top-bar-section ul li>a.button.alert:hover, .top-bar-section ul li>a.button.alert:focus { color: #fff } + .top-bar-section ul li>a.button.warning { background-color: #f08a24; border-color: #cf6e0e; color: #fff } + .top-bar-section ul li>a.button.warning:hover, .top-bar-section ul li>a.button.warning:focus { background-color: #cf6e0e } + .top-bar-section ul li>a.button.warning:hover, .top-bar-section ul li>a.button.warning:focus { color: #fff } + .top-bar-section ul li>a.button.info { background-color: #a0d3e8; border-color: #61b6d9; color: #333 } + .top-bar-section ul li>a.button.info:hover, .top-bar-section ul li>a.button.info:focus { background-color: #61b6d9 } + .top-bar-section ul li>a.button.info:hover, .top-bar-section ul li>a.button.info:focus { color: #fff } + .top-bar-section ul li>button { font-size: 0.8125rem; padding-left: 0.9375rem; @@ -6354,98 +26949,121 @@ meta.foundation-mq-topbar { border-color: #1298c5; color: #fff } + .top-bar-section ul li>button:hover, .top-bar-section ul li>button:focus { background-color: #1298c5 } + .top-bar-section ul li>button:hover, .top-bar-section ul li>button:focus { color: #fff } + .top-bar-section ul li>button.secondary { background-color: #FF992E; border-color: #f17b00; color: #fff } + .top-bar-section ul li>button.secondary:hover, .top-bar-section ul li>button.secondary:focus { background-color: #f17b00 } + .top-bar-section ul li>button.secondary:hover, .top-bar-section ul li>button.secondary:focus { color: #fff } + .top-bar-section ul li>button.success { background-color: #43AC6A; border-color: #368a55; color: #fff } + .top-bar-section ul li>button.success:hover, .top-bar-section ul li>button.success:focus { background-color: #368a55 } + .top-bar-section ul li>button.success:hover, .top-bar-section ul li>button.success:focus { color: #fff } + .top-bar-section ul li>button.alert { background-color: #f04124; border-color: #cf2a0e; color: #fff } + .top-bar-section ul li>button.alert:hover, .top-bar-section ul li>button.alert:focus { background-color: #cf2a0e } + .top-bar-section ul li>button.alert:hover, .top-bar-section ul li>button.alert:focus { color: #fff } + .top-bar-section ul li>button.warning { background-color: #f08a24; border-color: #cf6e0e; color: #fff } + .top-bar-section ul li>button.warning:hover, .top-bar-section ul li>button.warning:focus { background-color: #cf6e0e } + .top-bar-section ul li>button.warning:hover, .top-bar-section ul li>button.warning:focus { color: #fff } + .top-bar-section ul li>button.info { background-color: #a0d3e8; border-color: #61b6d9; color: #333 } + .top-bar-section ul li>button.info:hover, .top-bar-section ul li>button.info:focus { background-color: #61b6d9 } + .top-bar-section ul li>button.info:hover, .top-bar-section ul li>button.info:focus { color: #fff } + .top-bar-section ul li:hover:not(.has-form)>a { background-color: #555; color: #fff; background: #222 } + .top-bar-section ul li.active>a { background: #22b8eb; color: #fff } + .top-bar-section ul li.active>a:hover { background: #13a3d4; color: #fff } + .top-bar-section .has-form { padding: 0.9375rem } + .top-bar-section .has-dropdown { position: relative } + .top-bar-section .has-dropdown>a:after { border: inset 5px; content: ""; @@ -6460,9 +27078,11 @@ meta.foundation-mq-topbar { top: 50%; right: 0 } + .top-bar-section .has-dropdown.moved { position: static } + .top-bar-section .has-dropdown.moved>.dropdown { position: static !important; height: auto; @@ -6473,9 +27093,11 @@ meta.foundation-mq-topbar { position: absolute !important; width: 100% } + .top-bar-section .has-dropdown.moved>a:after { display: none } + .top-bar-section .dropdown { clip: rect(1px, 1px, 1px, 1px); height: 1px; @@ -6489,39 +27111,48 @@ meta.foundation-mq-topbar { z-index: 99; left: 100% } + .top-bar-section .dropdown li { height: auto; width: 100% } + .top-bar-section .dropdown li a { font-weight: normal; padding: 8px 0.9375rem } + .top-bar-section .dropdown li a.parent-link { font-weight: normal } + .top-bar-section .dropdown li.title h5, .top-bar-section .dropdown li.parent-link { margin-bottom: 0; margin-top: 0; font-size: 1.125rem } + .top-bar-section .dropdown li.title h5 a, .top-bar-section .dropdown li.parent-link a { color: #fff; display: block } + .top-bar-section .dropdown li.title h5 a:hover, .top-bar-section .dropdown li.parent-link a:hover { background: none } + .top-bar-section .dropdown li.has-form { padding: 8px 0.9375rem } + .top-bar-section .dropdown li .button, .top-bar-section .dropdown li button { top: auto } + .top-bar-section .dropdown label { color: #777; font-size: 0.625rem; @@ -6530,9 +27161,11 @@ meta.foundation-mq-topbar { padding: 8px 0.9375rem 2px; text-transform: uppercase } + .js-generated { display: block } + @media only screen and (min-width: 40.0625em) { .top-bar { background: #333; @@ -6752,18 +27385,23 @@ meta.foundation-mq-topbar { position: absolute !important } } + .text-left { text-align: left !important } + .text-right { text-align: right !important } + .text-center { text-align: center !important } + .text-justify { text-align: justify !important } + @media only screen and (max-width: 40em) { .small-only-text-left { text-align: left !important @@ -6778,6 +27416,7 @@ meta.foundation-mq-topbar { text-align: justify !important } } + @media only screen { .small-text-left { text-align: left !important @@ -6792,6 +27431,7 @@ meta.foundation-mq-topbar { text-align: justify !important } } + @media only screen and (min-width: 40.0625em) and (max-width: 58.75em) { .medium-only-text-left { text-align: left !important @@ -6806,6 +27446,7 @@ meta.foundation-mq-topbar { text-align: justify !important } } + @media only screen and (min-width: 40.0625em) { .medium-text-left { text-align: left !important @@ -6820,6 +27461,7 @@ meta.foundation-mq-topbar { text-align: justify !important } } + @media only screen and (min-width: 58.8125em) and (max-width: 90em) { .large-only-text-left { text-align: left !important @@ -6834,6 +27476,7 @@ meta.foundation-mq-topbar { text-align: justify !important } } + @media only screen and (min-width: 58.8125em) { .large-text-left { text-align: left !important @@ -6848,6 +27491,7 @@ meta.foundation-mq-topbar { text-align: justify !important } } + @media only screen and (min-width: 90.0625em) and (max-width: 120em) { .xlarge-only-text-left { text-align: left !important @@ -6862,6 +27506,7 @@ meta.foundation-mq-topbar { text-align: justify !important } } + @media only screen and (min-width: 90.0625em) { .xlarge-text-left { text-align: left !important @@ -6876,6 +27521,7 @@ meta.foundation-mq-topbar { text-align: justify !important } } + @media only screen and (min-width: 120.0625em) and (max-width: 6249999.9375em) { .xxlarge-only-text-left { text-align: left !important @@ -6890,6 +27536,7 @@ meta.foundation-mq-topbar { text-align: justify !important } } + @media only screen and (min-width: 120.0625em) { .xxlarge-text-left { text-align: left !important @@ -6904,6 +27551,7 @@ meta.foundation-mq-topbar { text-align: justify !important } } + div, dl, dt, @@ -6926,18 +27574,22 @@ td { margin: 0; padding: 0 } + a { color: #FF992E; line-height: inherit; text-decoration: none } + a:hover, a:focus { color: #ff8404 } + a img { border: none } + p { font-family: inherit; font-size: 1rem; @@ -6946,15 +27598,18 @@ p { margin-bottom: 1.25rem; text-rendering: optimizeLegibility } + p.lead { font-size: 1.21875rem; line-height: 1.6 } + p aside { font-size: 0.875rem; font-style: italic; line-height: 1.35 } + h1, h2, h3, @@ -6970,6 +27625,7 @@ h6 { margin-top: 0.2rem; text-rendering: optimizeLegibility } + h1 small, h2 small, h3 small, @@ -6980,24 +27636,31 @@ h6 small { font-size: 60%; line-height: 0 } + h1 { font-size: 2.25rem } + h2 { font-size: 1.8125rem } + h3 { font-size: 1.5rem } + h4 { font-size: 1.25rem } + h5 { font-size: 1.125rem } + h6 { font-size: 1rem } + .subheader { line-height: 1.4; color: #6fd1f2; @@ -7005,6 +27668,7 @@ h6 { margin-top: 0.2rem; margin-bottom: 0.5rem } + hr { border: solid #efefef; border-width: 1px 0 0; @@ -7012,24 +27676,29 @@ hr { height: 0; margin: 1.25rem 0 1.1875rem } + em, i { font-style: italic; line-height: inherit } + strong, b { font-weight: bold; line-height: inherit } + small { font-size: 60%; line-height: inherit } + code { font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; } + ul, ol, dl { @@ -7039,58 +27708,72 @@ dl { list-style-position: outside; margin-bottom: 1.25rem } + ul { margin-left: 1.1rem } + ul.no-bullet { margin-left: 0 } + ul.no-bullet li ul, ul.no-bullet li ol { margin-left: 1.25rem; margin-bottom: 0; list-style: none } + ul li ul, ul li ol { margin-left: 1.25rem; margin-bottom: 0 } + ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit } + ul.square { list-style-type: square; margin-left: 1.1rem } + ul.circle { list-style-type: circle; margin-left: 1.1rem } + ul.disc { list-style-type: disc; margin-left: 1.1rem } + ul.no-bullet { list-style: none } + ol { margin-left: 1.4rem } + ol li ul, ol li ol { margin-left: 1.25rem; margin-bottom: 0 } + dl dt { margin-bottom: 0.3rem; font-weight: bold } + dl dd { margin-bottom: 0.75rem } + abbr, acronym { text-transform: uppercase; @@ -7098,51 +27781,63 @@ acronym { color: #7A8491; cursor: help } + abbr { text-transform: none } + abbr[title] { border-bottom: 1px dotted #ddd } + blockquote { margin: 0 0 1.25rem; padding: 0.5625rem 1.25rem 0 1.1875rem; border-left: 0 solid #000 } + blockquote cite { display: block; font-size: 0.8125rem; color: #55c8f0 } + blockquote cite:before { content: "\2014 \0020" } + blockquote cite a, blockquote cite a:visited { color: #55c8f0 } + blockquote, blockquote p { line-height: 1.6; color: #22b8eb } + .vcard { display: inline-block; margin: 0 0 1.25rem 0; border: 1px solid #ddd; padding: 0.625rem 0.75rem } + .vcard li { margin: 0; display: block } + .vcard .fn { font-weight: bold; font-size: 0.9375rem } + .vevent .summary { font-weight: bold } + .vevent abbr { cursor: default; text-decoration: none; @@ -7150,6 +27845,7 @@ blockquote p { border: none; padding: 0 0.0625rem } + @media only screen and (min-width: 40.0625em) { h1, h2, @@ -7178,17 +27874,20 @@ blockquote p { font-size: 1rem } } + .off-canvas-wrap { -webkit-backface-visibility: hidden; position: relative; width: 100%; overflow: hidden } + .off-canvas-wrap.move-right, .off-canvas-wrap.move-left { min-height: 100%; -webkit-overflow-scrolling: touch } + .inner-wrap { position: relative; width: 100%; @@ -7198,14 +27897,17 @@ blockquote p { -o-transition: -o-transform 500ms ease; transition: transform 500ms ease } + .inner-wrap:before, .inner-wrap:after { content: " "; display: table } + .inner-wrap:after { clear: both } + .tab-bar { -webkit-backface-visibility: hidden; background: #333; @@ -7214,6 +27916,7 @@ blockquote p { line-height: 2.8125rem; position: relative } + .tab-bar h1, .tab-bar h2, .tab-bar h3, @@ -7225,12 +27928,14 @@ blockquote p { line-height: 2.8125rem; margin: 0 } + .tab-bar h1, .tab-bar h2, .tab-bar h3, .tab-bar h4 { font-size: 1.125rem } + .left-small { height: 2.8125rem; position: absolute; @@ -7239,6 +27944,7 @@ blockquote p { border-right: solid 1px #1a1a1a; left: 0 } + .right-small { height: 2.8125rem; position: absolute; @@ -7247,6 +27953,7 @@ blockquote p { border-left: solid 1px #1a1a1a; right: 0 } + .tab-bar-section { height: 2.8125rem; padding: 0 0.625rem; @@ -7254,24 +27961,30 @@ blockquote p { text-align: center; top: 0 } + .tab-bar-section.left { text-align: left } + .tab-bar-section.right { text-align: right } + .tab-bar-section.left { left: 0; right: 2.8125rem } + .tab-bar-section.right { left: 2.8125rem; right: 0 } + .tab-bar-section.middle { left: 2.8125rem; right: 2.8125rem } + .tab-bar .menu-icon { color: #fff; display: block; @@ -7282,6 +27995,7 @@ blockquote p { transform: translate3d(0, 0, 0); width: 2.8125rem } + .tab-bar .menu-icon span::after { content: ""; display: block; @@ -7293,9 +28007,11 @@ blockquote p { box-shadow: 0 0 0 1px #fff, 0 7px 0 1px #fff, 0 14px 0 1px #fff; width: 1rem } + .tab-bar .menu-icon span:hover:after { box-shadow: 0 0 0 1px #b3b3b3, 0 7px 0 1px #b3b3b3, 0 14px 0 1px #b3b3b3 } + .left-off-canvas-menu { -webkit-backface-visibility: hidden; background: #134a6a; @@ -7318,9 +28034,11 @@ blockquote p { transform: translate3d(-100%, 0, 0); left: 0 } + .left-off-canvas-menu * { -webkit-backface-visibility: hidden } + .right-off-canvas-menu { -webkit-backface-visibility: hidden; background: #134a6a; @@ -7343,14 +28061,17 @@ blockquote p { transform: translate3d(100%, 0, 0); right: 0 } + .right-off-canvas-menu * { -webkit-backface-visibility: hidden } + ul.off-canvas-list { list-style-type: none; margin: 0; padding: 0 } + ul.off-canvas-list li label { background: #129ac8; border-bottom: none; @@ -7363,6 +28084,7 @@ ul.off-canvas-list li label { padding: 0.3rem 0.9375rem; text-transform: uppercase } + ul.off-canvas-list li a { border-bottom: 1px solid #103f5a; color: #fff; @@ -7370,12 +28092,15 @@ ul.off-canvas-list li a { padding: 0.4rem; transition: background 300ms ease } + ul.off-canvas-list li a:hover { background: #242424 } + ul.off-canvas-list li a:active { background: #242424 } + .move-right>.inner-wrap { -webkit-transform: translate3d(15.625rem, 0, 0); -moz-transform: translate3d(15.625rem, 0, 0); @@ -7384,6 +28109,7 @@ ul.off-canvas-list li a:active { -o-transform: translate3d(15.625rem, 0, 0); transform: translate3d(15.625rem, 0, 0) } + .move-right .exit-off-canvas { -webkit-backface-visibility: hidden; box-shadow: -2px 0 2px rgba(0, 0, 0, 0.2), 2px 0 2px rgba(0, 0, 0, 0.2); @@ -7399,11 +28125,13 @@ ul.off-canvas-list li a:active { top: 0; z-index: 1002 } + @media only screen and (min-width: 40.0625em) { .move-right .exit-off-canvas:hover { background: rgba(0, 0, 0, 0.35) } } + .move-left>.inner-wrap { -webkit-transform: translate3d(-15.625rem, 0, 0); -moz-transform: translate3d(-15.625rem, 0, 0); @@ -7412,6 +28140,7 @@ ul.off-canvas-list li a:active { -o-transform: translate3d(-15.625rem, 0, 0); transform: translate3d(-15.625rem, 0, 0) } + .move-left .exit-off-canvas { -webkit-backface-visibility: hidden; box-shadow: -2px 0 2px rgba(0, 0, 0, 0.2), 2px 0 2px rgba(0, 0, 0, 0.2); @@ -7427,11 +28156,13 @@ ul.off-canvas-list li a:active { top: 0; z-index: 1002 } + @media only screen and (min-width: 40.0625em) { .move-left .exit-off-canvas:hover { background: rgba(0, 0, 0, 0.35) } } + .offcanvas-overlap .left-off-canvas-menu, .offcanvas-overlap .right-off-canvas-menu { -ms-transform: none; @@ -7441,6 +28172,7 @@ ul.off-canvas-list li a:active { transform: none; z-index: 1003 } + .offcanvas-overlap .exit-off-canvas { -webkit-backface-visibility: hidden; box-shadow: -2px 0 2px rgba(0, 0, 0, 0.2), 2px 0 2px rgba(0, 0, 0, 0.2); @@ -7456,11 +28188,13 @@ ul.off-canvas-list li a:active { top: 0; z-index: 1002 } + @media only screen and (min-width: 40.0625em) { .offcanvas-overlap .exit-off-canvas:hover { background: rgba(0, 0, 0, 0.35) } } + .offcanvas-overlap-left .right-off-canvas-menu { -ms-transform: none; -webkit-transform: none; @@ -7469,6 +28203,7 @@ ul.off-canvas-list li a:active { transform: none; z-index: 1003 } + .offcanvas-overlap-left .exit-off-canvas { -webkit-backface-visibility: hidden; box-shadow: -2px 0 2px rgba(0, 0, 0, 0.2), 2px 0 2px rgba(0, 0, 0, 0.2); @@ -7484,11 +28219,13 @@ ul.off-canvas-list li a:active { top: 0; z-index: 1002 } + @media only screen and (min-width: 40.0625em) { .offcanvas-overlap-left .exit-off-canvas:hover { background: rgba(0, 0, 0, 0.35) } } + .offcanvas-overlap-right .left-off-canvas-menu { -ms-transform: none; -webkit-transform: none; @@ -7497,6 +28234,7 @@ ul.off-canvas-list li a:active { transform: none; z-index: 1003 } + .offcanvas-overlap-right .exit-off-canvas { -webkit-backface-visibility: hidden; box-shadow: -2px 0 2px rgba(0, 0, 0, 0.2), 2px 0 2px rgba(0, 0, 0, 0.2); @@ -7512,23 +28250,29 @@ ul.off-canvas-list li a:active { top: 0; z-index: 1002 } + @media only screen and (min-width: 40.0625em) { .offcanvas-overlap-right .exit-off-canvas:hover { background: rgba(0, 0, 0, 0.35) } } + .no-csstransforms .left-off-canvas-menu { left: -15.625rem } + .no-csstransforms .right-off-canvas-menu { right: -15.625rem } + .no-csstransforms .move-left>.inner-wrap { right: 15.625rem } + .no-csstransforms .move-right>.inner-wrap { left: 15.625rem } + .left-submenu { -webkit-backface-visibility: hidden; -webkit-overflow-scrolling: touch; @@ -7555,9 +28299,11 @@ ul.off-canvas-list li a:active { -o-transition: -o-transform 500ms ease; transition: transform 500ms ease } + .left-submenu * { -webkit-backface-visibility: hidden } + .left-submenu .back>a { background: #129ac8; border-bottom: none; @@ -7568,16 +28314,19 @@ ul.off-canvas-list li a:active { text-transform: uppercase; margin: 0 } + .left-submenu .back>a:hover { background: #29baec; border-bottom: none; border-top: 1px solid #19b5ea } + .left-submenu .back>a:before { content: "\AB"; margin-right: .5rem; display: inline } + .left-submenu.move-right, .left-submenu.offcanvas-overlap-right, .left-submenu.offcanvas-overlap { @@ -7588,6 +28337,7 @@ ul.off-canvas-list li a:active { -o-transform: translate3d(0%, 0, 0); transform: translate3d(0%, 0, 0) } + .right-submenu { -webkit-backface-visibility: hidden; -webkit-overflow-scrolling: touch; @@ -7614,9 +28364,11 @@ ul.off-canvas-list li a:active { -o-transition: -o-transform 500ms ease; transition: transform 500ms ease } + .right-submenu * { -webkit-backface-visibility: hidden } + .right-submenu .back>a { background: #129ac8; border-bottom: none; @@ -7627,16 +28379,19 @@ ul.off-canvas-list li a:active { text-transform: uppercase; margin: 0 } + .right-submenu .back>a:hover { background: #29baec; border-bottom: none; border-top: 1px solid #19b5ea } + .right-submenu .back>a:after { content: "\BB"; margin-left: .5rem; display: inline } + .right-submenu.move-left, .right-submenu.offcanvas-overlap-left, .right-submenu.offcanvas-overlap { @@ -7647,16 +28402,19 @@ ul.off-canvas-list li a:active { -o-transform: translate3d(0%, 0, 0); transform: translate3d(0%, 0, 0) } + .left-off-canvas-menu ul.off-canvas-list li.has-submenu>a:after { content: "\BB"; margin-left: .5rem; display: inline } + .right-off-canvas-menu ul.off-canvas-list li.has-submenu>a:before { content: "\AB"; margin-right: .5rem; display: inline } + @media only screen { .show-for-small-only, .show-for-small-up, @@ -7885,6 +28643,7 @@ ul.off-canvas-list li a:active { display: table-cell !important } } + @media only screen and (min-width: 40.0625em) { .hide-for-small-only, .show-for-small-up, @@ -8113,6 +28872,7 @@ ul.off-canvas-list li a:active { display: table-cell !important } } + @media only screen and (min-width: 58.8125em) { .hide-for-small-only, .show-for-small-up, @@ -8341,6 +29101,7 @@ ul.off-canvas-list li a:active { display: table-cell !important } } + @media only screen and (min-width: 90.0625em) { .hide-for-small-only, .show-for-small-up, @@ -8569,6 +29330,7 @@ ul.off-canvas-list li a:active { display: table-cell !important } } + @media only screen and (min-width: 120.0625em) { .hide-for-small-only, .show-for-small-up, @@ -8797,36 +29559,44 @@ ul.off-canvas-list li a:active { display: table-cell !important } } + .show-for-landscape, .hide-for-portrait { display: inherit !important } + .hide-for-landscape, .show-for-portrait { display: none !important } + table.hide-for-landscape, table.show-for-portrait { display: table !important } + thead.hide-for-landscape, thead.show-for-portrait { display: table-header-group !important } + tbody.hide-for-landscape, tbody.show-for-portrait { display: table-row-group !important } + tr.hide-for-landscape, tr.show-for-portrait { display: table-row !important } + td.hide-for-landscape, td.show-for-portrait, th.hide-for-landscape, th.show-for-portrait { display: table-cell !important } + @media only screen and (orientation: landscape) { .show-for-landscape, .hide-for-portrait { @@ -8859,6 +29629,7 @@ th.show-for-portrait { display: table-cell !important } } + @media only screen and (orientation: portrait) { .show-for-portrait, .hide-for-landscape { @@ -8891,54 +29662,71 @@ th.show-for-portrait { display: table-cell !important } } + .show-for-touch { display: none !important } + .hide-for-touch { display: inherit !important } + .touch .show-for-touch { display: inherit !important } + .touch .hide-for-touch { display: none !important } + table.hide-for-touch { display: table !important } + .touch table.show-for-touch { display: table !important } + thead.hide-for-touch { display: table-header-group !important } + .touch thead.show-for-touch { display: table-header-group !important } + tbody.hide-for-touch { display: table-row-group !important } + .touch tbody.show-for-touch { display: table-row-group !important } + tr.hide-for-touch { display: table-row !important } + .touch tr.show-for-touch { display: table-row !important } + td.hide-for-touch { display: table-cell !important } + .touch td.show-for-touch { display: table-cell !important } + th.hide-for-touch { display: table-cell !important } + .touch th.show-for-touch { display: table-cell !important } + .show-for-sr { clip: rect(1px, 1px, 1px, 1px); height: 1px; @@ -8946,6 +29734,7 @@ th.hide-for-touch { position: absolute !important; width: 1px } + .show-on-focus { clip: rect(1px, 1px, 1px, 1px); height: 1px; @@ -8953,6 +29742,7 @@ th.hide-for-touch { position: absolute !important; width: 1px } + .show-on-focus:focus, .show-on-focus:active { position: static !important; @@ -8961,9 +29751,11 @@ th.hide-for-touch { overflow: visible; clip: auto } + .print-only { display: none !important } + @media print { * { background: transparent !important; @@ -9051,6 +29843,7 @@ th.hide-for-touch { display: inherit !important } } + @media print { .show-for-print { display: block @@ -9077,12 +29870,16 @@ th.hide-for-touch { display: table-cell !important } } + @media not print { .show-for-print { display: none !important } } + + /* SVEN SAYS NO - FISHER SAID YES */ + h1, h2, h3, @@ -9097,19 +29894,23 @@ li { li { line-height: 2 } + p>sub { font-size: .8rem; line-height: 1.3rem; display: block } + header .nav-global>li { display: block; float: left; list-style: none; } + header .nav-global>li>* { display: block } + header .nav-global a.button { background: #86D801; padding: 0.625rem 1.875rem; @@ -9118,19 +29919,23 @@ header .nav-global a.button { position: relative; bottom: -5px } + header .nav-global a.button:hover { background: #fa8000 } + @media only screen and (max-width: 40em) { header .nav-global { display: none } } + @media only screen and (min-width: 40.0625em) and (max-width: 58.75em) { header .nav-global { display: none } } + .main-header div>.nav-main { list-style: none; margin: 0; @@ -9138,29 +29943,35 @@ header .nav-global a.button:hover { overflow: visible; float: right; } + .main-header div>.nav-main>li { display: block; float: left; list-style: none; margin-left: 1.375rem } + .main-header div>.nav-main>li>* { display: block } + @media only screen and (max-width: 40em) { .main-header div>.nav-main { display: none } } + @media only screen and (min-width: 40.0625em) and (max-width: 58.75em) { .main-header div>.nav-main { display: none } } + .main-header div>.nav-main>li { position: relative; - margin-left: 22px; + margin-left: 22px; } + .main-header div>.nav-main>li ul { position: absolute; margin: 0; @@ -9172,9 +29983,11 @@ header .nav-global a.button:hover { float: left; display: none } + .main-header div>.nav-main>li ul>li:first-child { display: none } + .main-header div>.nav-main>li ul a { display: block; font-size: 0.8125rem; @@ -9182,29 +29995,34 @@ header .nav-global a.button:hover { border-bottom: 1px solid #ddd; padding: 8px 15px; } + .main-header div>.nav-main>li ul a:hover { background: #fafafa } + .main-header div>.nav-main>li ul a:last-child { border-bottom: 0 solid #ddd } + .main-header div>.nav-main>li:hover ul { display: block } -.main-header div>.nav-main a { - font-family: 'Geomanist Book', sans-serif; - font-size:18px; - color:#fff; - text-decoration: none; -} -.main-header div>.nav-main a:hover { - color:#fff; -} -@media only screen and (min-width: 1150px) { - .main-header div>.nav-main a { - } +.main-header div>.nav-main a { + font-family: 'Geomanist Book', sans-serif; + font-size: 18px; + color: #fff; + text-decoration: none; } + +.main-header div>.nav-main a:hover { + color: #fff; +} + +@media only screen and (min-width: 1150px) { + .main-header div>.nav-main a {} +} + .nav-sub { list-style: none; margin-left: -1.375rem; @@ -9216,25 +30034,24 @@ header .nav-global a.button:hover { margin: 1.875rem 0 0 0; text-align: center } + .nav-sub>li { display: block; float: left; list-style: none; margin-left: 1.375rem } + .nav-sub>li>* { display: block } -@media only screen and (max-width: 40em) { - .nav-sub { - display: none - } -} + .nav-sub li { margin-left: 10px; display: inline-block; float: none } + .nav-sub a { font-size: 0.9375rem; font-weight: 100; @@ -9243,74 +30060,91 @@ header .nav-global a.button:hover { background: #1088b1; border-radius: 5px 5px 0 0 } + .nav-sub a:hover { background: #084053 } + .nav-sub a.active-trail { background: #fff; color: #1088b1 } + @media only screen and (min-width: 40.0625em) and (max-width: 58.75em) { .nav-sub a { font-size: 0.8125rem } } + .left-off-canvas-menu .button { display: block; margin: 10px; font-size: 0.875rem; padding: 14px } + .nav-global-off-canvas { list-style: none; padding: 12px 10px; margin-left: 0 } + .nav-global-off-canvas a { color: #fff; font-weight: 100 } + .off-canvas-list li.left-submenu>ul>li:nth-child(2) { display: none } + .side-nav li a:not(.button) { padding: 0.3125rem 0 } + .side-nav li a:not(.button):hover { background: #f1f1f1; padding: 0.3125rem 0.625rem; color: #129ac8 } + .side-nav li.active a:not(.button) { background: #f1f1f1; padding: 0.3125rem 0.625rem; color: #129ac8 } + .side-nav li.active>a:first-child:not(.button) { color: #129ac8 } + .security-post strong.date { font-size: .9rem; margin-top: -13px; margin-bottom: 8px; display: block } + .path-partners .page-content { padding-bottom: 2rem } + .path-partners .page-content h2 { clear: left; margin-top: -30px; padding-top: 30px } + .path-partners .page-content p { clear: left; padding-left: 14rem; overflow: hidden } + .path-partners .page-content h2+p { padding-left: 0 } + .path-partners .page-content img { float: left; clear: left; @@ -9318,22 +30152,27 @@ header .nav-global a.button:hover { height: auto !important; margin-left: -14rem } + .path-partners .page-content .large-3 ul { -webkit-transform: translate3d(0, 0, 0) } + .path-partners .page-content .large-3 li { list-style: none } + .path-partners .page-content .fixed-bar { position: fixed; top: 30px } + .embed-wrapper { position: relative; padding-bottom: 56.25%; padding-top: 25px; height: 0 } + .embed-wrapper iframe { position: absolute; top: 0; @@ -9341,13 +30180,16 @@ header .nav-global a.button:hover { width: 100%; height: 100% } + .management .team-bios { margin: 2.5rem 0 } + .management .team-bios li { padding: 0 3% 1.25rem; position: relative } + .management .team-bios li.selected:after { content: ''; display: block; @@ -9361,41 +30203,51 @@ header .nav-global a.button:hover { left: 50%; transform: translateX(-50%) } + .management .bio-image img { width: 100%; margin-bottom: .4rem } + .management .bio-content { display: block } + .management .bio-content h2, .management .bio-content h3 { font-size: 1.2rem; margin: 0 } + .management .bio-content h2 { font-weight: bold } + .management .bio-content .linkedin { float: right } + .management .bio-details { display: none } + .management ul.team-bios>.bio-details { display: block; clear: both; margin-bottom: 30px } + @media only screen and (max-width: 58.8125em) { .management ul.team-bios>.bio-details { margin-left: 0; margin-right: 0 } } + .management ul.team-bios>.bio-details .bio-description { margin-bottom: 2rem } + .management ul.team-bios>.bio-details .inner { background: #22b8eb; margin: 0 -1rem; @@ -9403,44 +30255,54 @@ header .nav-global a.button:hover { overflow: hidden; padding: 40px 0 40px } + .management ul.team-bios>.bio-details .inner h2 { color: white; text-align: center; margin-bottom: 40px } + .management ul.team-bios>.bio-details .inner h2 a { color: white } + .management ul.team-bios>.bio-details .inner h3 { display: none } + .team { margin-top: 2rem; margin-bottom: 2rem } + .primary-team-image { float: left; width: 59.4%; height: auto; margin-right: 3% } + .secondary-team-image { float: left; width: 37.6%; height: auto; margin-bottom: 3% } + #grnhse_iframe { margin-bottom: 5rem } + .path-work-at-docker .bubbles, .path-work-at-docker .flip { margin-top: -5rem; margin-bottom: -5rem } + table td { vertical-align: top } + @media only screen and (min-width: 40.0625em) { .divided-content li { border-right: 1px solid #eee; @@ -9454,34 +30316,42 @@ table td { padding-left: .625rem } } + @media only screen and (max-width: 40em) { .divided-content li { border-right: none } } + .half-centered.columns { margin: 0 auto; float: none !important; clear: both; padding-top: 2.5rem } + .half-centered.columns a { float: right } + .repo-card-wrapper iframe { max-width: 100% } + .open-source-event { padding-bottom: 1.5rem } + .open-source-event strong.date { margin-top: .5rem; display: block } + .repos { list-style: none; margin: 0 } + .repos li { list-style: none; float: left; @@ -9489,85 +30359,106 @@ table td { width: 30.3%; background: url("../images/ajax-loader.gif") no-repeat center 100px } + .repos li iframe { max-width: 100%; height: 240px } + @media only screen and (max-width: 40em) { .repos li { width: 100%; margin: 0 } } + .featured-content iframe { max-width: 100%; max-height: 350px } + .featured-content img { max-width: 100% } + section.row.featured-primary, section.row.featured-secondary { max-width: 62rem } + .around-the-web { margin-top: 3rem } + .around-the-web .image_wrapper { max-width: 160px; margin: 0 auto } + .around-the-web li { margin-bottom: 2rem } + .around-the-web img { max-width: 100% } + .featured-community .featured-content img { height: auto !important } + .featured-customers .customer { min-height: 25rem; position: relative } + .featured-customers .customer h4 { position: absolute; bottom: 0; left: 1rem } + .secondary-customers { margin-top: 2rem } + .secondary-customers .customer { min-height: 15.625rem; position: relative } + .secondary-customers .customer h4 { position: absolute; bottom: 0; left: 1rem } + div.share-story-outer { height: 21.875rem; background-color: #E75A24 } + div.share-story-outer div { position: absolute; bottom: 0; margin-right: 1rem; padding: 1rem } + div.share-story-outer div h3 { color: #F4F9FB; font-weight: normal } + div.share-story-outer div p { color: #F4F9FB } + .customers h1 { margin: 3.125rem 0; text-align: center } + .customers .customer { min-height: 11.25rem; width: 25%; @@ -9577,6 +30468,7 @@ div.share-story-outer div p { background-size: 70%; cursor: pointer } + .customers .customer-details { display: none; clear: both; @@ -9584,6 +30476,7 @@ div.share-story-outer div p { padding: 2rem 2rem 1rem 2rem; position: relative } + .customers .customer-details:before { content: ' '; position: absolute; @@ -9594,77 +30487,98 @@ div.share-story-outer div p { border: 1.2rem solid #efefef; border-color: transparent transparent #efefef transparent } + .customers .customer-details.nth-1:before { left: 35.5% } + .customers .customer-details.nth-2:before { left: 60.5% } + .customers .customer-details.nth-3:before { left: 85.5% } + .customers .customer-details.open { display: block } + .customers .customer-details h1 { margin-top: 0; margin-bottom: 2rem; text-align: center } + .customers .customer-details .customer-benefits { margin-top: 1rem } + .customers .customer-details blockquote { padding-left: 5rem; position: relative } + .customers .customer-details blockquote img { position: absolute; top: 0; left: 0 } + .path-meetups .body { margin-bottom: 2rem } + .meetup a { display: block; margin-bottom: 5px } + .page-content>section:last-of-type { margin-bottom: 5rem } + .page-content .below-content { margin-bottom: 5rem } + .featured-event .image { height: 10rem; background-position: center center; background-size: cover } + .event { margin-bottom: 1rem } + .event.dynamic { display: none } + .search-results.loaded .event.dynamic { display: block } + .event-search { padding: 5rem 0 } + .path-open-source .event-search { padding: 0 } + .contextual-links-wrapper { display: none } + .administration-quick-links { position: fixed; left: 0; top: 33%; z-index: 100 } + .administration-quick-links a { padding: 8px 20px; text-align: center; @@ -9676,19 +30590,24 @@ div.share-story-outer div p { display: block; margin: 1rem 0 } + .administration-quick-links a:hover { background-color: #f17b00 } + .page-import footer.main-footer { padding: 0 } + .button { border-radius: 5px } + .button.white { color: #22b8eb; background: #fff } + input[type="text"], input[type="password"], input[type="date"], @@ -9706,42 +30625,51 @@ input[type="color"], textarea { border-radius: 5px } + input::-webkit-input-placeholder { color: #7A8491; font-weight: 300 } + input::-moz-placeholder { color: #7A8491; font-weight: 300 } + input:-moz-placeholder { color: #7A8491; font-weight: 300 } + input:-ms-input-placeholder { color: #7A8491; font-weight: 300 } + span.postfix { background: #FF992E; border-radius: 0px 5px 5px 0px; border: none; color: #fff } + input.with-postfix { border-radius: 5px 0px 0px 5px } + .hero { background-color: #22b8eb; padding: 1.5625rem 0 2.875rem 0; position: relative; margin-bottom: 2.5rem } + @media only screen and (max-width: 40em) { .hero { background-image: none !important } } + @media only screen and (min-width: 40.0625em) { .hero { padding: 3.125rem 0 12.5rem 0; @@ -9750,6 +30678,7 @@ input.with-postfix { background-position: center center } } + .hero h1, .hero h2, .hero h3, @@ -9758,10 +30687,12 @@ input.with-postfix { .hero a { color: #fff } + .hero p { font-size: 1.125rem; line-height: 1.75 } + .hero button.secondary, .hero .button.secondary { background-color: #384d55; @@ -9769,19 +30700,24 @@ input.with-postfix { width: 300px; display: block } + .hero-full { margin-bottom: 2.5rem; text-align: center } + .hero-full .region-hero-sub { margin-top: -5.3rem } + .path-docker-con .hero { padding: 3.125rem 0 3.5rem 0 } + .path-docker-con img.con { margin-bottom: 1rem } + .hero-sub { background-color: #22b8eb; padding: 1.5625rem 0 0 0; @@ -9789,11 +30725,13 @@ input.with-postfix { text-align: center; min-height: 9rem } + @media only screen and (min-width: 40.0625em) { .hero-sub { padding: 4.6875rem 0 0 0 } } + .hero-sub h1, .hero-sub h2, .hero-sub h3, @@ -9802,34 +30740,41 @@ input.with-postfix { .hero-sub a { color: #fff } + @media only screen and (min-width: 40.0625em) { .hero-sub .landing-hero-des { margin-bottom: 5.9375rem } } + .hero-sub iframe { max-width: 100% } + body { height: auto; min-height: 100%; padding-bottom: 540px } + @media only screen and (min-width: 58.8125em) { body { padding-bottom: 270px } } + @media only screen and (min-width: 40.0625em) and (max-width: 58.75em) { body { padding-bottom: 520px } } + @media only screen and (max-width: 40em) { body { padding-bottom: 630px } } + .main-footer { background: #243137; position: relative; @@ -9839,11 +30784,13 @@ body { bottom: 0; width: 100% } + @media only screen and (min-width: 40.0625em) { .main-footer { padding: 2rem } } + .main-footer::before { background: url("../images/footer-wave.svg") repeat-x; height: 16px; @@ -9853,28 +30800,35 @@ body { left: 0; content: "" } + .main-footer h6 { color: #fff; font-weight: 300 } + .main-footer h6 a { color: #fff; font-weight: 300 } + .main-footer h6 a:hover { color: #22b8eb } + .main-footer p { color: #7A8491 } + .main-footer ul { list-style: none; margin-left: 0 } + .main-footer li a { color: #7A8491; font-weight: 300 } + .main-footer li a:hover { color: #969ea8 } @@ -9884,41 +30838,52 @@ body { padding: 0.4em 0.5em !important } } + .main-footer div>.nav-main>li { margin-left: 0 } + .main-footer div>.nav-main>li ul { display: none } + .main-footer div>.nav-main>li>a { color: #ffffff } + .main-footer div>.nav-main>li>a:hover { color: #22b8eb } + .main-footer div>.nav-main>li .first { display: none; margin-top: 0.2rem; margin-bottom: 0.5rem } + .nav-global-footer .block-menu { float: left } + @media only screen and (max-width: 40em) { .nav-global-footer .block-menu { width: 50% } } + .nav-global-footer div>ul>li>a { color: #fff; font-weight: 300 } + .nav-global-footer div>ul>li>a:hover { color: #22b8eb } + img.wow { max-height: 215px } + @media only screen and (min-width: 40.0625em) and (max-width: 58.75em) { img.wow { height: 215px @@ -9930,90 +30895,110 @@ img.wow { overflow: visible; position: relative; z-index: 90; - background: transparent; + background: transparent; } -.main-header .logo,.main-header .logo_safari { + +.main-header .logo, +.main-header .logo_safari { margin-top: 16px; max-width: 200px } + @media only screen and (max-width: 40em) { - .main-header .logo,.main-header .logo_safari { + .main-header .logo, + .main-header .logo_safari { display: block; margin: auto; margin-top: 0; max-width: 175px } } + @media only screen and (min-width: 40.0625em) and (max-width: 58.75em) { - .main-header .logo,.main-header .logo_safari { + .main-header .logo, + .main-header .logo_safari { display: block; margin: auto; margin-top: 0; max-width: 175px } } + @media only screen and (min-width: 58.8125em) { - .main-header .logo,.main-header .logo_safari { + .main-header .logo, + .main-header .logo_safari { margin-left: -14px } } + .left-off-canvas-toggle { position: absolute; left: 0.9375rem; top: 17px; z-index: 99 } + @media only screen and (min-width: 58.8125em) { .left-off-canvas-toggle { display: none } } + .get-started-cta { position: absolute; right: 0.9375rem; top: 22px; z-index: 99 } + @media only screen and (min-width: 58.8125em) { .get-started-cta { display: none } } + @media only screen and (max-width: 40em) { .get-started-cta { display: none } } + .bsr-section { background: #134a6a; text-align: center; padding: 3rem 0 0 0 } + @media only screen and (min-width: 40.0625em) { .bsr-section { margin-bottom: 6rem } } + .bsr-section p { color: #fff; text-align: center } + .bsr-item { padding: 1rem 3rem 2rem 3rem; cursor: pointer; position: relative } + @media only screen and (min-width: 40.0625em) { .bsr-item { margin-top: 1.25rem; min-height: 400px } } + .bsr-item:hover, .bsr-item.is-active { background: #0b2c3f; border-radius: 5px } + .bsr-item.is-active::before { content: ''; position: absolute; @@ -10025,45 +31010,56 @@ img.wow { border-right: 10px solid transparent; border-bottom: 10px solid #22b8eb } + .build-item { margin-bottom: 1rem } + .build { padding-bottom: 1rem } + .ship { padding-bottom: 1rem } + .run { padding-bottom: 1rem } + .bsr-item-detail { background: #22b8eb; padding: 3rem 0; position: relative } + .bsr-item-detail h3, .bsr-item-detail p, .bsr-item-detail li { color: #fff } + .bsr-item-detail p, .bsr-item-detail li { text-align: left } + .bsr-item-detail li { font-weight: 300 } + .cta-section { background-color: #fff; text-align: center; padding: 1rem 0 } + @media only screen and (min-width: 40.0625em) { .cta-section { padding: 2rem 0 4rem 0 } } + .cta-illustration { background-color: #22b8eb; background-size: cover; @@ -10072,40 +31068,48 @@ img.wow { margin-top: 2rem; padding: 2.5rem 0 2.875rem 0 } + @media only screen and (min-width: 40.0625em) { .cta-illustration { margin-top: 5rem; padding: 4.6875rem 0 4.6875rem 0 } } + @media only screen and (min-width: 40.0625em) { body.front .cta-illustration { margin-top: 5rem; padding: 4.6875rem 0 28.125rem 0 } } + .normal-links a { color: #fff } + .landing-hero { margin: 0 auto; max-width: 75rem; width: 100% } + .landing-hero:before, .landing-hero:after { content: " "; display: table } + .landing-hero:after { clear: both } + .landing-hero-des { padding-left: 0.9375rem; padding-right: 0.9375rem; width: 100%; float: left } + .nav-landing { list-style: none; margin-left: -1.375rem; @@ -10114,23 +31118,28 @@ img.wow { overflow: hidden; padding: 0 } + .nav-landing>li { display: block; float: left; list-style: none; margin-left: 1.375rem } + .nav-landing>li>* { display: block } + .benefits { padding: 2rem 0 } + @media only screen and (min-width: 40.0625em) { .benefits { padding: 5rem 0 } } + @media only screen and (max-width: 40em) { .benefits .row { padding-bottom: 2rem @@ -10139,21 +31148,25 @@ img.wow { margin-bottom: 1rem } } + .bubbles { display: block; max-width: 500px; margin: auto } + @media only screen and (max-width: 40em) { .bubbles { display: none } } + .flip { -moz-transform: scaleX(-1); -webkit-transform: scaleX(-1); transform: scaleX(-1) } + .bubbles.animated .b1, .bubbles.animated .b2, .bubbles.animated .b3, @@ -10179,72 +31192,89 @@ img.wow { -moz-animation-delay: 0; -moz-animation-fill-mode: both } + .bubbles.animated .b2 { -webkit-animation-delay: 200ms; -moz-animation-delay: 200ms } + .bubbles.animated .b3 { -webkit-animation-delay: 300ms; -moz-animation-delay: 300ms } + .bubbles.animated .b4 { -webkit-animation-delay: 400ms; -moz-animation-delay: 400ms } + .bubbles.animated .b5 { -webkit-animation-delay: 500ms; -moz-animation-delay: 500ms } + .bubbles.animated .b6 { -webkit-animation-delay: 6000ms; -moz-animation-delay: 600ms } + .bubbles.animated .b7 { -webkit-animation-delay: 700ms; -moz-animation-delay: 700ms } + .bubbles.animated .b8 { -webkit-animation-delay: 800ms; -moz-animation-delay: 800ms } + .bubbles.animated .b9 { -webkit-animation-delay: 900ms; -moz-animation-delay: 900ms } + .bubbles.animated .b10 { -webkit-animation-delay: 1000ms; -moz-animation-delay: 1000ms } + .bubbles.animated .b11 { -webkit-animation-delay: 1200ms; -moz-animation-delay: 1200ms } + .bubbles.animated .b12 { -webkit-animation-delay: 1300ms; -moz-animation-delay: 1300ms } + .bubbles.animated .b13 { -webkit-animation-delay: 1400ms; -moz-animation-delay: 1400ms } + .ie9 .bubbles.animated { opacity: 1 } + hr { border: none; height: 1px; background-color: #ddd } + @media only screen and (min-width: 40.0625em) { hr { margin: 3.125rem auto } } + @media only screen and (min-width: 58.8125em) { hr { max-width: 73.125rem } } + hr.moby { position: relative; padding: 0; @@ -10252,13 +31282,15 @@ hr.moby { border: none; height: 1px; background: #ddd; - max-width: 900px; + max-width: 900px; } + @media only screen and (min-width: 40.0625em) { hr.moby { margin: 3.125rem auto } } + hr.moby::after { content: ''; position: absolute; @@ -10269,39 +31301,49 @@ hr.moby::after { width: 52px; background: url("../images/moby-tiny.svg") no-repeat } + hr.dark-bg { background-color: #384c56 } + .products { width: 100% } + .products .product-tab { text-align: center; cursor: pointer } + .products .product-tab.selected h2 { border-bottom: .3rem solid #eee } + .products .product-details { position: absolute; right: -9999px } + .products .product-details.open { display: block !important; border: .1rem solid #eee } + .products .product-details.loaded { position: static; right: auto } + .products .product-details>div ul { list-style-type: none; margin: 0; text-align: center } + .products .product-details>div ul li { margin: 0 } + .products .product-details .product-tiers li .tier { position: relative; display: block; @@ -10312,10 +31354,12 @@ hr.dark-bg { border-radius: 5px; min-height: 20rem } + .products .product-details .product-tiers li .tier h2, .products .product-details .product-tiers li .tier h3 { text-align: center } + .products .product-details .product-tiers li .tier .button { position: absolute; bottom: 1rem; @@ -10324,37 +31368,45 @@ hr.dark-bg { left: 15%; right: 15% } + .products-items { padding: 1rem 0; display: block; padding: 0; margin: 0 -0.625rem } + .products-items:before, .products-items:after { content: " "; display: table } + .products-items:after { clear: both } + .products-items>li { display: block; float: left; height: auto; padding: 0 0.625rem 1.25rem } + .products-items>li { list-style: none; padding: 0 0.625rem 1.25rem; width: 100% } + .products-items>li:nth-of-type(1n) { clear: none } + .products-items>li:nth-of-type(1n+1) { clear: both } + @media only screen and (min-width: 40.0625em) { .products-items { display: block; @@ -10387,6 +31439,7 @@ hr.dark-bg { clear: both } } + @media only screen and (min-width: 58.8125em) { .products-items { display: block; @@ -10419,10 +31472,12 @@ hr.dark-bg { clear: both } } + .products-items li { margin-bottom: 0.5rem; text-align: center } + .products-items-card { display: block; padding: 2rem 2rem; @@ -10430,58 +31485,72 @@ hr.dark-bg { border: 1px solid #d6e9f0; border-radius: 5px } + .products-items-card img { max-width: 60%; max-height: 43px } + .products-items-card:hover { background-color: #edf5f8; border: 1px solid #d6e9f0 } + .products-items-card p { color: #7A8491 } + .products-items-card .link { color: #FF992E } + .sub-links ul { list-style: none; text-align: center } + .sub-links li { display: inline-block; padding: 1rem } + .product-features { display: block; padding: 0; margin: 0 -0.625rem } + .product-features:before, .product-features:after { content: " "; display: table } + .product-features:after { clear: both } + .product-features>li { display: block; float: left; height: auto; padding: 0 0.625rem 1.25rem } + .product-features>li { list-style: none; padding: 0 0.625rem 1.25rem; width: 100% } + .product-features>li:nth-of-type(1n) { clear: none } + .product-features>li:nth-of-type(1n+1) { clear: both } + @media only screen and (min-width: 40.0625em) { .product-features { display: block; @@ -10514,9 +31583,11 @@ hr.dark-bg { clear: both } } + .timeline { position: relative } + .timeline::before { left: 5px; content: ''; @@ -10525,22 +31596,27 @@ hr.dark-bg { width: 1px; background: #e1e1e1 } + .timeline ul { list-style: none; z-index: 1; padding: 0 } + .timeline li { margin-bottom: 2em; position: relative; display: block } + .timeline li h5 { color: #fff } + .timeline li img { margin-bottom: 1rem } + .timeline li::before { content: ''; top: 0; @@ -10551,6 +31627,7 @@ hr.dark-bg { position: absolute; left: -21px } + @media only screen and (min-width: 40.0625em) { .timeline { padding-bottom: 4rem @@ -10607,46 +31684,56 @@ hr.dark-bg { clear: both } } + .timeline li.featured>div { padding: 1rem 1rem 0.15rem 1rem; background: #e1e1e1; border-radius: 5px } + .timeline li.featured.acquisition:before, .timeline li.featured.acquisition>div { background: #22b8eb; color: #fff } + .timeline li.featured.acquisition>div::after { border-color: transparent transparent transparent #22b8eb } + .timeline li.featured.launch:before, .timeline li.featured.launch>div { background: #86D800; color: #fff } + .timeline li.featured.launch>div::after { border-color: transparent transparent transparent #86D800 } + .timeline li.featured.funding:before, .timeline li.featured.funding>div { background: #FFDE00; color: #fff } + .timeline li.featured.funding>div::after { border-color: transparent transparent transparent #FFDE00 } + .callout { background: #134a6a; padding: 1.5625rem 0; margin: 4rem 0; position: relative } + @media only screen and (min-width: 40.0625em) { .callout { padding: 4.6875rem 0 } } + .callout h1, .callout h2, .callout h3, @@ -10655,6 +31742,7 @@ hr.dark-bg { .callout a { color: #fff } + .og-grid { list-style: none; padding: 20px 0; @@ -10662,12 +31750,14 @@ hr.dark-bg { text-align: center; width: 100% } + .og-grid li { display: inline-block; margin: 10px 5px 0 5px; vertical-align: top; height: 250px } + .og-grid li>a, .og-grid li>a img { border: none; @@ -10675,6 +31765,7 @@ hr.dark-bg { display: block; position: relative } + .og-grid li.og-expanded>a::after { top: auto; border: solid transparent; @@ -10688,6 +31779,7 @@ hr.dark-bg { left: 50%; margin: -20px 0 0 -15px } + .og-expander { position: absolute; background: #ddd; @@ -10699,10 +31791,12 @@ hr.dark-bg { height: 0; overflow: hidden } + .og-expander-inner { padding: 50px 30px; height: 100% } + .og-close { position: absolute; width: 40px; @@ -10711,6 +31805,7 @@ hr.dark-bg { right: 20px; cursor: pointer } + .og-close::before, .og-close::after { content: ''; @@ -10723,24 +31818,29 @@ hr.dark-bg { -moz-transform: rotate(45deg); transform: rotate(45deg) } + .og-close::after { -webkit-transform: rotate(-45deg); -moz-transform: rotate(-45deg); transform: rotate(-45deg) } + .og-close:hover::before, .og-close:hover::after { background: #333 } + .og-details a::before { content: '\2192'; display: inline-block; margin-right: 10px } + .og-details a:hover { border-color: #999; color: #999 } + @media screen and (max-width: 830px) { .og-expander h3 { font-size: 32px @@ -10752,6 +31852,7 @@ hr.dark-bg { font-size: 12px } } + @media screen and (max-width: 650px) { .og-fullimg { display: none @@ -10761,6 +31862,7 @@ hr.dark-bg { width: 100% } } + .terminal-window { text-align: left; max-width: 650px; @@ -10768,12 +31870,14 @@ hr.dark-bg { position: relative; margin-bottom: 2rem } + .terminal-window header { background: #E0E8F0; height: 30px; border-radius: 5px 5px 0 0; padding-left: 10px } + .terminal-window header .btn { width: 12px; height: 12px; @@ -10781,15 +31885,19 @@ hr.dark-bg { display: inline-block; border-radius: 8px } + .terminal-window header .btn.green { background: #3BB662 } + .terminal-window header .btn.yellow { background: #E5C30F } + .terminal-window header .btn.red { background: #E75448 } + .terminal-window section.terminal { color: white; font-family: Menlo, Monaco, "Consolas", "Courier New", "Courier"; @@ -10799,12 +31907,14 @@ hr.dark-bg { width: 100%; min-height: 320px } + .terminal-window section.terminal .typed-cursor { opacity: 1; -webkit-animation: blink 1.2s infinite; -moz-animation: blink 1.2s infinite; animation: blink 1.2s infinite } + @keyframes blink { 0% { opacity: 1 @@ -10816,6 +31926,7 @@ hr.dark-bg { opacity: 1 } } + @-webkit-keyframes blink { 0% { opacity: 1 @@ -10827,6 +31938,7 @@ hr.dark-bg { opacity: 1 } } + @-moz-keyframes blink { 0% { opacity: 1 @@ -10838,29 +31950,37 @@ hr.dark-bg { opacity: 1 } } + .terminal-window .gray { color: gray } + .terminal-window .green { color: green } + .terminal-window section.terminal.terminal-small { border-radius: 5px; min-height: 220px } + .customer-and-news { padding: 0 0 1.3rem 0 } + .news-item { margin-top: 1.3rem; margin-bottom: 3rem } + .news-item.no-image { padding-top: 4.2rem } + .news-item.no-image.featured { padding-top: 17.2rem } + .news-item div.image { width: 60%; margin-left: 20%; @@ -10870,32 +31990,40 @@ hr.dark-bg { background-position: center center; background-repeat: no-repeat } + .news-item.featured div.image { height: 25rem; width: 100%; margin-left: 0 } + .news-item.divider { border-left: 1px solid #eee } + .news-item h5 { font-size: 1rem } + .news-item .news-item-title { font-size: 1.5rem; color: #22b8eb } + .news-item .news-item-description { font-size: 0.9rem; color: #7A8491 } + .press .date { float: left; padding-right: 1rem } + article.press-item-listing { margin: 1rem 0 } + article.press-item a.source { display: block; height: 40px; @@ -10903,31 +32031,39 @@ article.press-item a.source { background-position: center center; background-repeat: no-repeat } + article.press-item strong.date { margin-top: 1.5rem; display: block; font-size: .9rem } + article.press-item h5 { margin: 0; line-height: 24px } + article.press-item p { margin-bottom: 0 } + article.press-item p a { color: #7A8491 } + .path-all-press article.press-item strong.date { margin-top: initial } + .view-more-press { margin-top: 2rem; display: block } + blockquote { color: #97def6 } + blockquote.large { font-weight: 100; color: #22b8eb; @@ -10935,74 +32071,91 @@ blockquote.large { text-align: center; padding: 1.5625rem 10% } + @media only screen and (min-width: 58.8125em) { blockquote.large { padding: 4.6875rem 20% 3.125rem 20% } } + blockquote.large cite { color: #666666; font-style: normal; font-size: 0.875rem } + @media only screen and (min-width: 40.0625em) { blockquote.large cite { padding-left: 75px } } + .intro { padding: 1.5625rem inherit; text-align: center } + @media only screen and (min-width: 40.0625em) { .intro { padding: 1.25rem inherit 0.625rem inherit } } + .intro li { text-align: center } + .intro-header { padding: 1.7rem 0 1.5rem 0; text-align: center } + .intro-header p { font-size: 1.25rem } + .legal-content { margin-top: 4rem } + .stats-items { padding: 1rem 0; display: block; padding: 0; margin: 0 -0.625rem } + .stats-items:before, .stats-items:after { content: " "; display: table } + .stats-items:after { clear: both } + .stats-items>li { display: block; float: left; height: auto; padding: 0 0.625rem 1.25rem } + .stats-items>li { list-style: none; padding: 0 0.625rem 1.25rem; width: 100% } + .stats-items>li:nth-of-type(1n) { clear: none } + .stats-items>li:nth-of-type(1n+1) { clear: both } + @media only screen and (min-width: 40.0625em) { .stats-items { display: block; @@ -11035,6 +32188,7 @@ blockquote.large cite { clear: both } } + @media only screen and (min-width: 58.8125em) { .stats-items { display: block; @@ -11067,37 +32221,47 @@ blockquote.large cite { clear: both } } + .stats-items li { margin-bottom: 0.5rem; text-align: center } + .path-hackathon .panel { padding-bottom: 1.5rem } + .path-hackathon .panel hr { margin: 1.125rem auto } + .path-hackathon .panel .tags { margin-bottom: 1rem } + .path-hackathon .panel .tags .tag { font-size: .725rem; white-space: normal } + .path-hackathon .steps p { padding-left: 2rem } + .path-hackathon .alert-box { background-image: none; overflow: hidden } + .path-hackathon .alert-box .button { margin-bottom: 0; float: right } + .path-hackathon .alert-box.info { color: #31708f } + .path-hackathon span.badge { display: inline-block; min-width: 10px; @@ -11116,177 +32280,222 @@ blockquote.large cite { position: relative; top: 5px } + .path-hackathon .contacts { margin-top: 25px } + .path-hackathon .social { position: absolute; bottom: 1.25rem; left: 50%; transform: translateX(-50%) } + .path-hackathon a.button { background-color: #FF992E } + .path-hackathon a.button.contact { background-color: #22b8eb } + .path-hackathon .row.submit { margin-top: -3rem } + .path-hackathon .row.well { background: #e8f6f9; padding-top: 1rem; margin-top: 9rem } + .path-hackathon .social { text-align: center; margin-bottom: 10px } + .path-hackathon .social a { display: inline-block; color: white; padding: 3px 10px } + .path-hackathon .social a.twitter { background-color: #00a9f1 } + .path-hackathon .social a.google { background-color: #e0452c } + .path-hackathon .social a.linkedin { background-color: #007bb6 } + .node-type-enterprise .page-content { text-align: center; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale } + .node-type-enterprise .page-content section { padding-top: 60px; padding-bottom: 60px } + .node-type-enterprise .page-content section h1, .node-type-enterprise .page-content section h2 { margin-bottom: 25px } + .node-type-enterprise .page-content section h2 { font-size: 44px } + .node-type-enterprise .page-content section p { font-size: 20px } + .node-type-enterprise .page-content .why-docker .reason p, .node-type-enterprise .page-content .features .feature p, .node-type-enterprise .page-content .services p { font-size: 16px } + .node-type-enterprise .page-content section.dark-blue { background-color: #134a6a } + .node-type-enterprise .page-content section.dark-blue h2, .node-type-enterprise .page-content section.dark-blue p { color: #dde7f7 } + .node-type-enterprise .page-content section.docker-grey { background-color: #243137 } + .node-type-enterprise .page-content section.docker-grey h2 { color: #22b8eb } + .node-type-enterprise .page-content section.docker-grey p { color: #dde7f7 } + .node-type-enterprise .page-content section.docker-bg { background-color: #F4F9FB } + .node-type-enterprise .page-content section.docker-bg h2 { color: #22b8eb } + .node-type-enterprise .page-content .hero-sub { background-color: #243137; margin-bottom: 0px } + .node-type-enterprise .page-content .hero-sub .landing-hero-des { margin-bottom: 0; padding: 0 } + .node-type-enterprise .page-content .hero-sub .button { margin-top: 40px } + @media only screen and (max-width: 40em) { .node-type-enterprise .page-content .hero-sub .button { width: 100%; margin-top: 20px } } + .node-type-enterprise .page-content .hero-sub .button+.button { margin-left: 30px } + @media only screen and (max-width: 40em) { .node-type-enterprise .page-content .hero-sub .button+.button { margin-left: 0 } } + .node-type-enterprise .page-content .hero-sub p { font-size: 20px; color: #dde7f7 } + .node-type-enterprise .page-content .hero-sub a { color: #dde7f7 } + .node-type-enterprise .page-content h1 { color: #22b8eb } + .node-type-enterprise .page-content .why-docker img, .node-type-enterprise .page-content .why-docker h3 { margin-bottom: 15px } + .node-type-enterprise .page-content .why-docker .footer .button { margin-top: 50px } + @media only screen and (max-width: 40em) { .node-type-enterprise .page-content .docker-solution .sidebar { margin-bottom: 50px } } + .node-type-enterprise .page-content .docker-solution .feature { text-align: left; margin-bottom: 50px } + @media only screen and (min-width: 40.0625em) and (max-width: 58.75em) { .node-type-enterprise .page-content .docker-solution .feature { text-align: center } } + @media only screen and (max-width: 40em) { .node-type-enterprise .page-content .docker-solution .feature { text-align: center } } + .node-type-enterprise .page-content .docker-solution .graphic { text-align: center; margin-bottom: 1.25rem } + .node-type-enterprise .page-content .docker-solution .button+.button { margin-left: 30px } + @media only screen and (max-width: 40em) { .node-type-enterprise .page-content .docker-solution .button+.button { margin-left: 0px } } + @media only screen and (max-width: 40em) { .node-type-enterprise .page-content .docker-solution .button { width: 100%; margin-top: 20px } } + .node-type-enterprise .page-content .docker-solution h3 { line-height: 1; margin-top: 0px; margin-bottom: 1.25rem } + .node-type-enterprise .page-content .deploy-docker .item { display: inline-block; vertical-align: middle; @@ -11295,79 +32504,96 @@ blockquote.large cite { margin-left: 2.5rem; margin-right: 2.5rem } + @media only screen and (min-width: 40.0625em) and (max-width: 58.75em) { .node-type-enterprise .page-content .deploy-docker .item { margin-left: 1.5rem; margin-right: 1.5rem } } + @media only screen and (max-width: 40em) { .node-type-enterprise .page-content .deploy-docker .item { margin: 0 auto; display: block } } + .node-type-enterprise .page-content .deploy-docker .item:first-child { margin-left: 0px } + @media only screen and (max-width: 40em) { .node-type-enterprise .page-content .deploy-docker .item:first-child { margin-left: auto } } + .node-type-enterprise .page-content .deploy-docker .item:last-child { margin-right: 0px } + @media only screen and (max-width: 40em) { .node-type-enterprise .page-content .deploy-docker .item:last-child { margin-right: auto } } + .node-type-enterprise .page-content .deploy-docker .columns+.columns:last-child { float: none; width: 23% } + @media only screen and (max-width: 40em) { .node-type-enterprise .page-content .deploy-docker .columns+.columns:last-child { width: 80% } } + .node-type-enterprise .page-content .services-support .header, .node-type-enterprise .page-content .transforming-business .header, .node-type-enterprise .page-content .why-docker .header { margin-bottom: 50px } + .node-type-enterprise .page-content .services-support img { margin-bottom: 1.25rem } + @media only screen and (max-width: 40em) { .node-type-enterprise .page-content .services-support .services>div { margin-bottom: 50px } } + .node-type-enterprise .page-content .transforming-business .businesses-logos { text-align: center; margin-bottom: 40px } + .node-type-enterprise .page-content .transforming-business .businesses-logos img { padding: 20px 20px 0px 20px; display: inline-block; vertical-align: middle } + @media only screen and (max-width: 40em) { .node-type-enterprise .page-content .transforming-business .businesses-logos img { padding: 20px } } + .node-type-enterprise .page-content .resources { text-align: left } + @media only screen and (max-width: 40em) { .node-type-enterprise .page-content .resources .sidebar { text-align: center; margin-bottom: 50px } } + .node-type-enterprise .page-content .resources .resource-items { background-color: #F4F9FB; border: 1px solid #d8e2f1; @@ -11377,16 +32603,19 @@ blockquote.large cite { padding-left: 30px; padding-right: 30px } + .node-type-enterprise .page-content .resources .resource-items .item { padding-top: 25px; padding-bottom: 25px; position: relative } + .node-type-enterprise .page-content .resources .resource-items .item>a { width: 96%; vertical-align: middle; display: inline-block } + .node-type-enterprise .page-content .resources .resource-items .item:after { font-family: "FontAwesome"; content: "\f105"; @@ -11401,56 +32630,69 @@ blockquote.large cite { -ms-transform: translateY(-50%); transform: translateY(-50%) } + .node-type-enterprise .page-content .resources .resource-items .item+.item { border-top: 1px solid #d8e2f1 } + .node-type-enterprise .page-content .resources .resource-items .item .heading { font-size: 23px; display: block; margin-bottom: 25px; line-height: 1 } + .node-type-enterprise .page-content .resources .resource-items .item .description { display: block; font-size: 16px; color: #7A8491; line-height: 1 } + body.node-type-flexible-page .page-content { text-align: center; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale } + body.node-type-flexible-page .page-content>section:last-of-type { margin-bottom: 0px } + body.node-type-flexible-page .page-content .max-width800 { max-width: 800px; margin: 0 auto } + body.node-type-flexible-page .page-content p.max-width800 { margin: 0 auto 1.25rem } + body.node-type-flexible-page .page-content section { padding-top: 60px; padding-bottom: 60px } + body.node-type-flexible-page .page-content section h1, body.node-type-flexible-page .page-content section h2 { margin-bottom: 25px } + body.node-type-flexible-page .page-content section h2 { font-size: 44px } + body.node-type-flexible-page .page-content section p { font-size: 17px } + body.node-type-flexible-page .page-content section h2+img, body.node-type-flexible-page .page-content section h2.max-width800+img { margin-top: 25px; margin-bottom: 25px; display: block } + body.node-type-flexible-page .page-content .orange-border-btn { color: #ffffff; background-color: transparent; @@ -11462,57 +32704,72 @@ body.node-type-flexible-page .page-content .orange-border-btn { margin-right: 20px; line-height: inherit } + body.node-type-flexible-page .page-content section.hero.dark-blue { background-color: #134a6a } + body.node-type-flexible-page .page-content section.hero.dark-blue h2, body.node-type-flexible-page .page-content section.hero.dark-blue p { color: #dde7f7 } + body.node-type-flexible-page .page-content .hero-sub { background-color: #243137; margin-bottom: 0px } + body.node-type-flexible-page .page-content .hero-sub .landing-hero-des { margin-bottom: 0; padding: 0 } + body.node-type-flexible-page .page-content .hero-sub .button { margin-top: 40px } + @media only screen and (max-width: 40em) { body.node-type-flexible-page .page-content .hero-sub .button { width: 100%; margin-top: 20px } } + body.node-type-flexible-page .page-content .hero-sub .button+.button { margin-left: 30px } + @media only screen and (max-width: 40em) { body.node-type-flexible-page .page-content .hero-sub .button+.button { margin-left: 0 } } + body.node-type-flexible-page .page-content .hero-sub p { font-size: 20px; color: #dde7f7 } + body.node-type-flexible-page .page-content h1 { color: #22b8eb } + body.node-type-flexible-page .page-content section.docker-grey { background-color: #243137 } + body.node-type-flexible-page .page-content section.docker-grey h2 { color: #22b8eb } + body.node-type-flexible-page .page-content section.docker-grey p { color: #dde7f7 } + body.node-type-flexible-page .page-content section.light-blue { background-color: #eef2f7 } + header .nav-global a, .main-header div>.nav-main a, .nav-sub a, @@ -11521,6 +32778,7 @@ header .nav-global a, .products-items-card { transition: all .3s ease } + .hero::after, .callout::after { background: url("../images/hero-wave.svg") repeat-x; @@ -11531,49 +32789,58 @@ header .nav-global a, left: 0; content: "" } -.ie9 img[src*=".svg"] { -} + +.ie9 img[src*=".svg"] {} + @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { - img[src*=".svg"] { - - } + img[src*=".svg"] {} } + [ng-cloak] { display: none } + + /*==========================Main File Change ==============*/ + @media screen and (-ms-high-contrast: active), all and (-ms-high-contrast: none) { - img[src*='.svg'] { - } + img[src*='.svg'] {} } + section.section { padding: 50px 0; } + section.title_section { text-align: center; padding: 26px 0 22px 0; background-color: #27b8e8; min-height: 100px; } + section.title_section h1 { color: #fff; font-size: 44px; line-height: 1.2; } + section.title_section p { color: #fff; } + section.title_section .textalign-left p, section.title_section .textalign-left a.button { margin-left: 0; } + section.banner_section { width: 100%; display: table; position: relative; } + section.banner_section .left-banner, section.banner_section .right-banner { width: 50%; @@ -11581,23 +32848,28 @@ section.banner_section .right-banner { display: table-cell; text-align: center; } + section.banner_section .left-banner { border-right: 3px solid #fff; } + section.banner_section .right-banner { border-left: 3px solid #fff; } + section.banner_section .video_box { position: relative; max-height: 380px; overflow: hidden; } + section.banner_section .video_box img { height: auto; width: auto; display: block; margin: auto; } + .video_play { height: 89px; width: 89px; @@ -11610,14 +32882,17 @@ section.banner_section .video_box img { margin-left: -45px; margin-top: -45px; } + section.banner_section p { font-size: 19px; color: #3a3f43; margin: 25px; } + section.banner_section a.button { margin: 25px auto; } + a.btn-orange { font-weight: bold; color: #fff; @@ -11628,26 +32903,33 @@ a.btn-orange { border-radius: 10px; text-transform: uppercase; } + .btn-orange:hover, .btn-orange:focus, .btn-orange.focus { color: #fff; } + section.feature_customers_section h2 { color: #2cacd7; font-size: 44px; text-align: center; } -section.feature_customers_section .container {} section.feature_customers_section .container .row { + +section.feature_customers_section .container {} + +section.feature_customers_section .container .row { margin-left: -40px; margin-right: -40px; width: auto; max-width: none; } + section.feature_customers_section .container .row .col-sm-4 { padding-left: 40px; padding-right: 40px; } + section.feature_customers_section .feature_customers a.feature_customer { text-align: center; display: block; @@ -11657,6 +32939,7 @@ section.feature_customers_section .feature_customers a.feature_customer { height: 245px; border: 1px solid #E1E6E9; } + section.feature_customers_section a.feature_customer span.mask { position: absolute; opacity: 0; @@ -11675,6 +32958,7 @@ section.feature_customers_section a.feature_customer span.mask { bottom: 0; background-color: #29bbec; } + section.feature_customers_section a.feature_customer span.vcenter { position: absolute; display: table; @@ -11694,6 +32978,7 @@ section.feature_customers_section a.feature_customer span.vcenter { color: #fff; text-transform: uppercase; } + section.feature_customers_section a.feature_customer span.icon { position: absolute; height: 37px; @@ -11704,16 +32989,20 @@ section.feature_customers_section a.feature_customer span.icon { background-position: -37px 0; background-repeat: no-repeat; } + section.feature_customers_section a.feature_customer:hover span.mask { opacity: 1; } + section.feature_customers_section a.feature_customer:hover span.vcenter { opacity: 1; } + section.feature_customers_section a.feature_customer:hover span.icon { background-image: url(../images/view_icon.png); background-position: 0 0; } + section.feature_customers_section a.feature_customer img { width: auto; max-width: 100%; @@ -11727,9 +33016,11 @@ section.feature_customers_section a.feature_customer img { right: 0; bottom: 0; } + section.quotes_section { background-color: #5f6a6e; } + section.quotes_section .quotes_icon { background-image: url(../images/quotes_icon.png); width: 83px; @@ -11737,6 +33028,7 @@ section.quotes_section .quotes_icon { margin-bottom: 30px; background-size: 100%; } + section.quotes_section p { font-size: 30px; color: #ffffff; @@ -11744,6 +33036,7 @@ section.quotes_section p { margin: 0px 50px 30px; line-height: 1.3; } + section.quotes_section span { text-align: center; margin: 0 auto; @@ -11754,38 +33047,49 @@ section.quotes_section span { line-height: normal; margin-bottom: 30px; } + section.quotes_section span strong { letter-spacing: 3px; display: block; font-size: 20px; font-weight: 100; } + section.quotes_section .quotes_slider ul li { display: none; } + section.quotes_section .flex-control-nav { width: 97%; position: absolute; bottom: -25px; text-align: center; } + section.quotes_section .flex-control-paging li a { width: 8px; height: 8px; background: #929da1; } + section.quotes_section .flex-control-paging li a.flex-active { background: #20cb70; } + section.quotes_section .flex-control-paging li a:hover { background: rgba(32, 203, 112, 0.5); } -section.docker_story_section.blue {} section.docker_story_section.blue { + +section.docker_story_section.blue {} + +section.docker_story_section.blue { background-color: #0dabd8; } + section.docker_story_section.green { background-color: #88d835; } + section.docker_story_section h2 { text-align: center; color: #fff; @@ -11793,15 +33097,18 @@ section.docker_story_section h2 { padding: 0; margin: 0; } + section.docker_story_section h2 a { color: #fff; } + section.docker_story_section h2 a:hover, section.docker_story_section h2 a:focus, section.docker_story_section h2 a:active, section.docker_story_section h2 a:visited { text-decoration: none; } + section.docker_story_section h2 i { padding: 0px 28px; background-image: url(../images/white_arrow.png); @@ -11809,6 +33116,7 @@ section.docker_story_section h2 i { background-position: right 10px top 5px; background-size: 50%; } + section.banner_section.inside_page { min-height: 300px; width: 100%; @@ -11817,34 +33125,43 @@ section.banner_section.inside_page { background-size: cover; padding: 30px 0; } + section.banner_section.inside_page img { max-width: 30%; width: auto; max-height: 180px; margin: 0 0 1.25rem; } + section.banner_section.inside_page p { width: 50%; margin: 0 0 1.25rem; } + section.CTA_section { position: relative; } + section.CTA_section .container { padding: 0; } + section.CTA_section .CTA_item { z-index: 2; } + .darkblue { background-color: #144a68; } + .lightgreen { background-color: #88d835; } + .lightblue { background-color: #2cacd7; } + section.CTA_section .CTA_item a { font-size: 29px; color: #fff; @@ -11853,6 +33170,7 @@ section.CTA_section .CTA_item a { display: block; text-transform: capitalize; } + section.CTA_section>.background { position: absolute; display: block; @@ -11862,6 +33180,7 @@ section.CTA_section>.background { z-index: 1; display: table; } + section.CTA_section>.background>.darkblue, section.CTA_section>.background>.lightgreen, section.CTA_section>.background>.lightblue { @@ -11869,18 +33188,22 @@ section.CTA_section>.background>.lightblue { height: 100%; display: table-cell; } + .main-footer { z-index: 9; } + section.shopify_section h2 { font-size: 29px; font-weight: bold; color: #2cacd7; } + section.shopify_section p, section.shopify_section ul { color: #243137; } + @media (max-width: 1199px) { section.feature_customers_section .container .row { margin-left: -20px; @@ -11894,6 +33217,7 @@ section.shopify_section ul { margin: 20px 0; } } + @media (max-width: 480px) { .col-xxs-1, .col-xxs-10, @@ -12067,12 +33391,14 @@ section.shopify_section ul { margin-left: 0 } } + .mfp-iframe-scaler button:hover, .mfp-iframe-scaler button:focus, .mfp-iframe-scaler .button:hover, .mfp-iframe-scaler .button:focus { background-color: inherit; } + @media (max-width: 767px) { section.quotes_section p { margin: 0px 10px 35px; @@ -12091,6 +33417,7 @@ section.shopify_section ul { margin-top: -26px; } } + @media (max-width: 480px) { section.banner_section { display: block; @@ -12107,24 +33434,29 @@ section.shopify_section ul { border: 0; } } + section.content.section { padding: 50px 0 90px 0; } + section.nav_section { text-align: center; padding: 26px 0 0 0; background-color: #27b8e8; height: 70px; } + section.nav_section ul { padding: 0; list-style: none; margin: 0; } + section.nav_section ul li { display: inline-block; margin: 0 5px; } + section.nav_section ul li a { font-size: 0.9375rem; font-weight: 100; @@ -12134,47 +33466,58 @@ section.nav_section ul li a { border-radius: 5px 5px 0 0; transition: all 0.3s ease; } + section.nav_section ul li a:hover { background: #084053; text-decoration: none; } + section.feature_resources_section { padding: 30px 0 100px 0; } + section.feature_resources_section img.thumbnail_border { border: 1px solid #B8B8B8; } + section.feature_resources_section h2 { color: #2cacd7; font-size: 44px; } + .resources_left_sidebar ul { padding: 0; list-style: none; margin-top: 10px; } + .resources_left_sidebar ul li { margin: 6px 0; } + .resources_left_sidebar ul li a { padding: 6px 10px; font-size: 16px; color: #2cacd7; display: block; } + .resources_left_sidebar ul li a.active { text-decoration: none; background-color: #f1f1f1; color: #2687ae; } + .resources_left_sidebar ul li a:hover { text-decoration: none; color: #2687ae; } + .resources_left_sidebar ul li:hover { text-decoration: none; background-color: #f1f1f1; } + .resources_page_banner a { float: right; color: #fff; @@ -12186,25 +33529,31 @@ section.feature_resources_section h2 { background-size: 23px; background-position: right 10px top 12px; } + .resources_page_banner p span { display: block; max-width: 100%; font-size: 14px; } + .resources_page_banner p { color: #243137; } + .resources_page_banner { background-color: #f4f9fa; border: 1px solid #d7e9f0; padding: 20px 22px 0px 16px; } + .resources_page_banner h3 { margin-bottom: 15px; } + .resources_link { margin: 40px 0 0 0; } + .resources_link a { font-size: 18px; font-weight: normal; @@ -12213,12 +33562,14 @@ section.feature_resources_section h2 { margin-bottom: 10px; color: #243137; } + .resources_link span { color: #243137; font-size: 14px; margin-top: 10px; display: block; } + a.resources_play { height: 55px; width: 55px; @@ -12229,9 +33580,11 @@ a.resources_play { margin: -27px 0 0 -27px; z-index: 999; } + .resources_video { position: relative; } + .resources_right_sidebar { display: block; padding: 15px 20px 20px 5px; @@ -12239,16 +33592,19 @@ a.resources_play { border-radius: 5px; overflow: hidden; } + .resources_right_sidebar a { padding: 15px 10px; display: block; color: #fff; font-size: 16px; } + .resources_right_sidebar a img { float: right; margin: 10px -10px 0 0; } + @media (max-width: 767px) { .resources_link { text-align: center; @@ -12260,6 +33616,7 @@ a.resources_play { margin-top: 40px; } } + @media (max-width: 480px) { .resources_page_banner a { clear: both; @@ -12276,6 +33633,7 @@ a.resources_play { margin: 0 auto; } } + .page-taxonomy-term-4949 .region-content .item-list, .page-taxonomy-term-4950 .region-content .item-list, .page-taxonomy-term-4951 .region-content .item-list, @@ -12284,35 +33642,45 @@ a.resources_play { .page-taxonomy-term-4954 .region-content .item-list { display: none; } + .resources_left_sidebar ul { margin: 0; margin-top: 10px; } + .resources_left_sidebar ul li a { padding: 6px 0 6px 10px; } + @media (min-width: 991px) and (max-width: 1199px) { .resources_left_sidebar ul li a { font-size: 14px; } } + .career_section h2 { font-size: 30px; color: #555555; text-transform: capitalize; } + .career_section .career_video { margin: 0 50px; margin-bottom: 50px; } + .career_section .career_video .wistia_embed { max-width: 100%; } -.career_section .career_customers {} .career_section .career_customers ul { + +.career_section .career_customers {} + +.career_section .career_customers ul { padding: 0; list-style: none; margin: 0; } + .career_section .career_customers ul li { width: 23%; display: inline-table; @@ -12321,12 +33689,14 @@ a.resources_play { margin-left: 1%; margin-bottom: 10px; } + .career_section .career_customers p { color: #999999; font-style: italic; text-align: center; margin: 0; } + .career-image { background-image: url(../images/career_image.jpg); background-repeat: no-repeat; @@ -12336,10 +33706,14 @@ a.resources_play { height: 350px; text-align: center; } -.career_section ul {} .career_section ul li { + +.career_section ul {} + +.career_section ul li { margin: 20px 0; line-height: 1.4; } + .career-mask { background-image: url(../images/career_mask.png); background-size: contain; @@ -12349,9 +33723,11 @@ a.resources_play { margin: auto; height: 150px; } + section.job_openings_section { padding: 30px 0 100px 0; } + .job_openings_section h2 { font-size: 30px; color: #555555; @@ -12359,19 +33735,23 @@ section.job_openings_section { text-align: center; text-transform: capitalize; } + .job_openings_section .container { overflow: hidden; } + .job_openings_section .row { margin-left: -40px; margin-right: -40px; width: auto; } + .job_openings_section .row .col-md-6 { padding-left: 40px; padding-right: 40px; margin-bottom: 40px; } + .job_openings_section a { display: block; border: 1px solid #979797; @@ -12380,16 +33760,19 @@ section.job_openings_section { width: 100%; height: 100%; } + .job_openings_section a div { display: table-cell; vertical-align: middle; padding: 0; margin: 0; } + .job_openings_section a:hover { text-decoration: none; border: 1px solid #22b8eb; } + .job_openings_section a i { font-size: 40px; margin: 20px; @@ -12397,14 +33780,17 @@ section.job_openings_section { color: #999999; transform: translateY(12%); } + .job_openings_section a i.fa.fa-angle-double-right { float: right; display: none; margin-left: 0; } + .job_openings_section a:hover i.fa.fa-angle-double-right { display: block; } + .job_openings_section a h3 { display: block; font-size: 20px; @@ -12413,16 +33799,21 @@ section.job_openings_section { line-height: 28px; padding-right: 48px; } + .job_openings_section a:hover h3 { color: #22b8eb; } + .job_openings_section a span { color: #999999; font-size: 14px; margin: 0 0 20px 0; display: block; } -@media (max-width: 1199px) {} @media (max-width: 991px) { + +@media (max-width: 1199px) {} + +@media (max-width: 991px) { .career_section .career_video { margin: 0; margin-bottom: 50px; @@ -12431,149 +33822,182 @@ section.job_openings_section { background-image: url(../images/career_mask2.png); } } + .jobs_section .breadcrumb { background-color: transparent; margin: 0; padding-left: 0; } + .jobs_section .breadcrumb>li { font-size: 14px; } + .jobs_section .breadcrumb>li.active { color: #555555; background: transparent; } + .jobs_section .breadcrumb>li a { color: #555555; - font-weight: 400; + font-weight: 400; } + .jobs_section .breadcrumb>li+li:before { content: "\003e"; } + .jobs_section .jobs { margin: 0; list-style: none; padding: 30px 0 100px 0; } + .jobs_section .jobs li { margin-bottom: 30px; - line-height: 22px; + line-height: 22px; } + .jobs_section .jobs li a { - font-size: 18px; + font-size: 18px; color: #155A74; text-transform: uppercase; text-align: left; font-family: 'Geomanist Book', sans-serif; } + .jobs_section .jobs li span { display: block; font-size: 14px; color: #496B81; text-align: left; line-height: 16px; - font-weight: 400; + font-weight: 400; } + body { padding-bottom: 0 !important; } + .cta-illustration { background-position: bottom; } + .main-footer { position: relative; } + .hero::after, .callout::after { background-position: bottom; height: 17px; } + .main-footer::before { height: 17px; top: -17px; background-position: bottom; } + @media (min-width: 2550px) { body.front .cta-illustration { padding: 4.6875rem 0 32.125rem 0; } } + @media (min-width: 3300px) { body.front .cta-illustration { padding: 4.6875rem 0 38.125rem 0; } } + .row.collapse { display: block; } + section.plans_section { background-color: #F1F7FD; } + section.plans_section .plans_tabs { text-align: center; margin-bottom: 50px; } + section.plans_section .plans_tabs ul { list-style: none; display: inline-block; padding: 0; margin: 0; } + section.plans_section .plans_tabs ul li { float: left; color: #22B8EB; border: 1px solid #22B8EB; background-color: #FFF; } + section.plans_section .plans_tabs ul li:first-child { border-radius: 6px 0 0 6px; } + section.plans_section .plans_tabs ul li:last-child { border-radius: 0 6px 6px 0; } + section.plans_section .plans_tabs ul li +li { border-left: none; } + section.plans_section .plans_tabs ul li a { color: #22B8EB; padding: 10px 50px; display: block; text-decoration: none; } + section.plans_section .plans_tabs ul li.current { background-color: #1080A7; } + section.plans_section .plans_tabs ul li.current a { color: #fff; text-decoration: none; } + section.plans_section .row.plans { margin-left: -20px; margin-right: -20px; text-align: center; } + section.plans_section .row.plans .col-md-4 { padding-left: 20px; padding-right: 20px; } + section.plans_section .plans .server_plan_box { background-color: #fff; border: 1px solid #C4CDDA; border-radius: 6px; text-align: center; padding: 30px; - padding-bottom: 0px; + padding-bottom: 0px; height: 100%; } + section.plans_section .plans .server_plan_box .plan_name { min-height: 110px; padding: 0 10px; line-height: normal; } + section.plans_section .plans .server_plan_box h3 { font-size: 27px; color: #147698; } + section.plans_section .plans .server_plan_box p { font-size: 14px; color: #5A7E93; @@ -12581,17 +34005,21 @@ section.plans_section .plans .server_plan_box p { margin-bottom: 0; padding-bottom: 1.25rem; } + section.plans_section .plans .cloud_plan_box2 p#RepoPricing { min-height: 23px; display: block; } + section.plans_section .plans .server_plan_box p span { font-size: 38px; } + section.plans_section .cloudplan_boxs div.col-md-4 p span { font-size: 33px; font-weight: bold; } + section.plans_section .plans .server_plan_box p span.dollar, section.plans_section .plans .cloud_plan_box2 p span.dollar { font-size: 27px; @@ -12599,6 +34027,8 @@ section.plans_section .plans .cloud_plan_box2 p span.dollar { top: -12px; left: -2px; } + + /* section.plans_section .plans .server_plan_box .plan_buttons .orange-btn, section.plans_section .plans .cloud_plan_box2 .plan_buttons .orange-btn { @@ -12616,11 +34046,13 @@ section.plans_section .plans .plan_buttons .button { margin: 0 2%; padding: 15px 0; }*/ + section.plans_section .plans .server_plan_box .plan_buttons .button.full-width, section.plans_section .plans .cloud_plan_box2 .plan_buttons .button.full-width { width: 98%; margin: 0; } + section.plans_section .plans .server_plan_box ul, section.plans_section .plans .cloud_plan_box2 ul { list-style: none; @@ -12628,9 +34060,11 @@ section.plans_section .plans .cloud_plan_box2 ul { margin: 0; margin-top: 20px; } + section.plans_section .plans .server_plan_box ul { padding: 20px 10px; } + section.plans_section .plans .server_plan_box ul li, section.plans_section .plans .cloud_plan_box2 ul li { color: #546473; @@ -12638,40 +34072,50 @@ section.plans_section .plans .cloud_plan_box2 ul li { margin-bottom: 20px; font-size: 14px; } + section.plans_section .cloudplan_boxs .cloud_plan_box2>div { margin-top: 20px; } + section.plans_section .cloudplan_boxs .cloud_plan_box1 div.col-md-4 { margin-top: 30px; } + section.plans_section .cloudplan_boxs .cloud_plan_boxs .cloud_plan_box2 ul { padding: 0; padding-top: 20px; } + section.plans_section .cloudplan_boxs .cloud_plan_boxs .cloud_plan_box2 ul li { color: #3E4D54; margin-bottom: 14px; font-size: 16px; } + section.plans_section .cloudplan_boxs .plan_buttons { margin-top: 30px; } + section.plans_section .cloudplan_boxs div.col-md-4 p { font-size: 18px; color: #24B6E9; line-height: 16px; margin-bottom: 12px; } + section.plans_section .plan_tab_content { display: none; } + section.plans_section .plan_tab_content.current { display: block; } + section.our_customers_section { text-align: center; border-bottom: 2px solid #C4CDDA; } + section.our_customers_section ul { list-style: none; margin: 0; @@ -12680,29 +34124,35 @@ section.our_customers_section ul { width: 100%; margin-top: 50px; } + section.our_customers_section ul li { display: table-cell; width: 20%; } + section.our_customers_section ul li img { display: block; text-align: center; margin: 0 auto; height: 80px; } + section.faqs_section { text-align: center; padding-bottom: 10px; } + section.faqs_section:last-of-type { margin-bottom: 0px; } + section.faqs_section .faq { text-align: left; padding: 20px 0; margin: 0 20px; border-bottom: 1px solid #C4CDDA; } + section.faqs_section .faq .clickme { position: absolute; right: 8px; @@ -12715,15 +34165,19 @@ section.faqs_section .faq .clickme { font-size: 20px; color: #C4CDDA; } + section.faqs_section .faq .clickme:before { content: "\f067"; } + section.faqs_section .faq.active .clickme:before { content: "\f068"; } + section.faqs_section .faq.active .clickme { background-position: -16px 0px; } + section.faqs_section .faq h3 { color: #232C37; font-size: 14px; @@ -12731,10 +34185,12 @@ section.faqs_section .faq h3 { margin: 0; margin-right: 50px; } + section.faqs_section .faq .faq-title { cursor: pointer; - position: relative; + position: relative; } + section.faqs_section .faq .faq-title:hover, section.faqs_section .faq .faq-title:hover h3, section.faqs_section .faq .faq-title:hover .clickme, @@ -12742,13 +34198,16 @@ section.faqs_section .faq.active .faq-title h3, section.faqs_section .faq.active .faq-title .clickme { color: #137597; } + section.faqs_section .faq .faq-body { display: none; padding: 20px 40px 0px 0; } + section.faqs_section .faq .faq-body p { margin-bottom: 0px; } + section.plans_section .cloud_plan_boxs { background-color: #fff; border: 1px solid #C4CDDA; @@ -12759,6 +34218,7 @@ section.plans_section .cloud_plan_boxs { padding-left: 30px; padding-right: 30px; } + .cloud_plan_box1, .cloud_plan_box2 { width: 100%!important; @@ -12766,24 +34226,29 @@ section.plans_section .cloud_plan_boxs { margin: 0!important; padding: 40px 0 30px 0; } + section.plans_section .cloud_plan_boxs h4 { color: #3E4D54; font-size: 18px; font-weight: bold; margin-bottom: 20px; } + section.plans_section .cloud_plan_boxs .cloud_plan_box2 h4 { margin-bottom: 50px; } + section.plans_section .cloud_plan_boxs .cloud_plan_box1 { border-bottom: 1px solid #3E4D54; } + section.plans_section .cloud_plan_boxs .cloud_plan_box1 ul.info { list-style: none; padding: 0; margin: 0; margin-bottom: 35px; } + section.plans_section .cloud_plan_boxs .cloud_plan_box1 ul.info li { color: #3E4D54; font-size: 17px; @@ -12792,6 +34257,7 @@ section.plans_section .cloud_plan_boxs .cloud_plan_box1 ul.info li { position: relative; margin-left: 20px; } + section.plans_section .cloud_plan_boxs .cloud_plan_box1 ul.info li:before { content: "Õ "; color: #24B6E9; @@ -12799,13 +34265,18 @@ section.plans_section .cloud_plan_boxs .cloud_plan_box1 ul.info li:before { position: absolute; left: -20px; } -section.plans_section .cloud_plan_boxs .cloud_plan_box2 {} .ui-widget { + +section.plans_section .cloud_plan_boxs .cloud_plan_box2 {} + +.ui-widget { font-family: 'Geomanist Book', sans-serif; - font-weight:400px; + font-weight: 400px; } + #RepoSlider.ui-state-disabled { opacity: 1; } + .RepoSliderContainer { background-color: #C4CDDA; border-radius: 10px; @@ -12815,15 +34286,18 @@ section.plans_section .cloud_plan_boxs .cloud_plan_box2 {} .ui-widget { padding-right: 6px; margin-bottom: 85px; } + #RepoSlider { background: #fff; } + #RepoSlider.ui-slider-horizontal.ui-slider-pips { background-color: #C4CDDA; border-radius: 10px; border-color: #C4CDDA; max-width: 500px; } + #RepoSlider .ui-state-active, #RepoSlider.ui-widget-content .ui-state-active, #RepoSlider .ui-state-default, @@ -12840,6 +34314,7 @@ section.plans_section .cloud_plan_boxs .cloud_plan_box2 {} .ui-widget { top: -12px; margin-left: -16px; } + #RepoSlider .ui-state-default, #RepoSlider.ui-widget-content .ui-state-default { cursor: move; @@ -12847,6 +34322,7 @@ section.plans_section .cloud_plan_boxs .cloud_plan_box2 {} .ui-widget { cursor: -moz-grab; cursor: -webkit-grab; } + #RepoSlider.ui-slider-horizontal.ui-slider-pips:active, #RepoSlider .ui-state-active, #RepoSlider.ui-widget-content .ui-state-active { @@ -12854,12 +34330,14 @@ section.plans_section .cloud_plan_boxs .cloud_plan_box2 {} .ui-widget { cursor: -moz-grabbing; cursor: -webkit-grabbing; } + #RepoSlider.ui-slider-pips .ui-slider-pip { top: 24px; color: #7A8491; font-weight: normal; font-size: 10px; } + #RepoSlider.ui-slider-pips .ui-slider-pip-selected .ui-slider-line, #RepoSlider.ui-slider-pips .ui-slider-line { height: 7px; @@ -12867,36 +34345,44 @@ section.plans_section .cloud_plan_boxs .cloud_plan_box2 {} .ui-widget { margin-left: -1px; background: #7A8491; } + #RepoSlider.ui-slider-pips .ui-slider-label { top: 8px; color: inherit; } + #RepoSlider.ui-slider-pips [class*=ui-slider-pip-selected] { color: #232C37; font-weight: normal; font-size: 27px; } + #RepoSlider.ui-slider-pips .ui-slider-pip-selected .ui-slider-label { color: #232C37; } + #RepoSlider.ui-slider-pips:not(.ui-slider-disabled) .ui-slider-pip:hover .ui-slider-label { font-weight: normal; } + .support-checkboxs .checkbox { overflow: hidden; margin-bottom: 20px; } + .support-checkboxs .checkbox label { padding-left: 35px; font-size: 14px; color: #22B8EB; } + .support-checkboxs input[type="checkbox"] { width: 0px; height: 0px; margin: 0px; -webkit-appearance: none; } + .support-checkboxs input[type="checkbox"] + i { display: inline-block; width: 25px; @@ -12915,39 +34401,49 @@ section.plans_section .cloud_plan_boxs .cloud_plan_box2 {} .ui-widget { font-size: 16px; padding: 2px; } + .support-checkboxs input[type="checkbox"]:checked + i:before { content: "\f00c"; } + .support-checkboxs input[type="checkbox"]:checked + i { background-color: #22B8EB; } + .cloud_plan_box1 .info-text { color: #232C37; margin-top: 145px; font-size: 14px; } + .cloud_plan_box1 .info-text a { color: #22B8EB; } + .cloud_plan_box1 .has-tip { color: #C4CDDA; margin-left: 5px; border-bottom: none; } + .tooltip { opacity: 1; } + .path-pricing .title_section.hero_section { padding: 26px 0 22px 0; } + .path-pricing .region.region-hero-sub .nav-sub, .region.region-hero-sub .nav-sub .pricing-menu-item, .region.region-hero-sub .nav-sub .removetab-menu-item { display: none; } + .path-enterprise .region.region-hero-sub .nav-sub { display: none; } + @media (max-width: 940px) { section.plans_section .plans .server_plan_box .plan_buttons .button, section.plans_section .plans .plan_buttons .button { @@ -12958,6 +34454,7 @@ section.plans_section .cloud_plan_boxs .cloud_plan_box2 {} .ui-widget { padding: 30px 10px; } } + @media (max-width: 767px) { section.plans_section .plans .server_plan_box { margin-bottom: 20px; @@ -12971,6 +34468,7 @@ section.plans_section .cloud_plan_boxs .cloud_plan_box2 {} .ui-widget { margin-top: 25px; } } + @media (max-width: 600px) { section.our_customers_section ul { display: block; @@ -12982,11 +34480,13 @@ section.plans_section .cloud_plan_boxs .cloud_plan_box2 {} .ui-widget { margin-bottom: 21px; } } + @media (max-width: 320px) { section.our_customers_section ul li { width: 100%; } } + .backproduct_link { background-image: url(../images/backproduct_icon.png); background-repeat: no-repeat; @@ -12994,17 +34494,20 @@ section.plans_section .cloud_plan_boxs .cloud_plan_box2 {} .ui-widget { color: #05b7ed; padding-left: 20px; } + .backproduct_link:focus, .backproduct_link:hover, .backproduct_link:active { color: #05b7ed; } + .region.region-sidebar .heading_product { background-color: #fff; color: #000; cursor: context-menu; font-weight: bold; } + .region.region-sidebar .heading_product a { color: #000; transition: none; @@ -13013,6 +34516,7 @@ section.plans_section .cloud_plan_boxs .cloud_plan_box2 {} .ui-widget { text-decoration: none; cursor: context-menu; } + .region.region-sidebar .side-nav li.heading_product a:not(.button):hover, .region.region-sidebar .side-nav li.heading_product a:not(.button):active, .region.region-sidebar .side-nav li.heading_product a:not(.button):focus { @@ -13021,36 +34525,44 @@ section.plans_section .cloud_plan_boxs .cloud_plan_box2 {} .ui-widget { color: #000; cursor: context-menu; } + .node-type-product .page-content article img { margin-bottom: 20px; max-width: 100%; height: auto !important; } + .terminal .terminal-data { word-wrap: break-word; } + .node-type-product .page-content .row .columns .columns + hr { float: left; width: 100%; } + .node-type-product .page-content .row .columns hr.noborder { margin: 20px; background-color: rgba(221, 221, 221, 0); } + .node-type-product .row.cta_section { overflow: hidden; float: left; width: 100%; } + .cta_section .orange_bottom_link { text-align: center; } + @media (max-width: 1150px) { .node-type-product article iframe { width: 100%; height: 300px; } } + @media (min-width: 767px) and (max-width: 1150px) { .node-type-product ul.product-features li iframe { width: 100%; @@ -13059,134 +34571,171 @@ section.plans_section .cloud_plan_boxs .cloud_plan_box2 {} .ui-widget { width: 100% !important; } } + @media (max-width: 767px) { .node-type-product ul.product-features li { width: 100%; } } + @media (max-width: 480px) { .node-type-product ul.product-features li iframe { width: 100%; } } + .cta_section .medium-12 { padding: 0 15px; } + .cta_section .medium-6 { width: 50%; float: left; padding: 0 15px; } + @media only screen and (max-width: 40.0625em) { .cta_section .medium-6 { width: 100%; float: none; } } + .cta_section .medium-6 .button, .cta_section .medium-12 .button { width: 100%; border: 2px solid #22b8eb; } + .cta_section .medium-6 .button.white-btn, .cta_section .medium-12 .button.white-btn { width: 100%; background-color: #fff; color: #22b8eb; } + .cta_section .medium-6 .button.white-btn:hover, .cta_section .medium-6 .button.white-btn:focus { background-color: rgba(245, 252, 255, 0.59); } + section.ibm_description_section { padding-bottom: 0; } + section.ibm_description_section .row { margin-left: -15px; margin-right: -15px; width: auto; } + section.ibm_description_section .row + .row { margin-top: 25px; } + section.ibm_description_section img { margin-bottom: 20px; } + section.ibm_description_section h2 { font-size: 50px; color: #2cacd7; margin-bottom: 30px; } + section.ibm_description_section p { font-size: 16px; color: #7a8491; margin-bottom: 30px; } + section.ibm_description_section .button.full-width { width: 100%; margin-top: 10px; - margin-left: 20px!important; + margin-left: 20px!important; } + section.ibm_description_section p a { color: #27b7e8; } + section.ibm_description_section p a:hover, section.ibm_subscription_section p a:focus { color: #27b7e8; } + section.ibm_description_section ul li { padding-left: 20px; } + section.ibm_description_section ul li + li { margin-top: 20px; } + section.ibm_description_section ul li span { color: #27b7e8; } + section.ibm_subscription_section { padding-top: 0; } + section.ibm_subscription_section .row { margin-left: -15px; margin-right: -15px; width: auto; } + section.ibm_subscription_section .row + .row { margin-top: 50px; } + section.ibm_subscription_section h2 { font-size: 29px; color: #2cacd7; margin-bottom: 30px; } + section.ibm_subscription_section p { color: #3f5166; } + section.ibm_subscription_section ul { color: #3f5166; } + section.ibm_subscription_section ul li { padding-left: 20px; } + section.ibm_subscription_section .button.full-width { width: 100%; margin-top: 10px; } + section.ibm_subscription_section p a { color: #27b7e8; } + section.ibm_subscription_section p a:hover, section.ibm_subscription_section p a:focus { color: #27b7e8; } -.video_iframe {} .video_iframe iframe { + +.video_iframe {} + +.video_iframe iframe { max-width: 100%; } -section.ibm_customers_section {} section.ibm_customers_section h2 { + +section.ibm_customers_section {} + +section.ibm_customers_section h2 { font-size: 29px; color: #2cacd7; margin-bottom: 30px; } + section.ibm_customers_section ul { list-style: none; margin: 0; @@ -13195,42 +34744,51 @@ section.ibm_customers_section ul { width: 100%; margin-top: 50px; } + section.ibm_customers_section ul li { display: table-cell; width: 25%; } + section.ibm_customers_section ul li img { display: block; text-align: center; margin: 0 auto; height: 90px; } + section.ibm_solution_overview_section { padding-top: 10px; } + section.ibm_solution_overview_section h2 { font-size: 29px; color: #2cacd7; margin-bottom: 30px; } + section.ibm_solution_overview_section .ibm_solutions { margin-left: -15px; margin-right: -15px; width: auto; } + section.ibm_solution_overview_section .ibm_solution .title { text-align: center; background-color: #27b7e8; padding: 20px 38px; } + section.ibm_solution_overview_section .ibm_solution .title h3 { color: #fff; } + section.ibm_solution_overview_section .ibm_solution .body { background-color: #ebebeb; padding-bottom: 50px; margin-top: 4px; } + section.ibm_solution_overview_section .ibm_solution .body h4 { color: #2cacd7; text-align: center; @@ -13239,25 +34797,30 @@ section.ibm_solution_overview_section .ibm_solution .body h4 { margin: 0 32px; padding: 15px 0; } + section.ibm_solution_overview_section .ibm_solution .body ul { margin-left: 44px; margin-right: 25px; margin-top: 15px; display: block; } + section.ibm_solution_overview_section .ibm_solution .body ul li { color: #7a8491; font-size: 16px; padding-left: 12px; } + section.ibm_video_section { padding-top: 10px; } + section.ibm_video_section h2 { font-size: 29px; color: #2cacd7; margin-bottom: 30px; } + section.ibm_video_section .ibm_videos { list-style: none; clear: both; @@ -13267,68 +34830,83 @@ section.ibm_video_section .ibm_videos { margin-bottom: 25px; margin-right: -50px; } + section.ibm_video_section .ibm_videos li { float: left; margin-right: 50px; margin-bottom: 20px; width: 280px; } + section.ibm_video_section .ibm_videos li a:hover, section.ibm_video_section .ibm_videos li a:focus { color: inherit; text-decoration: none; } -section.ibm_video_section .ibm_videos li img {} section.ibm_video_section .ibm_videos li span { + +section.ibm_video_section .ibm_videos li img {} + +section.ibm_video_section .ibm_videos li span { font-size: 16px; color: #7a8491; line-height: 20px; padding: 8px 0; display: block; } + .ibm_additional_resources { margin-left: -15px; margin-right: -15px; width: auto; } + .ibm_additional_resources ul { list-style: none; padding: 0; margin: 0; } + .ibm_additional_resources ul li { font-size: 16px; color: #27b7e8; line-height: 18px; margin-bottom: 18px; } + .ibm_additional_resources ul li a { font-size: 16px; color: #27b7e8; } + .ibm_additional_resources ul li a:hover, .ibm_additional_resources ul li a:focus { color: inherit; text-decoration: none; } + section.ibm_faqs_section { padding-top: 10px; } + section.ibm_faqs_section .row { margin-left: -15px; margin-right: -15px; width: auto; } + section.ibm_faqs_section h2 { font-size: 29px; color: #2cacd7; margin-bottom: 30px; } + section.ibm_faqs_section .faq { text-align: left; margin: 0; border: 1px solid #e5e5e5; margin-bottom: 10px; } + section.ibm_faqs_section .faq .clickme { position: absolute; left: 22px; @@ -13342,18 +34920,22 @@ section.ibm_faqs_section .faq .clickme { color: #27b7e8; font-weight: lighter; } + section.ibm_faqs_section .faq .clickme:before { content: "\f067"; } + section.ibm_faqs_section .faq.active .clickme:before { content: "\f068"; } + section.ibm_faqs_section .faq h3 { color: #27b7e8; font-size: 14px; margin: 0; margin-left: 50px; } + section.ibm_faqs_section .faq .faq-title { cursor: pointer; background-color: #ebebeb; @@ -13361,38 +34943,46 @@ section.ibm_faqs_section .faq .faq-title { padding-right: 20px; position: relative; } + section.ibm_faqs_section .faq .faq-body { display: none; margin-left: 30px; padding: 20px; } + section.ibm_faqs_section .faq .faq-body p { margin-bottom: 10px; font-size: 15px; color: #7a8491; } + section.ibm_questions_section { background-color: #0dabd8; text-align: center; } + section.ibm_questions_section h2 { font-size: 29px; color: #fff; font-weight: bold; margin-bottom: 15px; } + section.ibm_questions_section .button { display: block; max-width: 276px; margin: 18px auto; } + section.ibm_questions_section .orange-btn { background-color: #fe9a3f; } + section.ibm_questions_section .orange-btn:focus, section.ibm_questions_section .orange-btn:hover { background-color: #F17B00; } + @media (max-width: 991px) { section.ibm_description_section h2 { font-size: 45px; @@ -13400,11 +34990,13 @@ section.ibm_questions_section .orange-btn:hover { line-height: 48px; } } + @media (max-width: 767px) { section.ibm_solution_overview_section .ibm_solution { margin-bottom: 30px; } } + @media (max-width: 600px) { section.ibm_customers_section ul { display: block; @@ -13416,23 +35008,28 @@ section.ibm_questions_section .orange-btn:hover { margin-bottom: 21px; } } + @media (max-width: 320px) { section.ibm_customers_section ul li { width: 100%; } } + section.title_section.hero_section { padding-bottom: 0; } + .featured_events_section { padding-bottom: 30px; border-bottom: 1px solid #d8dbdc; } + .featured_events_section a, .events_section a { color: #27b8e8; font-weight: normal; } + .featured_events_section h2, .events_region h2 { font-size: 17px; @@ -13440,21 +35037,25 @@ section.title_section.hero_section { text-transform: uppercase; font-weight: bold; } + .featured_events_item { margin: 28px 0; margin-right: 40px; } + .featured_events_item .featured_events_thumbnail, .events_item .events_thumbnail { padding-right: 20px; padding-top: 6px; } + .featured_events_item .featured_events_thumbnail a img, .events_item .events_thumbnail a img { max-width: 135px; height: auto; border: 1px solid #C1C1C1; } + .featured_events_item h3, .events_item h3 { font-size: 17px; @@ -13462,6 +35063,7 @@ section.title_section.hero_section { font-weight: bold; margin: 0; } + .featured_events_item p, .events_item p { font-size: 15px; @@ -13469,43 +35071,56 @@ section.title_section.hero_section { margin: 0; margin-top: 12px; } + .featured_events_item span, .events_item span { font-size: 15px; color: #39576a; font-weight: normal; } + .events_section .events_region, .events_region h2 { margin-bottom: 30px; } + .events_section .events_item { margin-bottom: 30px; } + .event-search { padding: 0; padding-top: 15px; } + .events_section .row .row { margin: 0; } + .events_section .events_region .events_region_name { display: block; } + .events_section .events_regions.margintop55 { margin-top: 42px; } + .events_section .events_regions.margintop55 .events_region { margin-top: -42px; } + body.front .cta-illustration { margin-top: 0; } + .main-header div>.nav-main a { padding-bottom: 12px; } -.main-header div>.nav-main>li {} .main-header div>.nav-main>li>ul { - background-color: #001e31; + +.main-header div>.nav-main>li {} + +.main-header div>.nav-main>li>ul { + background-color: #001e31; width: 175px; border: none; border-radius: 0; @@ -13514,19 +35129,24 @@ body.front .cta-illustration { left: 50%; margin-left: -85px; background-image: none; - overflow: visible; + overflow: visible; padding: 10px 0; } + .main-header div>.nav-main>li:hover>ul { /* background-image: url(../images/octopus_productpage_icon.gif); */ } + .main-header div>.nav-main>li>ul { background-image: none; width: initial; - /*left: 50%; + /*left: 50%; margin-left: -88px; */ } -.main-header div>.nav-main>li>ul>li {} .main-header div>.nav-main>li>ul:before { + +.main-header div>.nav-main>li>ul>li {} + +.main-header div>.nav-main>li>ul:before { content: ""; position: absolute; left: 50%; @@ -13537,31 +35157,39 @@ body.front .cta-illustration { border-bottom-color: #001E31; border-top: 0; } + .main-header div>.nav-main>li>ul>li { width: 215px; display: inline-block; } + .main-header div>.nav-main>li >ul>li { width: 175px; margin: 0!important; } + .main-header div>.nav-main>li ul li:first-child { display: inherit; } + .main-header div>.nav-main>li>ul>li:first-child { display: none; } + .main-header div>.nav-main>li.double-navstyle>ul>li:first-child { display: none; } + .left-submenu li.heading_product { display: none; } + .main-header div>.nav-main>li>ul li.navleft { float: left; clear: left; width: 235px; } + .main-header div>.nav-main>li>ul>li>a { background: transparent; color: #22caff; @@ -13569,24 +35197,29 @@ body.front .cta-illustration { border: none; line-height: 22px; } + .main-header div>.nav-main>li>ul>li>a:hover { color: #22caff; - background-color: #063d56; + background-color: #063d56; } + .main-header div>.nav-main>li>ul>li>a { font-size: 14px; - color: #fff; + color: #fff; } + .main-header div>.nav-main>li>ul>li>a:hover { color: #ffffff; - background-color: #063d56; + background-color: #063d56; } + .main-header div>.nav-main>li>ul ul { position: relative; display: block; float: none; border: none; } + .main-header div>.nav-main>li>ul ul a { border: none; background: transparent; @@ -13595,41 +35228,51 @@ body.front .cta-illustration { line-height: 18px; padding: 8px 15px; } + .main-header div>.nav-main>li ul ul>li>a:hover { color: #ffffff; - background-color: #063d56; + background-color: #063d56; } + .widthcol1>li { width: 100%; } + .widthcol2>li { width: 50%; } + .widthcol3>li { width: 33.33%; } + .widthcol4>li { width: 25%; } + .widthcol5>li { width: 20%; } + .node-type-use-cases section.section, .node-type-use-case section.section { padding: 60px 0 60px 0; } + .node-type-use-cases section a, .node-type-use-case section a { color: inherit; line-height: inherit; text-decoration: none; } + .node-type-use-cases section a:hover, .node-type-use-cases section a:focus, .node-type-use-case section a:hover, .node-type-use-case section a:focus { color: inherit; } + .node-type-use-cases a.button, .node-type-use-case a.button { font-size: 17px; @@ -13639,38 +35282,45 @@ body.front .cta-illustration { margin-right: 20px; padding: 14px 35px; } + .node-type-use-cases .button:hover, .node-type-use-cases .button:focus, .node-type-use-case .button:hover, .node-type-use-case .button:focus { color: #ffffff; } + .node-type-use-cases .orange-btn, .node-type-use-case .orange-btn { background-color: #FF992E; color: #fff; } + .node-type-use-cases .orange-btn:focus, .node-type-use-cases .orange-btn:hover, .node-type-use-case .orange-btn:focus, .node-type-use-case .orange-btn:hover { background-color: #f17b00; } + .node-type-use-cases .blue-btn, .node-type-use-case .blue-btn { background-color: #22B8EB; color: #dde7f7; } + .node-type-use-cases .blue-btn:focus, .node-type-use-cases .blue-btn:hover, .node-type-use-case .blue-btn:focus, .node-type-use-case .blue-btn:hover { background-color: #1497C3; } + .node-type-use-cases section h1, .node-type-use-case section h1 { font-size: 44px; } + .node-type-use-cases section h2, .node-type-use-case section h2 { color: #22B8EB; @@ -13678,10 +35328,12 @@ body.front .cta-illustration { line-height: 50px; margin-bottom: 20px; } + .node-type-use-cases section .container p, .node-type-use-case section .container p { color: #808284; } + .node-type-use-cases section .container>p, .node-type-use-case section .container>p { font-size: 20px; @@ -13689,18 +35341,22 @@ body.front .cta-illustration { margin-bottom: 50px; color: #808284; } + .node-type-partners section.section { padding: 50px 0 50px 0; } + .node-type-partners section a { color: inherit; line-height: inherit; text-decoration: none; } + .node-type-partners section a:hover, .node-type-partners section a:focus { color: inherit; } + .node-type-partners a.button { font-size: 17px; border-radius: 10px; @@ -13709,56 +35365,69 @@ body.front .cta-illustration { margin-right: 20px; padding: 14px 35px; } + .node-type-partners .button:hover, .node-type-partners .button:focus { color: #ffffff; } + .node-type-partners .orange-btn { background-color: #FF992E; color: #fff; } + .node-type-partners .orange-btn:focus, .node-type-partners .orange-btn:hover { background-color: #f17b00; } + .node-type-partners .blue-btn { background-color: #22B8EB; color: #dde7f7; } + .node-type-partners .blue-btn:focus, .node-type-partners .blue-btn:hover { background-color: #1497C3; } + .node-type-partners section h1 { font-size: 44px; } + .node-type-partners section h2 { color: #22B8EB; font-size: 44px; line-height: 50px; margin-bottom: 20px; } + .node-type-partners section .container p { color: #808284; } + .node-type-partners section .container>p { font-size: 20px; line-height: 29px; margin-bottom: 50px; color: #808284; } + .node-type-partner-programs section.section { padding: 60px 0 60px 0; } + .node-type-partner-programs section a { color: inherit; line-height: inherit; text-decoration: none; } + .node-type-partner-programs section a:hover, .node-type-partner-programs section a:focus { color: inherit; } + .node-type-partner-programs a.button { font-size: 17px; border-radius: 10px; @@ -13767,60 +35436,73 @@ body.front .cta-illustration { margin-right: 20px; padding: 14px 35px; } + .node-type-partner-programs .button:hover, .node-type-partner-programs .button:focus { color: #ffffff; } + .node-type-partner-programs .orange-btn { background-color: #FF992E; color: #fff; } + .node-type-partner-programs .orange-btn:focus, .node-type-partner-programs .orange-btn:hover { background-color: #f17b00; } + .node-type-partner-programs .blue-btn { background-color: #22B8EB; color: #dde7f7; } + .node-type-partner-programs .blue-btn:focus, .node-type-partner-programs .blue-btn:hover { background-color: #1497C3; } + .node-type-partner-programs section h1 { font-size: 44px; } + .node-type-partner-programs section h2 { color: #22B8EB; font-size: 44px; line-height: 50px; margin-bottom: 20px; } + .node-type-partner-programs section .container p { color: #808284; } + .node-type-partner-programs section .container>p { font-size: 20px; line-height: 29px; margin-bottom: 50px; color: #808284; } + .node-type-products section.section, .node-type-product section.section { padding: 60px 0 60px 0; } + .node-type-products section a, .node-type-product section a { color: inherit; line-height: inherit; text-decoration: none; } + .node-type-products section a:hover, .node-type-products section a:focus, .node-type-product section a:hover, .node-type-product section a:focus { color: inherit; } + .node-type-products a.button, .node-type-product a.button { font-size: 17px; @@ -13830,17 +35512,20 @@ body.front .cta-illustration { margin-right: 20px; padding: 14px 35px; } + .node-type-products .button:hover, .node-type-products .button:focus, .node-type-product .button:hover, .node-type-product .button:focus { color: #ffffff; } + .node-type-products .orange-btn, .node-type-product .orange-btn { background-color: #FF992E; color: #fff; } + .node-type-products .orange-btn:focus, .node-type-products .orange-btn:hover, .node-type-product .orange-btn:focus, @@ -13848,21 +35533,25 @@ body.front .cta-illustration { background-color: #f29c3a; background-color: #f17b00; } + .node-type-products .blue-btn, .node-type-product .blue-btn { background-color: #22B8EB; color: #dde7f7; } + .node-type-products .blue-btn:focus, .node-type-products .blue-btn:hover, .node-type-product .blue-btn:focus, .node-type-product .blue-btn:hover { background-color: #1497C3; } + .node-type-products section h1, .node-type-product section h1 { font-size: 44px; } + .node-type-products section h2, .node-type-product section h2 { color: #22B8EB; @@ -13870,6 +35559,7 @@ body.front .cta-illustration { line-height: 50px; margin-bottom: 20px; } + .node-type-products section .container>p, .node-type-product section .container>p { font-size: 20px; @@ -13877,18 +35567,22 @@ body.front .cta-illustration { margin-bottom: 50px; color: #808284; } + .node-type-support-services section.section { padding: 60px 0 60px 0; } + .node-type-support-services section a { color: inherit; line-height: inherit; text-decoration: none; } + .node-type-support-services section a:hover, .node-type-support-services section a:focus { color: inherit; } + .node-type-support-services a.button { font-size: 17px; border-radius: 10px; @@ -13897,81 +35591,101 @@ body.front .cta-illustration { margin-right: 20px; padding: 14px 35px; } + .node-type-support-services .button:hover, .node-type-support-services .button:focus { color: #ffffff; } + .node-type-support-services .orange-btn { background-color: #FF992E; color: #fff; } + .node-type-support-services .orange-btn:focus, .node-type-support-services .orange-btn:hover { background-color: #f17b00; } + .node-type-support-services .blue-btn { background-color: #22B8EB; color: #dde7f7; } + .node-type-support-services .blue-btn:focus, .node-type-support-services .blue-btn:hover { background-color: #1497C3; } + .node-type-support-services section h1 { font-size: 44px; } + .node-type-support-services section h2 { color: #22B8EB; font-size: 44px; line-height: 50px; margin-bottom: 20px; } + .node-type-support-services section .container p { color: #808284; } + .node-type-support-services section .container>p { font-size: 20px; line-height: 29px; margin-bottom: 50px; color: #808284; } + .max-width500 { max-width: 500px; margin: auto; } + .max-width600 { max-width: 600px; margin: auto; } + .max-width700 { max-width: 700px; margin: auto; } + .max-width800 { max-width: 800px; margin: auto; } + .max-width850 { max-width: 850px; margin: auto; } + .max-width900 { max-width: 900px; margin: auto; } + .max-width1000 { max-width: 900px; margin: auto; } + .textalign-left { text-align: left; } + .textalign-right { text-align: right; } + .terminal-window header .btn { margin: 2px 4px 0 0; } + i.icon-apple { background-image: url(../images/apple_button_icon.svg); background-repeat: no-repeat; @@ -13985,6 +35699,7 @@ i.icon-apple { margin-left: -10px; margin-top: -2px; } + i.icon-win { background-image: url(../images/win_button_icon.svg); background-repeat: no-repeat; @@ -13998,6 +35713,7 @@ i.icon-win { margin-left: -10px; margin-top: -2px; } + i.icon-file { background-image: url(../images/file_button_icon.svg); background-repeat: no-repeat; @@ -14011,6 +35727,7 @@ i.icon-file { margin-right: -10px; margin-top: -2px; } + div.heronav_section { height: 70px; background-color: #3e4d54; @@ -14018,14 +35735,19 @@ div.heronav_section { top: 0; width: 100%; } + div.heronav_section.affix { position: fixed; z-index: 9999; } + div.heronav_section.affix+section { margin-top: 52px; } -div.heronav_section .container {} div.heronav_section ul { + +div.heronav_section .container {} + +div.heronav_section ul { list-style: none; margin: 0; display: table; @@ -14036,6 +35758,7 @@ div.heronav_section .container {} div.heronav_section ul { display: -webkit-flex; display: flex; } + div.heronav_section ul li { display: inline-block; font-size: 17px; @@ -14045,6 +35768,7 @@ div.heronav_section ul li { flex-grow: 1; text-align: center; } + div.heronav_section ul li a { color: #fff; display: block; @@ -14053,44 +35777,59 @@ div.heronav_section ul li a { padding-right: 30px; text-decoration: none; } + div.heronav_section ul li.active { background-color: #30DAD9; } + div.heronav_section ul li:hover { background-color: #30DAD9; } + section.darkblue { background-color: #243137; margin-bottom: 0px; padding: 50px 0 60px 0; text-align: center; } + section.title_section.darkblue .padding-div { margin: 0 140px; } + section.title_section.darkblue h1 { margin-bottom: 25px; color: #22b8eb; margin-top: 20px; } + section.title_section.darkblue p { color: #fff; font-size: 20px; } + section.title_section.darkblue img { margin-top: 18px; } + section.title_section.darkblue span.after_button { display: block; margin-bottom: 20px; } + section.GenericDev { text-align: center; } -section.GenericDev h2 {} section.GenericDev .container>p {} section.GenericDev p a { + +section.GenericDev h2 {} + +section.GenericDev .container>p {} + +section.GenericDev p a { color: #24B6E9; cursor: pointer; } + section.GenericDev .items { list-style: none; display: block; @@ -14099,6 +35838,7 @@ section.GenericDev .items { overflow: hidden; margin-bottom: 20px; } + section.GenericDev .items>li { margin-bottom: 20px; text-align: center; @@ -14107,17 +35847,20 @@ section.GenericDev .items>li { display: block; float: left; } + section.GenericDev .items>li h3 { margin-top: 20px; color: #22B8EB; font-size: 24px; margin-bottom: 20px; } + section.GenericDev .items>li p { font-size: 18px; color: #808284; line-height: 24px; } + section.GenericDev .items>li a.button { line-height: 24px; font-size: 17px; @@ -14126,9 +35869,11 @@ section.GenericDev .items>li a.button { color: #fff; padding: 10px 30px; } + section.GenericDev .items>li ul { list-style: initial; } + section.GenericDev .items>li ul li { line-height: 22px; font-size: 18px; @@ -14137,12 +35882,15 @@ section.GenericDev .items>li ul li { text-align: left; margin-bottom: 20px; } + section.docker_solutions_section { text-align: center; } + .solution_box { margin-bottom: 30px; } + .solution_box .header_box { padding: 8px; border-top-right-radius: 15px; @@ -14152,11 +35900,13 @@ section.docker_solutions_section { height: 100px; margin-bottom: 10px; } + .solution_box .header_box img { display: inline-block; vertical-align: middle; padding-bottom: 25px; } + .solution_box .header_box h3 { color: #ffffff; display: inline-block; @@ -14164,32 +35914,40 @@ section.docker_solutions_section { padding: 0 20px; padding-top: 26px; } + .solution_box .body_box { background-color: #f1f2f2; border-bottom-right-radius: 15px; border-bottom-left-radius: 15px; } + .solution_box .body_box ul { list-style: none; padding: 30px 30px; margin: 0px } + .solution_box .body_box ul li { margin: 0 0 2px 0; display: block; } + .solution_box .body_box .media-left { padding-right: 20px; padding-top: 8px; width: 110px; float: left; } -.solution_box .body_box ul li img {} .solution_box .body_box ul li h3 { + +.solution_box .body_box ul li img {} + +.solution_box .body_box ul li h3 { text-align: left; font-size: 28px; color: #55b6e9; line-height: 30px; } + .solution_box .body_box ul li h3 small { font-size: 18px; color: #959798; @@ -14198,23 +35956,28 @@ section.docker_solutions_section { line-height: 26px; text-transform: uppercase; } + .solution_box .body_box ul li p { text-align: left; margin-top: 22px; color: #808284; font-size: 17px; } + section.docker_solutions_section .button { margin-bottom: 50px; } + section.docker_toolbox_section { text-align: center; background-color: #164c6a; background-color: #134a6a; } + section.docker_toolbox_section .container>p { color: #e6e7e8; } + section.docker_toolbox_section .products_items { list-style: none; display: block; @@ -14222,6 +35985,7 @@ section.docker_toolbox_section .products_items { margin: 0; overflow: hidden; } + section.docker_toolbox_section .products_items li { margin-bottom: 20px; text-align: center; @@ -14230,23 +35994,28 @@ section.docker_toolbox_section .products_items li { display: block; float: left; } + section.docker_toolbox_section .products_items li img { max-height: 42px; max-width: 80%; } + section.docker_toolbox_section .products_items li h3 { margin-top: 16px; color: #55b6e9; font-size: 24px; } + section.docker_toolbox_section .products_items li p { font-size: 20px; color: #e6e7e8; line-height: 24px; } + section.software_infrastructure_section { text-align: center; } + section.software_infrastructure_section .products_items { list-style: none; display: block; @@ -14255,6 +36024,7 @@ section.software_infrastructure_section .products_items { overflow: hidden; margin-bottom: 40px; } + section.software_infrastructure_section .products_items li { margin-bottom: 20px; text-align: center; @@ -14263,6 +36033,7 @@ section.software_infrastructure_section .products_items li { display: block; float: left; } + section.software_infrastructure_section .products_items li a { padding: 20px 40px 20px; display: block; @@ -14270,16 +36041,19 @@ section.software_infrastructure_section .products_items li a { background-color: #55b6e9; height: 100%; } + section.software_infrastructure_section .products_items li h3 { margin-top: 20px; color: #fff; font-size: 24px; } + section.software_infrastructure_section .products_items li p { font-size: 20px; color: #fff; line-height: 24px; } + section.open_standards_section { text-align: center; background-image: url(../images/open_standards_image.png); @@ -14287,9 +36061,11 @@ section.open_standards_section { background-size: cover; background-color: #444c51; } + section.open_standards_section .container>p { color: #ffffff; } + section.open_standards_section .products_items { list-style: none; display: block; @@ -14297,6 +36073,7 @@ section.open_standards_section .products_items { margin: 0; overflow: hidden; } + section.open_standards_section .products_items li { margin-bottom: 20px; text-align: center; @@ -14305,52 +36082,66 @@ section.open_standards_section .products_items li { display: block; float: left; } -section.open_standards_section .products_items li a.products_items-card {} section.open_standards_section .products_items li h3 { + +section.open_standards_section .products_items li a.products_items-card {} + +section.open_standards_section .products_items li h3 { margin-top: 20px; color: #55b6e9; font-size: 24px; } + section.open_standards_section .products_items li p { font-size: 20px; color: #e6e7e8; line-height: 24px; } + section.bottom_cta_section { text-align: center; padding: 100px 0; - margin-bottom:0px!important; + margin-bottom: 0px!important; } + section.bottom_cta_section.blue { background-color: #55b6e9; } + section.bottom_cta_section.gary { background-color: #3E4D54; } + section.bottom_cta_section.blue h3 { color: #fff; font-size: 44px; margin-bottom: 25px; } + section.bottom_cta_section.section h2 { color: #fff; font-size: 44px; margin-bottom: 50px; } + section.bottom_cta_section a.button+a.button { padding: 14px 20px 14px 20px; } + section.bottom_cta_section a.button.w450 { max-width: 450px; width: 100%; } + section.bottom_cta_section a.button.w300 { max-width: 300px; width: 100%; } + section.bottom_cta_section a.button.w200 { max-width: 300px; width: 100%; } + @media (max-width: 1199px) { div.heronav_section ul li { font-size: 17px; @@ -14374,6 +36165,7 @@ section.bottom_cta_section a.button.w200 { padding: 20px 20px 20px; } } + @media (max-width: 991px) { .widthcol3>li { width: 50%; @@ -14417,11 +36209,13 @@ section.bottom_cta_section a.button.w200 { text-align: center; } } + @media (max-width: 940px) { .main-header { padding-bottom: 12px; } } + @media (max-width: 767px) { .widthcol5>li { width: 50%; @@ -14429,7 +36223,6 @@ section.bottom_cta_section a.button.w200 { section.title_section.darkblue .padding-div { margin: 0 15px; } - section.title_section.darkblue img { float: left; } @@ -14446,12 +36239,12 @@ section.bottom_cta_section a.button.w200 { white-space: nowrap; padding: 0px; } - .solution_box .body_box ul li { height: auto!important; margin-bottom: 20px; } } + @media (max-width: 680px) { .node-type-use-cases .button, .node-type-use-case .button { @@ -14464,6 +36257,7 @@ section.bottom_cta_section a.button.w200 { margin-right: 15px; } } + @media (max-width: 600px) { .widthcol2>li { width: 100%; @@ -14478,24 +36272,30 @@ section.bottom_cta_section a.button.w200 { height: auto!important; } } + @media (max-width: 480px) { .widthcol5>li { width: 100%; } } + section.product_overview_product_section.section { background-color: #E3E4E6; padding-bottom: 0; } + section.product_overview_product_section .container>p { margin-bottom: 20px; } + section.product_overview_product_section .container>p:last-of-type { margin-bottom: 80px; } + section.product_overview_product_section .img_container { margin: 60px 0; } + section.product_overview_product_section .tab_container { background-repeat: no-repeat; background-size: contain; @@ -14507,16 +36307,20 @@ section.product_overview_product_section .tab_container { margin: auto; margin-top: 60px; } + section.product_overview_product_section .tab_container.tab1 { background-image: url(../images/resources_tab.png); } + section.product_overview_product_section .tab_container.tab2 { background-image: url(../images/resources_tab2.png); } + section.product_overview_product_section .tab_container.tab3 { background-image: url(../images/resources_tab3.png); max-width: 780px; } + section.product_overview_product_section .tab_container.tab4 { background-image: url(../images/resources_tab4.png); max-width: 920px; @@ -14524,33 +36328,39 @@ section.product_overview_product_section .tab_container.tab4 { padding-top: 93px; padding-bottom: 0; } + section.product_overview_product_section .tab_container.lcd2 { background-image: url(../images/resources_tab7.png); max-width: 790px; padding-bottom: 108px; } + section.product_overview_product_section .video_container { position: relative; background-repeat: no-repeat; background-size: contain; background-position: center; } + section.product_overview_product_section .video_container.lab1, section.product_overview_product_section .video_container.lab2 { margin: 30px 0 60px 0; background-image: url(../images/products_demo_laptop.png); } + section.product_overview_product_section .video_container.lab1 .terminal-window { margin: auto; height: 410px; width: 656px; padding: 23px 48px 58px 49px; } + section.product_overview_product_section .video_container.lab1 .terminal-window .terminal { height: 97%; width: 100%; min-height: Inherit; } + section.product_overview_product_section .video_container.lab2 .terminal-window { margin: auto; height: 310px; @@ -14558,15 +36368,18 @@ section.product_overview_product_section .video_container.lab2 .terminal-window padding: 20px 48px 18px 49px; max-width: 95%; } + section.product_overview_product_section .video_container.lab2 .terminal-window .terminal { height: 84%; width: 100%; min-height: Inherit; } + section.product_overview_product_section .video_container.lcd1 { margin: 0px 0 80px 0; background-image: url(../images/resources_lap6.png); } + section.product_overview_product_section .video_container.lcd1 img { overflow: hidden; margin: auto; @@ -14575,6 +36388,7 @@ section.product_overview_product_section .video_container.lcd1 img { width: auto; max-height: inherit; } + section.product_overview_product_section .video_container a.play_btn { position: absolute; content: 'play'; @@ -14591,65 +36405,84 @@ section.product_overview_product_section .video_container a.play_btn { margin-top: -70px; margin-left: -111px; } -section.toolbox_overview_section {} section.toolbox_overview_section .container>p { + +section.toolbox_overview_section {} + +section.toolbox_overview_section .container>p { margin-bottom: 10px; } + section.toolbox_overview_section .items>li ul { list-style: none; text-align: center; margin-bottom: 40px; } + section.toolbox_overview_section .items>li ul li { text-align: center; margin-bottom: 5px; } + section.toolbox_overview_section .items>li a.button { padding: 14px 35px; margin-left: 20px; margin-right: 20px; border-radius: 10px; } + section.use_product_section { background-color: #114A6A; } + section.use_product_section .container>p { color: #fff; margin-bottom: 30px; } + section.use_product_section .items>li { padding: 0px 30px; } + section.use_product_section .items>li h3 { margin-bottom: 10px; } + section.use_product_section .items>li p { color: #fff; } + section.use_product_section .items>li .terminal-window { margin: 42px; margin-bottom: 0; } + section.rest_apis_product_section.section { background-color: #243138; position: relative; } + section.rest_apis_product_section .container>p { color: #fff; margin-bottom: 0; } + section.rest_apis_product_section .items { margin-bottom: 0; } + section.rest_apis_product_section .items li { margin-bottom: 0; } + section.rest_apis_product_section .items li h3 { font-size: 28px; } + section.rest_apis_product_section .items li p { color: #fff; font-size: 20px; } + section.rest_apis_product_section .items li .video_container { position: relative; margin: 30px 0 0 0; @@ -14658,15 +36491,18 @@ section.rest_apis_product_section .items li .video_container { background-size: contain; background-position: center; } + section.rest_apis_product_section .items li .video_container .terminal-window { margin: auto; max-width: 812px; height: 486px; padding: 28px 78px 54px 78px; } + section.rest_apis_product_section .items li .video_container .terminal-window .terminal { height: 94%; } + section.rest_apis_product_section .items li .video_container img { overflow: hidden; margin: auto; @@ -14675,6 +36511,7 @@ section.rest_apis_product_section .items li .video_container img { width: auto; max-height: inherit; } + section.rest_apis_product_section .items li .video_container a.play_btn { position: absolute; content: 'play'; @@ -14691,46 +36528,60 @@ section.rest_apis_product_section .items li .video_container a.play_btn { margin-top: -70px; margin-left: -111px; } + section.rest_apis_product_section .flex-control-nav.flex-control-paging { bottom: -30px; height: 35px; display: block; position: relative; } + section.rest_apis_product_section .flex-control-nav.flex-control-paging li a { background: #D1D3D4; } + section.rest_apis_product_section .flex-control-nav.flex-control-paging li a:hover { background: #D1D3D4; } + section.rest_apis_product_section .flex-control-nav.flex-control-paging li a.flex-active { background: #24B6E9; } + section.create_hosts_product_section.section { background-color: #114A6A; } + section.create_hosts_product_section .container>p { color: #fff; } + section.create_hosts_product_section .items>li .terminal-window { margin: auto; } -section.product_features_product_section {} section.product_features_product_section .items hr { + +section.product_features_product_section {} + +section.product_features_product_section .items hr { float: left; width: 100%; margin: 18px 0; } + section.product_features_product_section .items li { margin-bottom: 20px; } + section.product_features_product_section .items li h3 { text-align: left; margin-bottom: 5px; margin-top: 0; } + section.product_features_product_section .items li p { text-align: left; } + section.product_features_product_section .items li a.button { margin: auto; margin-top: 18px; @@ -14739,21 +36590,25 @@ section.product_features_product_section .items li a.button { max-width: 100%; min-width: 300px; } + section.product_features_product_section .items li .mhe { margin: 10px 0 0 0; display: block; width: 100%; } + section.product_features_product_section .items li .video_container { position: relative; margin: 30px 0 0 0; } + section.product_features_product_section .items li .video_container img { overflow: hidden; max-height: 100%; margin: auto; display: block; } + section.product_features_product_section .items li .video_container a.play_btn { position: absolute; content: 'play'; @@ -14770,14 +36625,17 @@ section.product_features_product_section .items li .video_container a.play_btn { margin-top: -52px; margin-left: -82px; } + section.product_steps_product_section.section { background-color: #114A6A; } + section.product_steps_product_section .container p { color: #fff; } + section.product_steps_product_section .items li i { - font-size: 79px; + font-size: 79px; font-style: normal; color: #24B6E9; border: 5px solid #24B6E9; @@ -14789,9 +36647,11 @@ section.product_steps_product_section .items li i { margin: auto; line-height: 100px; } + section.product_steps_product_section .items li p { color: #fff; } + section.product_steps_product_section .items li .video_container { position: relative; margin: 50px 0 0 0; @@ -14800,6 +36660,7 @@ section.product_steps_product_section .items li .video_container { background-size: contain; background-position: center; } + section.product_steps_product_section .items li .video_container img { overflow: hidden; margin: auto; @@ -14808,6 +36669,7 @@ section.product_steps_product_section .items li .video_container img { width: auto; max-height: inherit; } + section.product_steps_product_section .items li .video_container a.play_btn { position: absolute; content: 'play'; @@ -14824,46 +36686,58 @@ section.product_steps_product_section .items li .video_container a.play_btn { margin-top: -70px; margin-left: -111px; } + section.product_steps_product_section .items.oneli li .video_container img { padding: 15px 75px 25px 75px; } + section.product_steps_product_section .items.oneli li .video_container img { padding: 15px 75px 25px 75px; } + section.product_steps_product_section .items li .terminal-window { margin: 42px; margin-bottom: 0; } + section.product_steps_product_section .items li .terminal-window .terminal-data { line-height: 24px; display: inherit; } + section.signup_product_section.section { background-color: #E3E4E6; } + section.resources_product_section.section { background-color: #24B6E9; } + section.resources_product_section h2 { color: #fff; } + section.resources_product_section .container>p { color: #fff; } + section.resources_product_section .resources_files, section.resources_product_section .resources_videos { color: #fff; } + section.resources_product_section .resources_files ul, section.resources_product_section .resources_videos ul { margin: auto; list-style: none; width: 80%; } + section.resources_product_section .resources_files ul li, section.resources_product_section .resources_videos ul li { height: 100% !important; } + section.resources_product_section .resources_files li a, section.resources_product_section .resources_videos li a { background-color: #fff; @@ -14872,10 +36746,12 @@ section.resources_product_section .resources_videos li a { display: block; position: relative; } + section.resources_product_section .resources_files li a img, section.resources_product_section .resources_videos li a img { margin: 30px 10px; } + section.resources_product_section .resources_files li a div.text-can, section.resources_product_section .resources_videos li a div.text-can { display: block; @@ -14884,6 +36760,7 @@ section.resources_product_section .resources_videos li a div.text-can { bottom: 0; width: 100%; } + section.resources_product_section .resources_files li a .category, section.resources_product_section .resources_videos li a .category { display: block; @@ -14891,6 +36768,7 @@ section.resources_product_section .resources_videos li a .category { font-size: 17px; line-height: 20px; } + section.resources_product_section .resources_files li a .name, section.resources_product_section .resources_videos li a .name { color: #22B8EB; @@ -14899,12 +36777,15 @@ section.resources_product_section .resources_videos li a .name { line-height: 20px; margin-top: 8px; } + section.pricing_product_section.section { background-color: #F1F7FD; } + section.pricing_product_section .plan_box { margin-bottom: 30px; } + section.pricing_product_section .plan_box .header h3 { color: #fff; padding: 25px 10px 60px 10px; @@ -14914,29 +36795,36 @@ section.pricing_product_section .plan_box .header h3 { background-position: bottom; margin-bottom: 20px; } + section.pricing_product_section .plan_box1, section.pricing_product_section .plan_box2, section.pricing_product_section .plan_box3 { background-color: #fff; height: 100%; } + section.pricing_product_section .plan_box1 .header h3 { background-color: #24B6E9; } + section.pricing_product_section .plan_box2 .header h3 { background-color: #114A6A; } + section.pricing_product_section .plan_box3 .header h3 { background-color: #3E4D54; } + section.pricing_product_section .plan_box .header p { font-size: 18px; color: #3E4D54; } + section.pricing_product_section .plan_box .header span { color: #24B6E9; font-size: 18px; } + section.pricing_product_section .plan_box .header span i { font-size: 33px; color: #24B6E9; @@ -14944,29 +36832,35 @@ section.pricing_product_section .plan_box .header span i { margin-right: 15px; display: inline-block; } + section.pricing_product_section .plan_box .body { padding-bottom: 30px; overflow: hidden; } + section.pricing_product_section .plan_box .body .plan_buttons { margin: 20px; } + section.pricing_product_section .plan_box .body .plan_buttons a.button { width: 45%; margin: 0 2%; padding: 12px 0; font-size: 17px; } + section.pricing_product_section .plan_box .body .plan_buttons a.button.full-width { width: 98%; margin: 0; } + section.pricing_product_section .plan_box .body ul { list-style: none; margin: 45px 20px; margin-bottom: 10px; text-align: left; } + section.pricing_product_section .plan_box .body ul li:before { content: ""; background-image: url(../images/pricing_product_li_bullet.svg); @@ -14978,6 +36872,7 @@ section.pricing_product_section .plan_box .body ul li:before { margin-top: -6px; margin-left: -30px; } + section.pricing_product_section .plan_box .body ul li { border-top: 1px solid #CFD0D4; padding: 12px 0px 12px 35px; @@ -14985,62 +36880,78 @@ section.pricing_product_section .plan_box .body ul li { line-height: 20px; color: #3E4D54; } + section.pricing_product_section .plan_box .body ul li strong { color: #24B6E9; font-weight: 100; } + section.cta_product_section.section h2 { margin-bottom: 50px; } + section.cta_product_section a.button { display: block; margin: 25px auto!important; padding: 14px 20px 14px 20px; max-width: 400px; } + section.cta_product_section a.button+a.button { padding: 14px 20px 14px 20px; } + section.cta_product_section a.button.w450 { max-width: 450px; width: 100%; } + section.cta_product_section a.button.w300 { max-width: 300px; width: 100%; } + section.cta_product_section a.button.w200 { max-width: 300px; width: 100%; } + section.demo_product_section.section { background-color: #114A6A; position: relative; } + section.demo_product_section.section.gray { background-color: #243138; } + section.demo_product_section h2 { color: #fff; } + section.demo_product_section .container>p { color: #fff; } + section.demo_product_section .items { margin-bottom: 0; } + section.demo_product_section .items li { margin-bottom: 0; } + section.demo_product_section .items li h3 { color: #fff; margin-top: 0; font-size: 24px; } + section.demo_product_section .items li p { color: #fff; font-size: 18px; } + section.demo_product_section .items li span { color: #fff; font-size: 18px; @@ -15049,9 +36960,11 @@ section.demo_product_section .items li span { position: relative; bottom: -16px; } + section.demo_product_section .items li span.blue { color: #24B6E9; } + section.demo_product_section .items li .video_container { position: relative; margin: 30px 0 0 0; @@ -15060,6 +36973,7 @@ section.demo_product_section .items li .video_container { background-size: contain; background-position: center; } + section.demo_product_section .items li .video_container img { overflow: hidden; margin: auto; @@ -15068,6 +36982,7 @@ section.demo_product_section .items li .video_container img { width: auto; max-height: inherit; } + section.demo_product_section .items li .video_container a.play_btn { position: absolute; content: 'play'; @@ -15084,21 +36999,26 @@ section.demo_product_section .items li .video_container a.play_btn { margin-top: -70px; margin-left: -111px; } + section.demo_product_section .flex-control-nav.flex-control-paging { bottom: -30px; height: 35px; display: block; position: relative; } + section.demo_product_section .flex-control-nav.flex-control-paging li a { background: #D1D3D4; } + section.demo_product_section .flex-control-nav.flex-control-paging li a:hover { background: #D1D3D4; } + section.demo_product_section .flex-control-nav.flex-control-paging li a.flex-active { background: #24B6E9; } + @media (max-width: 1199px) { section.use_product_section .items>li .terminal-window { margin: 0; @@ -15113,6 +37033,7 @@ section.demo_product_section .flex-control-nav.flex-control-paging li a.flex-act padding: 12px 40px 18px 40px; } } + @media (max-width: 991px) { section.product_overview_product_section .tab_container.lcd2 { padding: 3.5% 11% 11.5%; @@ -15173,6 +37094,7 @@ section.demo_product_section .flex-control-nav.flex-control-paging li a.flex-act padding: 20px 15px 20px; } } + @media (max-width: 767px) { section.product_overview_product_section .video_container.lcd1 img { padding: 38px 25px 142px 25px; @@ -15232,12 +37154,14 @@ section.demo_product_section .flex-control-nav.flex-control-paging li a.flex-act min-height: 200px; } } + @media (max-width: 680px) { section.resources_product_section .resources_files .items>li, section.resources_product_section .resources_videos .items>li { width: 100%; } } + @media (max-width: 600px) { section.product_overview_product_section .video_container.lcd1 img { padding: 23px 20px 98px 20px; @@ -15249,10 +37173,12 @@ section.demo_product_section .flex-control-nav.flex-control-paging li a.flex-act margin-left: -56px; } } + section.summary_use_cases_section.section { padding-top: 0; text-align: center; } + section.summary_use_cases_section .summary_icon { width: 104px; height: 86px; @@ -15264,6 +37190,7 @@ section.summary_use_cases_section .summary_icon { background-color: #22B8EB; margin-bottom: 50px; } + section.summary_use_cases_section .summary_icon:before { content: ""; position: absolute; @@ -15275,13 +37202,16 @@ section.summary_use_cases_section .summary_icon:before { border-top-color: #22B8EB; border-bottom: 0; } + section.summary_use_cases_section .summary_icon img { height: 60px; } + section.resources_use_cases_section.section { text-align: center; padding: 0 } + section.resources_use_cases_section .resources_video_slider { padding: 50px 0 100px 0; background-image: url(../images/resources_use_cases_image.png); @@ -15289,30 +37219,39 @@ section.resources_use_cases_section .resources_video_slider { background-size: cover; position: relative; } + section.resources_use_cases_section .resources_video_slider.white-text h2 { color: #fff; } + section.resources_use_cases_section .resources_video_slider.white-text h3 { color: #fff; } + section.resources_use_cases_section .resources_video_slider.gray-text p { color: #808284; } + section.resources_use_cases_section .resources_video_slider .slides .slide { display: none; } + section.resources_use_cases_section .resources_video_slider .flex-control-nav.flex-control-paging { bottom: 55px; } + section.resources_use_cases_section .resources_video_slider .flex-control-nav.flex-control-paging li a { background: #D1D3D4; } + section.resources_use_cases_section .resources_video_slider .flex-control-nav.flex-control-paging li a:hover { background: #D1D3D4; } + section.resources_use_cases_section .resources_video_slider .flex-control-nav.flex-control-paging li a.flex-active { background: #22B8EB; } + section.resources_use_cases_section .resources_video_slider .video_container { position: relative; margin: 50px 0; @@ -15321,15 +37260,18 @@ section.resources_use_cases_section .resources_video_slider .video_container { background-size: contain; background-position: center; } + section.resources_use_cases_section .resources_video_slider .laptop_image { max-width: 900px; width: 100%; } + section.resources_use_cases_section .resources_video_slider .inside_laptop_image { overflow: hidden; margin: auto; padding: 25px 82px 45px 82px; } + section.resources_use_cases_section .resources_video_slider .play_btn { position: absolute; content: 'play'; @@ -15346,6 +37288,7 @@ section.resources_use_cases_section .resources_video_slider .play_btn { margin-top: -70px; margin-left: -111px; } + section.resources_use_cases_section .resources_video_slider h3 { font-size: 28px; line-height: 29px; @@ -15353,21 +37296,25 @@ section.resources_use_cases_section .resources_video_slider h3 { margin-top: 30px; margin-bottom: 30px; } + section.resources_use_cases_section .resources_video_slider p { color: #fff; margin: auto; max-width: 560px; font-size: 20px; } + section.resources_use_cases_section .resources_files { background-color: #243137; padding: 80px 0; } + section.resources_use_cases_section .resources_files ul { margin: auto; list-style: none; width: 80%; } + section.resources_use_cases_section .resources_files ul li { margin-bottom: 20px; text-align: center; @@ -15376,9 +37323,11 @@ section.resources_use_cases_section .resources_files ul li { display: block; float: left; } + section.resources_use_cases_section .resources_files ul li { height: 100% !important; } + section.resources_use_cases_section .resources_files ul li a { background-color: #fff; width: 100%; @@ -15386,9 +37335,11 @@ section.resources_use_cases_section .resources_files ul li a { display: block; position: relative; } + section.resources_use_cases_section .resources_files ul li a img { margin: 30px 10px; } + section.resources_use_cases_section .resources_files ul li a div.text-can { display: block; background-color: #134A6A; @@ -15396,12 +37347,14 @@ section.resources_use_cases_section .resources_files ul li a div.text-can { bottom: 0; width: 100%; } + section.resources_use_cases_section .resources_files ul li a .category { display: block; color: #fff; font-size: 17px; line-height: 20px; } + section.resources_use_cases_section .resources_files ul li a .name { color: #22B8EB; display: block; @@ -15409,9 +37362,11 @@ section.resources_use_cases_section .resources_files ul li a .name { line-height: 20px; margin-top: 8px; } + section.quotes_use_cases_section { background-color: #22B8EB; } + section.quotes_use_cases_section .quotes_icon { background-image: url(../images/quotes_icon_use_cases.svg); width: 60px; @@ -15422,12 +37377,17 @@ section.quotes_use_cases_section .quotes_icon { background-repeat: no-repeat; display: block; } + section.quotes_use_cases_section .quotes_use_cases_slider { padding: 0 30px; } -section.quotes_use_cases_section .quotes_use_cases_slider ul.slides {} section.quotes_use_cases_section .quotes_use_cases_slider ul.slides li { + +section.quotes_use_cases_section .quotes_use_cases_slider ul.slides {} + +section.quotes_use_cases_section .quotes_use_cases_slider ul.slides li { display: none; } + section.quotes_use_cases_section .quotes_use_cases_slider ul.slides li p { font-size: 24px; color: #F1F2F2; @@ -15435,12 +37395,14 @@ section.quotes_use_cases_section .quotes_use_cases_slider ul.slides li p { margin: 0px 50px 30px; line-height: 1.3; } + section.quotes_use_cases_section .quotes_use_cases_slider ul.slides li span { font-size: 24px; color: #fff; text-align: center; display: block; } + section.quotes_use_cases_section .quotes_use_cases_slider ul.flex-direction-nav a { text-decoration: none; width: 28px; @@ -15457,6 +37419,7 @@ section.quotes_use_cases_section .quotes_use_cases_slider ul.flex-direction-nav -moz-transition: none; transition: none; } + section.quotes_use_cases_section .quotes_use_cases_slider ul.flex-direction-nav .flex-prev { left: 0px; text-align: left; @@ -15464,6 +37427,7 @@ section.quotes_use_cases_section .quotes_use_cases_slider ul.flex-direction-nav text-indent: -9999px; background-position: 0 0; } + section.quotes_use_cases_section .quotes_use_cases_slider ul.flex-direction-nav .flex-next { right: 0px; text-align: right; @@ -15471,18 +37435,22 @@ section.quotes_use_cases_section .quotes_use_cases_slider ul.flex-direction-nav text-indent: 9999px !important; background-position: -32px 0px; } + section.use_cases_section .items li a.item-link { display: block; margin-bottom: 10px; } + section.use_cases_section .items li p { font-size: 16px; line-height: 20px; } + section.use_cases_section .items li img { max-height: 85px; max-width: 100%; } + section.use_cases_item_section.section { text-align: center; padding: 50px 0 50px 0; @@ -15492,6 +37460,7 @@ section.use_cases_item_section.section { position: relative; padding-top: 0; } + section.use_cases_item_section.section .use_cases_item_icon { width: 91px; height: 77px; @@ -15503,6 +37472,7 @@ section.use_cases_item_section.section .use_cases_item_icon { background-color: #fff; margin-bottom: 50px; } + section.use_cases_item_section.section .use_cases_item_icon:before { content: ""; position: absolute; @@ -15514,16 +37484,20 @@ section.use_cases_item_section.section .use_cases_item_icon:before { border-top-color: #fff; border-bottom: 0; } + section.use_cases_item_section.section .use_cases_item_icon img { height: 50px; } + section.use_cases_item_section .container>p { color: #fff; } + section.use_cases_item_section .quote_container { max-width: 700px; margin: auto; } + section.use_cases_item_section .quote_container .quotes_icon { background-image: url(../images/quotes_blue_icon_use_cases.svg); width: 52px; @@ -15534,31 +37508,39 @@ section.use_cases_item_section .quote_container .quotes_icon { background-repeat: no-repeat; display: block; } + section.use_cases_item_section .quote_container p { font-size: 20px; color: #F1F2F2; } + section.use_cases_item_section .quote_container span.author { font-size: 21px; color: #22B8EB; margin-bottom: 30px; display: block; } + section.use_cases_item_section.section.white-text h2 { color: #fff; } + section.use_cases_item_section.white-text .quote_container .quotes_icon { background-image: url(../images/quotes_white_icon_use_cases.svg); } + section.use_cases_item_section.white-text .quote_container span.author { color: #fff; } + section.use_cases_item_section.gray-text .container>p { color: #808284; } + section.use_cases_item_section.gray-text .quote_container p { color: #808284; } + .node-type-front-page .use_cases_section { text-align: center; background-image: url(../images/open_standards_image.png); @@ -15566,70 +37548,86 @@ section.use_cases_item_section.gray-text .quote_container p { background-size: cover; background-color: #444c51; } + .node-type-front-page .use_cases_section h2 { color: #22B8EB; font-size: 44px; line-height: 50px; margin-bottom: 20px; } + .node-type-front-page .use_cases_section .container>p { font-size: 20px; line-height: 29px; margin-bottom: 50px; color: #fff; } + .node-type-front-page .use_cases_section .items li p { color: #e6e7e8; } + .node-type-front-page .use_cases_section .items li p { color: #e6e7e8; } + .node-type-front-page .use_cases_section a:hover, .node-type-front-page .use_cases_section a:focus { color: inherit; text-decoration: none; } + footer.main-footer>.row { padding-top: 50px; padding-bottom: 50px; padding-left: 80px; padding-right: 80px; } + .field-type-field-collection .form-wrapper>legend>span.fieldset-legend { font-size: 25px; } + .nav-global-footer div>ul>li { margin-bottom: 12px; line-height: 18px; } + .nav-global-footer div>ul>li>a { color: #7A8491; font-size: 0.857rem; text-decoration: none; } + .nav-global-footer div>ul>li>a:hover { text-decoration: none; color: #22b8eb; } + .nav-global-footer ul>li { margin-bottom: 12px; line-height: 18px; } + .nav-global-footer ul>li>a { color: #7A8491; font-size: 0.857rem; } + .nav-global-footer ul>li>a:hover { text-decoration: none; color: #22b8eb; } + .main-footer .nav-global-footer .columns+.columns:last-child { float: left; padding-right: 40px; } + .main-footer .columns+.columns:last-child img.wow { margin-left: 15px; } + .main-footer p { font-size: 0.857rem; line-height: 18px; @@ -15639,15 +37637,20 @@ footer.main-footer>.row { float: left; margin: 0px; } + .primary-footer-sub-nav ul { float: right; margin: 0px; } + .primary-footer-sub-nav ul li { float: left; margin-left: 45px; } -.primary-footer-sub-nav ul li a {} .primary-footer-sub-nav ul li a:hover { + +.primary-footer-sub-nav ul li a {} + +.primary-footer-sub-nav ul li a:hover { text-decoration: none; color: #22b8eb; } @@ -15655,13 +37658,14 @@ footer.main-footer>.row { .columns+.nav-global-footer.columns:last-child { float: left; } + @media (max-width: 991px) { footer.main-footer>.row { padding-left: 20px; padding-right: 20px; } - } + .node-type-enterprise a.orange-border-btn { color: #fff !important; background-color: transparent; @@ -15673,6 +37677,7 @@ footer.main-footer>.row { margin-right: 20px; line-height: inherit; } + .node-type-enterprise a.blue-border-btn { color: #fff !important; background-color: transparent; @@ -15684,32 +37689,39 @@ footer.main-footer>.row { margin-right: 20px; line-height: inherit; } + .node-type-enterprise a.orange-border-btn:hover, .node-type-enterprise a.orange-border-btn:focus { color: #fff; background-color: transparent; text-decoration: none; } + .node-type-enterprise a.blue-border-btn:hover, .node-type-enterprise a.blue-border-btn:focus { color: #fff; background-color: transparent; text-decoration: none; } + .node-type-enterprise section .title_section { padding: 0; } + .node-type-enterprise div.heronav_section ul li { font-size: 15px; } + .node-type-enterprise div.heronav_section ul li a { padding: 15px 10px; } + @media (max-width: 1199px) { .node-type-enterprise div.heronav_section ul li { font-size: 13px; } } + @media (max-width: 991px) { .node-type-enterprise div.heronav_section ul li { font-size: 11px; @@ -15718,6 +37730,7 @@ footer.main-footer>.row { padding: 13px 10px; } } + @media (max-width: 767px) { .node-type-enterprise div.heronav_section ul li { font-size: 13px; @@ -15727,69 +37740,86 @@ footer.main-footer>.row { padding: 12px; } } + .node-type-enterprise section.title_section p { font-size: 20px; color: #dde7f7; } + .node-type-enterprise .page-content .docker-solution .graphic img { max-height: 54px; max-width: 64px; } + .node-type-enterprise .page-content .transforming-business .businesses-logos img { max-height: 110px; height: auto; } + section.plans_section .plans .server_plan_box:hover { box-shadow: 0 0 20px #A0A0A0; } + section.plans_section .plans .server_plan_box:hover { background-color: #F9F9F9; } + section.plans_section .plans .serverplan_boxs>p { text-align: center; margin-bottom: 20px; font-size: 16px; line-height: 1.6; } + section.plans_section .plans .server_plan_box ul.feature { padding-bottom: 10px; } + section.plans_section .plans .server_plan_box ul.feature li { font-size: 14px; margin-bottom: 22px; color: #5A7E93; - font-weight:400; + font-weight: 400; } + section.plans_section .plans .server_plan_box ul.feature li span { display: block; font-size: 15px; color: #5A7E93; } + section.plans_section .plans .server_plan_box ul.feature li strong { color: #5A7E93; } + section.plans_section .plans .server_plan_box ul.feature li.note { - margin-top:50px; - margin-bottom:0px; + margin-top: 50px; + margin-bottom: 0px; } + section.plans_section .plans .server_plan_box ul.feature li.note span { display: block; font-size: 12px; line-height: 16px; color: #5A7E93; } + section.plans_section .plans_tabs { margin-bottom: 35px; } + .main-header div>.nav-main>li>ul ul ul { margin-left: 20px; } + section.product_overview_product_section.overview_button { padding-bottom: 60px; } + section.product_overview_product_section.overview_button .container>p:last-of-type { margin-bottom: 40px; } + section.product_overview_product_section .button { margin: auto; margin-top: 30px; @@ -15798,6 +37828,7 @@ section.product_overview_product_section .button { max-width: 100%; min-width: 300px; } + section.product_steps_product_section .items li a.button { margin: auto; margin-top: 30px; @@ -15806,18 +37837,22 @@ section.product_steps_product_section .items li a.button { max-width: 100%; min-width: 300px; } + section.included_product_section h2 { margin-bottom: 40px; } + section.included_product_section img { margin-bottom: 40px; } + section.included_product_section a.button { margin-left: 5%; margin-right: 5%; max-width: 35%; width: 100%; } + section.included_product_section .container .includedstyle p { font-size: 20px; text-align: center; @@ -15830,9 +37865,11 @@ section.included_product_section .container .includedstyle p { -o-transform: translateY(70%); -webkit-transform: translateY(70%); } + section.included_product_section span { position: relative; } + section.included_product_section span:after { content: ""; position: absolute; @@ -15844,6 +37881,7 @@ section.included_product_section span:after { border-left-color: #BFBFBF; z-index: 99; } + @media (max-width: 991px) { section.included_product_section span { display: block; @@ -15865,6 +37903,7 @@ section.included_product_section span:after { margin-bottom: 60px; } } + @media (max-width: 767px) { section.product_steps_product_section .items li a.button { max-width: inherit; @@ -15877,6 +37916,7 @@ section.included_product_section span:after { width: 100%; } } + .left-off-canvas-menu ul.off-canvas-list li.has-submenu>span.asd { height: 20px; margin-top: -7px; @@ -15886,6 +37926,7 @@ section.included_product_section span:after { cursor: pointer; z-index: 99; } + .left-off-canvas-menu ul.off-canvas-list li.has-submenu>span.asd:after { content: "\BB"; font-size: 30px; @@ -15894,9 +37935,11 @@ section.included_product_section span:after { display: block; text-align: center; } + .left-off-canvas-menu ul.off-canvas-list li.has-submenu>a:after { content: ""; } + .left-submenu .back>a:before { content: "\AB"; margin-right: .5rem; @@ -15905,46 +37948,65 @@ section.included_product_section span:after { line-height: 26px; float: left; } + section.title_section.darkblue .white-btn { border: 2px solid #fff; border-radius: 10px; } + section.title_section.darkblue .white-btn .fa-play { font-size: 10px; margin: 8px -10px 0px 20px; color: #F79733; float: right; } + .team_info_list, .team_info { display: none !important; } + .cbp .cbp-item { width: 260px; height: 260px; } + .find_a_partner_section#technology { padding-bottom: 0px; } + .find_a_partner_section#logging { padding-top: 0px; } + .find_a_partner_section h2+.cbp-l-grid-gallery { margin-top: 50px; } -.find_a_partner_section h2 {} .find_a_partner_section p {} .find_a_partner_section a.button.blue-btn { + +.find_a_partner_section h2 {} + +.find_a_partner_section p {} + +.find_a_partner_section a.button.blue-btn { background-color: transparent; padding: 12px 33px; border: 2px solid #22B8EB; color: #22B8EB; margin-top: 20px; } -.find_a_partner_section ul.partners_list {} .find_a_partner_section ul.partners_list li {} .find_a_partner_section ul.partners_list li a.cbp-singlePageInline { + +.find_a_partner_section ul.partners_list {} + +.find_a_partner_section ul.partners_list li {} + +.find_a_partner_section ul.partners_list li a.cbp-singlePageInline { display: table; } + .find_a_partner_section ul.partners_list li.cbp-singlePageInline-active { opacity: 1!important; } + .find_a_partner_section ul.partners_list li .helper { width: 100%; height: 100%; @@ -15954,14 +38016,17 @@ section.title_section.darkblue .white-btn .fa-play { display: table-cell; border: 1px solid #848484; } + .find_a_partner_section ul.partners_list li a.cbp-singlePageInline { background-color: #fff; } + .find_a_partner_section ul.partners_list li img { max-height: 140px; margin: auto; max-width: 160px; } + .find_a_partner_section ul.partners_list .cbp-popup-content { background-color: #114A6A; padding: 30px 50px; @@ -15974,6 +38039,7 @@ section.title_section.darkblue .white-btn .fa-play { margin: 0; margin-top: 0; } + .find_a_partner_section .nomore2 ul.partners_list .cbp-popup-content { height: initial; min-height: 200px; @@ -15981,6 +38047,7 @@ section.title_section.darkblue .white-btn .fa-play { padding: 30px 50px; margin-bottom: 30px; } + .find_a_partner_section ul.partners_list .cbp-popup-content span.name { font-size: 20px; font-weight: bold; @@ -15988,15 +38055,18 @@ section.title_section.darkblue .white-btn .fa-play { border-bottom: 1px solid #eee; padding-bottom: 10px; } + .find_a_partner_section ul.partners_list .cbp-popup-content p { color: #fff; margin: 20px 0; } + .find_a_partner_section ul.partners_list .cbp-popup-content a.view_website { color: #24B6E9; margin-bottom: 25px; display: inline-block; } + .cbp-popup-singlePageInline .cbp-popup-close { background: url(../images/cbp-popup-close.png) no-repeat scroll 0px 0px transparent; height: 24px; @@ -16004,15 +38074,19 @@ section.title_section.darkblue .white-btn .fa-play { right: 24px; top: 24px; } + .cbp-popup-singlePageInline .cbp-popup-close:focus { outline: none; } + .partners_list .cbp-singlePageInline-active .cbp-caption .overlay { opacity: 0.8; } + .partners_list .cbp-caption:hover .overlay { opacity: 0.8; } + .partners_list .cbp-caption .overlay { position: absolute; z-index: 2; @@ -16031,10 +38105,12 @@ section.title_section.darkblue .white-btn .fa-play { top: 0px; bottom: 0px; } + .cbp .partners_list .cbp-item, .cbp-wrapper { overflow: inherit; } + .partners_list .cbp-singlePageInline-active:after { content: ""; position: absolute; @@ -16045,17 +38121,21 @@ section.title_section.darkblue .white-btn .fa-play { border-bottom-width: 18px; border-bottom-color: #114A6A; } + .node-type-partners div.heronav_section ul li { font-size: 15px; } + .node-type-partners div.heronav_section ul li a { padding: 15px 10px; } + @media (max-width: 1199px) { .node-type-partners div.heronav_section ul li { font-size: 13px; } } + @media (max-width: 991px) { .node-type-partners div.heronav_section ul li { font-size: 11px; @@ -16064,6 +38144,7 @@ section.title_section.darkblue .white-btn .fa-play { padding: 13px 10px; } } + @media (max-width: 767px) { .node-type-partners div.heronav_section ul li { font-size: 13px; @@ -16073,12 +38154,15 @@ section.title_section.darkblue .white-btn .fa-play { padding: 12px; } } + .partners_list .cbp-singlePageInline-active.no_info:after { display: none; } + .partners_list .cbp-singlePageInline-active.no_info .cbp-caption .overlay { opacity: 0; } + section.partner_program_section { text-align: center; background-image: url(../images/partner_program_bg_image.png); @@ -16086,16 +38170,20 @@ section.partner_program_section { background-size: cover; background-color: #879297; } + section.partner_program_section h2 { color: #fff; } + section.partner_program_section .container p { color: #fff; margin-bottom: 30px; } + section.partner_program_section ul.items { margin-top: 50px; } + section.partner_program_section ul.items li { background-color: rgba(255, 255, 255, 0.7); border-radius: 800px; @@ -16105,19 +38193,24 @@ section.partner_program_section ul.items li { padding: 50px 56px 50px; height: initial!important; } + section.partner_program_section ul.items li:first-child { padding-right: 120px; } + section.partner_program_section ul.items li:first-child img { margin-left: 30px; } + section.partner_program_section ul.items li:last-child { margin-left: -100px; padding-left: 120px; } + section.partner_program_section ul.items li:last-child img { margin-left: -30px; } + section.partner_program_section ul.items li h3 { margin-top: 10px; color: #114A6A; @@ -16125,71 +38218,92 @@ section.partner_program_section ul.items li h3 { margin-bottom: 10px; padding: 0 35px; } + section.partner_program_section ul.items li p { color: #3E4D54; } + section.partner_program_section ul.items li .button { margin-bottom: 20px; border-radius: 10px; } + section.program_benefits_section.section { background-color: #114A6A; } + section.program_benefits_section h2 { color: #fff; } + section.program_benefits_section .container p { color: #fff; } + section.program_benefits_section p small { display: block; } + section.program_benefits_section ul.items li { padding: 20px 15px 20px; } + section.program_benefits_section ul.items li h3 { font-size: 22px; color: #fff; } + section.program_benefits_section ul.items li p { font-size: 16px; color: #fff; } + section.program_benefits_section .program_benefits_footer h4 { font-size: 22px; margin-bottom: 20px; } + section.program_benefits_section .program_benefits_footer p { font-size: 18px; margin-bottom: 30px; } + section.authorized_partners_section h2 { margin-bottom: 40px; } + section.authorized_partners_section h3 { font-size: 24px; margin-bottom: 10px; } + section.authorized_partners_section .container>p { margin-bottom: 30px; } + section.authorized_partners_section img { display: block; margin: auto; margin-bottom: 30px; } + section.authorized_partners_section span { font-size: 24px; display: block; color: #22b8eb; margin-bottom: 10px; } + section.technology_partners_section.section { background-color: #f4f4f4; } -section.technology_partners_section {} section.technology_partners_section .container>p { + +section.technology_partners_section {} + +section.technology_partners_section .container>p { margin-bottom: 20px; } + section.technology_partners_section .email_icon { background-image: url(../images/technology_partners_email_icon.png); width: 50px; @@ -16200,14 +38314,19 @@ section.technology_partners_section .email_icon { position: relative; top: 4px; } + section.technology_partners_section a:hover, section.technology_partners_section a:focus, section.technology_partners_section a:active { color: #24B6E9; } -section.technology_partners_section ul.items li {} section.technology_partners_section ul.items img { + +section.technology_partners_section ul.items li {} + +section.technology_partners_section ul.items img { margin-bottom: 50px; } + section.technology_partners_section ul.items>li a.button { font-size: 17px; border-radius: 10px; @@ -16216,11 +38335,17 @@ section.technology_partners_section ul.items>li a.button { margin-right: 20px; padding: 14px 35px; } -section.strategic_alliances_section.section {} section.strategic_alliances_section .strategic_alliances_tabs {} section.strategic_alliances_section .strategic_alliances_tabs ul { + +section.strategic_alliances_section.section {} + +section.strategic_alliances_section .strategic_alliances_tabs {} + +section.strategic_alliances_section .strategic_alliances_tabs ul { list-style: none; margin: 0; padding: 0; } + section.strategic_alliances_section .strategic_alliances_tabs ul li { display: inline-block; font-size: 62px; @@ -16230,12 +38355,14 @@ section.strategic_alliances_section .strategic_alliances_tabs ul li { max-width: 30%; margin: 10px; } + section.strategic_alliances_section .strategic_alliances_tabs ul li a { display: table; width: 100%; height: 100%; overflow: hidden; } + section.strategic_alliances_section .strategic_alliances_tabs ul li .helper { width: 100%; height: 100%; @@ -16245,9 +38372,11 @@ section.strategic_alliances_section .strategic_alliances_tabs ul li .helper { display: table-cell; background-color: #adb8bc; } + section.strategic_alliances_section .strategic_alliances_tabs ul li.current .helper { background-color: #24B6E9; } + section.strategic_alliances_section .strategic_alliances_tabs ul li.current:after { content: ""; position: absolute; @@ -16259,26 +38388,32 @@ section.strategic_alliances_section .strategic_alliances_tabs ul li.current:afte border-top-color: #24B6E9; z-index: 99; } + section.strategic_alliances_section .strategic_alliances_tabs ul li .helper img { max-height: 140px; margin: auto; max-width: 200px; } + section.strategic_alliances_section .strategic_alliances_content { margin-top: 50px; display: none; } + section.strategic_alliances_section .strategic_alliances_content h3 { font-size: 20px; font-weight: bold; margin-bottom: 20px; } + section.strategic_alliances_section .strategic_alliances_content p { color: #114A6A; } + span.learnmore { color: #24B6E9; } + span.learnmore:after { content: "\BB"; font-size: 30px; @@ -16288,6 +38423,7 @@ span.learnmore:after { top: 5px; margin-left: 8px; } + section.strategic_alliances_section .strategic_alliances_content .video_container { position: relative; margin: 50px 0 0 0; @@ -16298,6 +38434,7 @@ section.strategic_alliances_section .strategic_alliances_content .video_containe max-width: 500px; margin: auto; } + section.strategic_alliances_section .strategic_alliances_content .video_container img { overflow: hidden; margin: auto; @@ -16307,6 +38444,7 @@ section.strategic_alliances_section .strategic_alliances_content .video_containe width: auto; max-height: inherit; } + section.strategic_alliances_section .strategic_alliances_content .video_container .play_btn { position: absolute; content: 'play'; @@ -16323,28 +38461,35 @@ section.strategic_alliances_section .strategic_alliances_content .video_containe margin-top: -42px; margin-left: -66px; } + section.partner_announcements_section.section { background-color: #243137; } + section.partner_announcements_section h2 { color: #fff; margin-bottom: 30px; } + section.partner_announcements_section ul.items li { padding: 0 30px 0; margin: 20px 0; } + section.partner_announcements_section ul.items li+li { border-left: 1px solid #B7B7B7; } + section.partner_announcements_section ul.items li h3 { font-size: 20px; color: #fff; margin-top: 5px; } + section.partner_announcements_section ul.items li p { color: #fff; } + section.become_partner_section { text-align: center; background-image: url(../images/become_partner_bg_image.png); @@ -16353,23 +38498,29 @@ section.become_partner_section { background-color: #a3b9c6; padding: 80px 0 80px 0!important; } + section.become_partner_section h2 { color: #fff; } + section.become_partner_section .container>p { color: #fff; } + .node-type-partner-programs div.heronav_section ul li { font-size: 15px; } + .node-type-partner-programs div.heronav_section ul li a { padding: 15px 10px; } + @media (max-width: 1199px) { .node-type-partner-programs div.heronav_section ul li { font-size: 13px; } } + @media (max-width: 991px) { section.partner_program_section ul.items li:first-child { padding: 35px 35px 35px; @@ -16395,6 +38546,7 @@ section.become_partner_section .container>p { padding: 13px 10px; } } + @media (max-width: 767px) { .node-type-partner-programs a.button { white-space: normal; @@ -16427,6 +38579,7 @@ section.become_partner_section .container>p { padding: 12px; } } + @media (max-width: 510px) { section.partner_program_section ul.items li { width: 100% !important; @@ -16436,20 +38589,24 @@ section.become_partner_section .container>p { max-width: 100%; } } + .curated_snippet_section { padding-top: 60px; padding-bottom: 60px; text-align: center; -webkit-font-smoothing: antialiased; } + .curated_snippet_section h2 { margin-bottom: 25px; font-size: 44px; } + .curated_snippet_section .container>p { font-size: 20px; margin-bottom: 30px; } + .curated_snippet_section ul { list-style: none; display: block; @@ -16457,6 +38614,7 @@ section.become_partner_section .container>p { margin: 0; overflow: hidden; } + .curated_snippet_section ul li { text-align: center; clear: none !important; @@ -16464,11 +38622,13 @@ section.become_partner_section .container>p { display: block; float: left; } + .curated_snippet_section ul li h3 { margin-bottom: 15px; line-height: 24px; text-transform: capitalize; } + .curated_snippet_section ul li h3 small { font-size: 18px; color: #959798; @@ -16476,52 +38636,64 @@ section.become_partner_section .container>p { margin-top: 5px; line-height: 26px; } + .curated_snippet_section ul li p { font-size: 16px; } + #scoopit-theme_full.scoopit-embed-full-theme #scoopit-wrapper .scoopit-fulltheme-scoops .scoopit-fulltheme-col1 .scoopit-fulltheme-scoop { margin-right: 50px; } + #scoopit-theme_full.scoopit-embed-full-theme #scoopit-wrapper .scoopit-fulltheme-scoops .scoopit-fulltheme-col1, #scoopit-theme_full.scoopit-embed-full-theme #scoopit-wrapper .scoopit-fulltheme-scoops .scoopit-fulltheme-col2 { width: 100%; } + #scoopit-theme_full.scoopit-embed-full-theme #scoopit-wrapper .scoopit-fulltheme-scoops .scoopit-fulltheme-col1 .scoopit-fulltheme-scoop-wrapper, #scoopit-theme_full.scoopit-embed-full-theme #scoopit-wrapper .scoopit-fulltheme-scoops .scoopit-fulltheme-col2 .scoopit-fulltheme-scoop-wrapper { width: 50%; float: left; } + @media (max-width: 600px) { #scoopit-theme_full.scoopit-embed-full-theme #scoopit-wrapper .scoopit-fulltheme-scoops .scoopit-fulltheme-col1 .scoopit-fulltheme-scoop-wrapper, #scoopit-theme_full.scoopit-embed-full-theme #scoopit-wrapper .scoopit-fulltheme-scoops .scoopit-fulltheme-col2 .scoopit-fulltheme-scoop-wrapper { width: 100%; } } + .node-type-support-services section p a:hover, .node-type-support-services section p a:focus { color: #24B6E9; } + html.safari .node-type-support-services div.heronav_section ul { display: block; } + html.safari .node-type-support-services div.heronav_section ul li { width: 24%; } + section.supportpage_support_section .items>li, section.supportpage_services_section .items>li { height: auto !important; position: relative; } + section.supportpage_support_section .items>li h3, section.supportpage_services_section .items>li h3 { line-height: 28px; } + section.supportpage_support_section .items>li p, section.supportpage_services_section .items>li p { font-size: 16px; line-height: 22px; margin-bottom: 30px; } + section.supportpage_support_section .items>li a.button, section.supportpage_services_section .items>li a.button, section.supportpage_training_section .items>li a.button { @@ -16530,6 +38702,7 @@ section.supportpage_training_section .items>li a.button { margin: auto 10px; margin-bottom: 10px; } + section.supportpage_services_section .items>li+li:before { border-left: 1px solid rgba(255, 255, 255, 0.6); content: ""; @@ -16538,25 +38711,31 @@ section.supportpage_services_section .items>li+li:before { height: 75%; left: 0; } + section.supportpage_services_section.section { background-color: #27B7E7; } + section.supportpage_services_section h2, section.supportpage_services_section h3, section.supportpage_services_section p { color: #fff !important; } + .node-type-support-services section.bottom_cta_section h2 { color: #22B8EB; } + section.support_faq_section .faq { border: 1px solid #C4CDDA; border-radius: 7px; padding: 20px; } + section.support_faq_section .faq+.faq { border-top: none; } + section.support_faq_section .faq h3 { color: #808284; margin-left: 40px; @@ -16564,6 +38743,7 @@ section.support_faq_section .faq h3 { line-height: 22px; font-weight: bold; } + section.support_faq_section .faq .clickme { left: 0px; font-size: 10px; @@ -16575,50 +38755,62 @@ section.support_faq_section .faq .clickme { font-weight: 100; color: #fff; } + section.support_faq_section .faq .faq-title { position: relative; } + section.support_faq_section .faq .faq-title:hover, section.support_faq_section .faq .faq-title:hover h3 { color: #808284; } + section.support_faq_section .faq .faq-title:hover .clickme { color: #fff; } + section.support_faq_section .faq .faq-body { padding: 20px 0px 0px 0; } + section.support_faq_section .faq .faq-body p { font-size: 14px; padding: 0 4px; line-height: 18px; margin-bottom: 10px; } + section.support_faq_section .faq .faq-body ul li { font-size: 14px; color: #808284; line-height: 18px; padding-bottom: 8px; } + section.supportpage_training_section.section { background-color: #f2f2f2; } + section.supportpage_training_section .items>li { padding: 20px 60px 20px; } + section.supportpage_training_section .items>li .header { background-color: #3e4d54; padding: 30px 15px 15px 15px; position: relative; } + section.supportpage_training_section .items>li .header h3 { margin-bottom: 5px; } + section.supportpage_training_section .items>li .content-box { background-color: #ffffff; padding: 50px 30px 50px 30px; display: block; } + section.supportpage_training_section .items>li .header:before { content: ""; position: absolute; @@ -16630,6 +38822,7 @@ section.supportpage_training_section .items>li .header:before { border-top-color: #3e4d54; z-index: 99; } + @media (max-width: 991px) { section.support_faq_section .faq { margin: 0; @@ -16638,11 +38831,13 @@ section.supportpage_training_section .items>li .header:before { border-left: none; } } + @media (max-width: 767px) { section.support_faq_section .floatright .faq:first-child { border-top: none; } } + @media (max-width: 600px) { section.supportpage_services_section .items>li+li:before { border-left: none; @@ -16652,27 +38847,33 @@ section.supportpage_training_section .items>li .header:before { left: 12%; } } + .node-type-captains-directory section.title_section h2 { color: #fff; font-size: 20px; line-height: 1.6; text-rendering: optimizeLegibility; } + section.docker_captian_about_section { background-color: #f2f2f2; } + section.docker_captian_about_section p { color: #243137; font-size: 16px; line-height: 22px; } + section.docker_captian_section { padding: 50px 0; } + .docker_captian_section .cbp .captians_list .cbp-item { width: 220px; height: 340px; } + .docker_captian_section ul.captians_list .cbp-popup-content { padding: 30px 50px; margin: 0; @@ -16680,13 +38881,16 @@ section.docker_captian_section { background-color: #27B7E7; color: #fff; } + .cbp .captians_list .cbp-item, .cbp-wrapper { overflow: inherit; } + .captians_list .cbp-singlePageInline-active { opacity: 1!important; } + .captians_list .cbp-singlePageInline-active:after { content: ""; position: absolute; @@ -16697,19 +38901,22 @@ section.docker_captian_section { border-bottom-width: 16px; border-bottom-color: #27B7E7; } + section.docker_captian_section .captians_list img { margin-bottom: 10px; width: 100%; } + section.docker_captian_section .captians_list .name { color: #27B7E7; font-size: 20px; display: block; text-align: left; - line-height: 18px; + line-height: 18px; margin-bottom: 10px; margin-top: 10px; } + section.docker_captian_section .captians_list .job { color: #3E4D54; font-size: 14px; @@ -16720,6 +38927,7 @@ section.docker_captian_section .captians_list .job { min-height: 32px; padding-left: 1px; } + section.docker_captian_section .captians_list .view { float: left; font-size: 15px; @@ -16728,12 +38936,14 @@ section.docker_captian_section .captians_list .view { height: initial; line-height: 20px; } + section.docker_captian_section .captians_list ul { float: right; padding: 0; margin: 0; list-style: none; } + section.docker_captian_section .captians_list ul li { padding: 0; text-align: center; @@ -16741,37 +38951,48 @@ section.docker_captian_section .captians_list ul li { margin-right: 2px; float: left; } + section.docker_captian_section .captians_list ul li.twitter_link a { background-position: 0 0; } + section.docker_captian_section .captians_list ul li.linkedin_link a { background-position: -21px 0; } + section.docker_captian_section .captians_list ul li.facebook_link a { background-position: 0 0; background-image: url(../images/docker_captian_globe_icon.png); } + section.docker_captian_section .captians_list ul li.github_link a { background-position: -42px 0; } + section.docker_captian_section .captians_list ul li.share_link a { background-position: -63px 0; } + section.docker_captian_section .captians_list ul li.twitter_link a:hover { background-position: 0 -21px; } + section.docker_captian_section .captians_list ul li.linkedin_link a:hover { background-position: -21px -21px; } + section.docker_captian_section .captians_list ul li.facebook_link a:hover { background-position: 0 -21px; } + section.docker_captian_section .captians_list ul li.github_link a:hover { background-position: -42px -21px; } + section.docker_captian_section .captians_list ul li.share_link a:hover { background-position: -63px -21px; } + section.docker_captian_section .captians_list ul li a { height: 21px; width: 21px; @@ -16780,6 +39001,7 @@ section.docker_captian_section .captians_list ul li a { background-image: url(../images/docker_captian_social_icons.png); background-repeat: no-repeat; } + section.docker_captian_section .captians_list .cbp-popup-content .name { color: #fff; font-size: 33px; @@ -16787,36 +39009,45 @@ section.docker_captian_section .captians_list .cbp-popup-content .name { line-height: 50px; margin-bottom: 20px; } + section.docker_captian_section .captians_list .cbp-popup-content p { color: #fff; font-size: 16px; line-height: 22px; } + section.docker_captian_section .captians_list .cbp-popup-content p a { color: #fff; text-decoration: underline; } + section.docker_captian_section .captians_list .cbp-singlePageInline-active .cbp-caption .overlay { opacity: 0.6; } + section.docker_captian_section .captians_list .cbp-caption .img_div { position: relative; } + section.docker_captian_section .captians_list .cbp-caption .name_can { margin-bottom: 10px; } + section.docker_captian_section .captians_list .cbp-caption .img_div:hover .overlay { opacity: 0.6; } + .retina-display section.docker_captian_section .captians_list .cbp-caption .img_div:hover .overlay { opacity: 0; } + section.docker_captian_section .captians_list .cbp-caption .img_div .view2 { left: 0px; right: 0px; top: 0px; bottom: 0px; } + section.docker_captian_section .captians_list .cbp-caption .overlay { position: absolute; z-index: 2; @@ -16835,185 +39066,232 @@ section.docker_captian_section .captians_list .cbp-caption .overlay { top: 0px; bottom: 0px; } + section.docker_captian_section a.displayblock { display: block; margin: auto; max-width: 200px; margin-top: 30px; } + @media (max-width: 767px) { .docker_captian_section .cbp .captians_list .cbp-item { width: 250px; height: 380px; } } + @media (max-width: 500px) { .docker_captian_section .cbp .captians_list .cbp-item { width: 270px; height: 400px; } } + @media (max-width: 400px) { .docker_captian_section .cbp .captians_list .cbp-item { width: 270px; height: 400px; } } + .main-header div>.nav-main>li.octopus-navstyle>ul>li>a { font-size: 14px; } -.path-docker-datacenter section.product_features_product_section.section{ -background-color: #EEF0F3; + +.path-docker-datacenter section.product_features_product_section.section { + background-color: #EEF0F3; } + section.plans_section .cloud_plan_boxs .cloud_plan_box1 { border-bottom: 1px solid #C4CDDA; } + section.plans_section .cloudplan_boxs .cloud_plan_boxs .cloud_plan_box2 ul li { font-size: 14px; } + section.toolbox_overview_section .items>li ul { -margin-bottom: 0; + margin-bottom: 0; } + section.toolbox_overview_section .items>li a.button { margin: 30px 20px; } + .main-header div>.nav-main>li.octopus-navstyle>ul ul a { font-size: 14px; } + .main-header div>.nav-main>li.octopus-navstyle >ul>li { margin: 0px 10px; } -section.plans_section .plans .server_plan_box .box{ - margin-top: 20px; - margin-bottom: 20px; + +section.plans_section .plans .server_plan_box .box { + margin-top: 20px; + margin-bottom: 20px; } -section.plans_section .plans .server_plan_box .box ul{ - padding: 0px 10px + +section.plans_section .plans .server_plan_box .box ul { + padding: 0px 10px } + section.plans_section .plans .server_plan_box .box ul li { margin-bottom: 10px; } + section.plans_section .plans .server_plan_box .box ul li strong { - font-size: 16px; + font-size: 16px; } -section.plans_section .plans .server_plan_box .box+.box{ - margin-top: 30px; + +section.plans_section .plans .server_plan_box .box+.box { + margin-top: 30px; } -section.plans_section .plans .server_plan_box .box h4{ + +section.plans_section .plans .server_plan_box .box h4 { padding: 0 11%; - font-size: 20px; + font-size: 20px; line-height: 20px; color: #070B10; } -section.plans_section .plans .server_plan_box .box p{ - padding: 0 11%; - padding-bottom: 10px; + +section.plans_section .plans .server_plan_box .box p { + padding: 0 11%; + padding-bottom: 10px; } + .page-node-75 ul.small-block-grid-1.medium-block-grid-3 { text-align: center; } + .main-header .menu-mlid-954 >ul { -/* display:none !important; */ + /* display:none !important; */ } -.featured_events_item span{ + +.featured_events_item span { margin-bottom: 12px; display: block; } + .events_item span { margin-bottom: 12px; - display: inline-block; + display: inline-block; } + .resources_page_banner a { min-height: 46px; } -.media-left, .media-right, .media-body { + +.media-left, +.media-right, +.media-body { font-size: 15px; color: #39576a; } + .path-section-products .region.region-hero-sub .nav-sub a.active-trail { background: #1088b1; color: #fff; } + .path-section-products .region.region-hero-sub .nav-sub a.active-trail:hover { background: #084053; } -@media screen and (-ms-high-contrast:active), all and (-ms-high-contrast:none){ -hr.moby::after { - background: url("../images/moby-tiny.png") no-repeat; - background-size: 52px; -} + +@media screen and (-ms-high-contrast:active), +all and (-ms-high-contrast:none) { + hr.moby::after { + background: url("../images/moby-tiny.png") no-repeat; + background-size: 52px; + } } + .page-node-88 .cta_section .orange_bottom_link { -text-indent: -18px; + text-indent: -18px; } + .page-node-12 .cta_section .orange_bottom_link { -text-indent: 60px; + text-indent: 60px; } + .page-node-92 .cta_section .orange_bottom_link { text-indent: 55px; } + .page-node-16 .cta_section .orange_bottom_link { text-indent: -50px; } - .page-node-75 .small-block-grid-1.medium-block-grid-3 > li { width: 50%; } -.page-node-75 .medium-block-grid-2 > li:first-of-type { - width: 70%; - margin-right: 40px; + +.page-node-75 .medium-block-grid-2 > li:first-of-type { + width: 70%; + margin-right: 40px; } -.page-node-75 .medium-block-grid-2 > li:last-of-type { - width:26%; + +.page-node-75 .medium-block-grid-2 > li:last-of-type { + width: 26%; } + @media screen and (max-width:640px) { -.page-node-75 .small-block-grid-1.medium-block-grid-3 > li { - width: 100%; - margin-bottom: 20px; -} + .page-node-75 .small-block-grid-1.medium-block-grid-3 > li { + width: 100%; + margin-bottom: 20px; + } } + @media screen and (max-width:767px) { -section.resources_use_cases_section .resources_video_slider .inside_laptop_image { - padding: 11% 12% 14% 12%; -} + section.resources_use_cases_section .resources_video_slider .inside_laptop_image { + padding: 11% 12% 14% 12%; + } } @media screen and (max-width:480px) { -section.plans_section .plans_tabs ul li{ - float: none; - width: 1%; - margin: auto; - display: table-cell; -} -section.plans_section .plans_tabs ul li a { - padding: 10px 10px; -} + section.plans_section .plans_tabs ul li { + float: none; + width: 1%; + margin: auto; + display: table-cell; + } + section.plans_section .plans_tabs ul li a { + padding: 10px 10px; + } } + .node-type-enterprise .columns.services.medium-centered.medium-12 { overflow: hidden; } + a.resources_play { z-index: 10; } + .page-node-5926.node-type-enterprise a.orange-border-btn { margin-top: 20px; margin-bottom: 0px; } -@media only screen and (max-width: 40em){ -.node-type-enterprise .page-content .hero-sub .button { - width: initial; + +@media only screen and (max-width: 40em) { + .node-type-enterprise .page-content .hero-sub .button { + width: initial; + } } -} -.inner-wrap .find_a_partner_section:last-of-type{ + +.inner-wrap .find_a_partner_section:last-of-type { padding-bottom: 100px; } + + /*========== Career ==========*/ -.job-application{ - position: relative; + +.job-application { + position: relative; } -.job-application a.blue-btn{ - position: absolute; + +.job-application a.blue-btn { + position: absolute; top: 50px; left: 50%; margin-left: 223px; @@ -17024,74 +39302,87 @@ a.resources_play { font-size: 24px; color: #ffffff; } -@media (max-width:991px){ -.job-application a.blue-btn{ - position: relative; - top: 0; - margin: 0; - left: 0; - margin-top: 20px; + +@media (max-width:991px) { + .job-application a.blue-btn { + position: relative; + top: 0; + margin: 0; + left: 0; + margin-top: 20px; + } } -} -#job-content{ + +#job-content { position: relative; } -#job-content #header{ - margin-bottom: 22px; - max-width: 600px; + +#job-content #header { + margin-bottom: 22px; + max-width: 600px; position: relative; } -#job-content #header .app-title{ - font-size: 26px; + +#job-content #header .app-title { + font-size: 26px; color: #555555; - display: block; - margin-bottom: 0; - font-weight: bold; + display: block; + margin-bottom: 0; + font-weight: bold; -webkit-margin-before: 0.67em; -webkit-margin-start: 0px; -webkit-margin-end: 0px; - letter-spacing: initial; + letter-spacing: initial; +} +#job-content #header .location { + font-size: 16px; } -#job-content #header .location{ - font-size: 16px; -} -#job-content #content{ - max-width: 600px; + +#job-content #content { + max-width: 600px; position: relative; } -#job-content #content p , #content ul{ - font-size: 16px; + +#job-content #content p, +#content ul { + font-size: 16px; color: #555555; - line-height: 1.6; - letter-spacing: initial; + line-height: 1.6; + letter-spacing: initial; } + #job-content #content p { -webkit-margin-before: 1em; -webkit-margin-after: 1em; -webkit-margin-start: 0px; -webkit-margin-end: 0px; } -#job-content #content ul{ - padding-left: 22px; - margin: 0; + +#job-content #content ul { + padding-left: 22px; + margin: 0; } -#job-content #content ul li{ - line-height: 25px; + +#job-content #content ul li { + line-height: 25px; } -#job-content #content p strong{ - font-size: 20px; + +#job-content #content p strong { + font-size: 20px; color: #555555; line-height: 30px; margin-top: 10px; display: inline-block; } + #job-content #content a { text-decoration: none; color: #118bd9; } -#job-content a.blue-btn{ - position: absolute; + +#job-content a.blue-btn { + position: absolute; top: 10px; left: 50%; margin-left: 223px; @@ -17102,19 +39393,23 @@ a.resources_play { font-size: 24px; color: #ffffff; } -@media (max-width:991px){ -#job-content a.blue-btn{ - position: relative; - top: 0; - margin: 0; - left: 0; - margin-bottom: 5px; -} -} -@media (max-width:767px){ -.career-image { - background-size: cover; - height: 200px; + +@media (max-width:991px) { + #job-content a.blue-btn { + position: relative; + top: 0; + margin: 0; + left: 0; + margin-bottom: 5px; + } } + +@media (max-width:767px) { + .career-image { + background-size: cover; + height: 200px; + } } + + /*========== END Career ==========*/ From 2d730c035461ed77b5d05aab21bcf5fb5c34ed5f Mon Sep 17 00:00:00 2001 From: John Mulhausen Date: Wed, 16 Nov 2016 15:16:57 -0800 Subject: [PATCH 07/32] Fix for flickering blue mobile menu --- css/allcss.css | 1 + js/menu.js | 1 + 2 files changed, 2 insertions(+) diff --git a/css/allcss.css b/css/allcss.css index d5063f16fb..8977173a4d 100644 --- a/css/allcss.css +++ b/css/allcss.css @@ -28013,6 +28013,7 @@ blockquote p { } .left-off-canvas-menu { + display: none; -webkit-backface-visibility: hidden; background: #134a6a; bottom: 0; diff --git a/js/menu.js b/js/menu.js index 2d4a47778d..94bf5a5dbb 100644 --- a/js/menu.js +++ b/js/menu.js @@ -17,6 +17,7 @@ function hookupTOCEvents() $(".currentPage").each(function(){ $(this).parentsUntil($('.docsidebarnav_section')).addClass("active").removeClass("menu-closed").addClass("menu-open"); }); + $(".left-off-canvas-menu").css("display","block"); } jQuery(document).ready(function(){ hookupTOCEvents(); From f458e869298d5d5fd0a2328b4ce75293c6422ba0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Carvalho?= Date: Wed, 16 Nov 2016 21:28:02 -0200 Subject: [PATCH 08/32] machine: add available 3rd party drivers list (#250) * machine: add available 3rd party drivers list This commit re-adds the deleted list of 3rd party drivers. I believe this was missed when moving the docs as this list is referenced by other parts of the documentation. Rename AVAILABLE_DRIVER_PLUGINS to AVAILABLE_DRIVER_PLUGINS.md Update get-started-cloud.md * machine: fix list of machine plugins markup --- machine/AVAILABLE_DRIVER_PLUGINS.md | 358 ++++++++++++++++++++++++++++ machine/get-started-cloud.md | 2 +- 2 files changed, 359 insertions(+), 1 deletion(-) create mode 100644 machine/AVAILABLE_DRIVER_PLUGINS.md diff --git a/machine/AVAILABLE_DRIVER_PLUGINS.md b/machine/AVAILABLE_DRIVER_PLUGINS.md new file mode 100644 index 0000000000..2b10447cc8 --- /dev/null +++ b/machine/AVAILABLE_DRIVER_PLUGINS.md @@ -0,0 +1,358 @@ +--- +published: false +title: "Machine plugins" +description: "Machine plugins" +keywords: ["Docker, documentation, manual, guide, reference, api"] +--- + + +# Available driver plugins + +This document is intended to act as a reference for the available 3rd-party +driver plugins available in the ecosystem beyond the core Machine drivers. If +you have created a Docker Machine driver, we highly encourage you to submit a +pull request adding the relevant information to the list. Submitting your +driver here will allow others to discover it and the core Machine team to keep +you informed of upstream changes. + +**NOTE**: The linked repositories are not maintained by or formally associated +with Docker Inc. Use 3rd party plugins at your own risk. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameRepositoryMaintainer GitHub HandleMaintainer Email
1&1 Cloud Server + https://github.com/1and1/docker-machine-driver-oneandone + + StackPointCloud, Inc. + + sdk@1and1.com +
Aliyun ECS + https://github.com/denverdino/docker-machine-driver-aliyunecs + + denverdino
+ menglingwei +
+ denverdino@gmail.com
+ v.con@qq.com +
Amazon Cloud Formation + https://github.com/jeffellin/machine-cloudformation + + Jeff Ellin + + acf@ellin.com +
BrightBox + https://github.com/brightbox/docker-machine-driver-brightbox + + NeilW + + neil@aldur.co.uk +
CenturyLink Cloud + https://github.com/CenturyLinkCloud/docker-machine-driver-clc + + ack + + albert.choi@ctl.io +
Citrix XenServer + https://github.com/xenserver/docker-machine-driver-xenserver + + robertbreker
+ phusl +
+ robert.breker@citrix.com
+ phus.lu@citrix.com +
Docker-In-Docker + https://github.com/nathanleclaire/docker-machine-driver-dind + + nathanleclaire + + nathan.leclaire@gmail.com +
GoDaddy Cloud Servers + https://github.com/godaddy/docker-machine-godaddy + + aka-bo + + bo.thompson@gmail.com +
HPE OneView + https://github.com/HewlettPackard/docker-machine-oneview + + wenlock
+ miqui +
+ wenlock@hpe.com
+ miqui@hpe.com +
KVM + https://github.com/dhiltgen/docker-machine-kvm + + dhiltgen + + daniel.hiltgen@docker.com +
OpenNebula + https://github.com/OpenNebula/docker-machine-opennebula + + jmelis + + jmelis@opennebula.org +
OVH Cloud + https://github.com/yadutaf/docker-machine-driver-ovh + + yadutaf + + jt@yadutaf.fr +
Packet + https://github.com/packethost/docker-machine-driver-packet + + betawaffle + + andy@packet.net +
ProfitBricks + https://github.com/profitbricks/docker-machine-driver-profitbricks + + StackPointCloud, Inc. + + sdk@profitbricks.com +
Parallels Desktop for Mac + https://github.com/Parallels/docker-machine-parallels + + legal90 + + legal90@gmail.com +
RackHD + https://github.com/emccode/docker-machine-rackhd + + kacole2 + + kendrick.coleman@emc.com +
SAKURA CLOUD + https://github.com/yamamoto-febc/docker-machine-sakuracloud + + yamamoto-febc + + yamamoto.febc@gmail.com +
Scaleway + https://github.com/scaleway/docker-machine-driver-scaleway + + scaleway + + opensource@scaleway.com +
Skytap + https://github.com/skytap/docker-machine-driver-skytap + + dantjones + + djones@skytap.com +
Ubiquity Hosting + https://github.com/ubiquityhosting/docker-machine-driver-ubiquity + + Justin Canington
+ Andrew Ayers +
+ justin.canington@nobistech.net
+ + andrew.ayers@nobistech.net +
UCloud + https://github.com/ucloud/docker-machine-ucloud + + xiaohui + + xiaohui.zju@gmail.com +
VMWare Workstation + https://github.com/pecigonzalo/docker-machine-vmwareworkstation + + pecigonzalo + + pecigonzalo@outlook.com +
VULTR + https://github.com/janeczku/docker-machine-vultr + + janeczku + + jb@festplatte.eu.org +
xhyve + https://github.com/zchee/docker-machine-driver-xhyve + + zchee + + zchee.io@gmail.com +
diff --git a/machine/get-started-cloud.md b/machine/get-started-cloud.md index f9b327718d..615b4e2f5f 100644 --- a/machine/get-started-cloud.md +++ b/machine/get-started-cloud.md @@ -52,7 +52,7 @@ See Docker Machine driver reference fo Several Docker Machine driver plugins for use with other cloud platforms are available from 3rd party contributors. These are use-at-your-own-risk plugins, not maintained by or formally associated with Docker. - See Available driver plugins in the docker/machine repo on GitHub. + See Available driver plugins. ## Adding a host without a driver From 2a825089635a76821bf11e0ed2372e83fbb1fbb8 Mon Sep 17 00:00:00 2001 From: Misty Stanley-Jones Date: Wed, 9 Nov 2016 14:51:05 -0800 Subject: [PATCH 09/32] Change Dockerfile to fetch engine refs from docker/docker 1.12.x branch Update Dockerfile and NOT_EDITED_HERE manifest Signed-off-by: Misty Stanley-Jones --- Dockerfile | 25 +++++++++++++++++++++++++ _data/.NOT_EDITED_HERE.yaml | 12 ------------ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index 239d0ed7ab..e8be329526 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,25 @@ FROM starefossen/github-pages +# Basic Git set-up for throwaway commits +RUN git config --global user.email "gordon@docker.com" +RUN git config --global user.name "Gordon" + +# Clone the docs repo RUN git clone https://www.github.com/docker/docker.github.io allv + +# Get docker/docker ref docs from 1.12.x branch to be used in master builds +# Uses Github Subversion gateway to limit the checkout +RUN svn co https://github.com/docker/docker/branches/1.12.x/docs/reference allv/engine/reference +RUN svn co https://github.com/docker/docker/branches/1.12.x/docs/extend allv/engine/extend +# Can't use the svn trick to get a single file, use wget instead +RUN wget -O allv/engine/deprecated.md https://raw.githubusercontent.com/docker/docker/1.12.x/docs/deprecated.md +# Make a temporary commit for the files we added so we can check out other branches later +RUN git --git-dir=./allv/.git --work-tree=./allv commit -m "Temporary commit" -a + +# Create HTML for master RUN jekyll build -s allv -d allvbuild +# Check out 1.4 branch, create HTML, tweak links RUN git --git-dir=./allv/.git --work-tree=./allv checkout v1.4 RUN mkdir allvbuild/v1.4 RUN jekyll build -s allv -d allvbuild/v1.4 @@ -10,6 +27,7 @@ RUN find allvbuild/v1.4 -type f -name '*.html' -print0 | xargs -0 sed -i 's#href RUN find allvbuild/v1.4 -type f -name '*.html' -print0 | xargs -0 sed -i 's#src="/#src="/v1.4/#g' RUN find allvbuild/v1.4 -type f -name '*.html' -print0 | xargs -0 sed -i 's#href="https://docs.docker.com/#href="/v1.4/#g' +# Check out 1.5 branch, create HTML, tweak links RUN git --git-dir=./allv/.git --work-tree=./allv checkout v1.5 RUN mkdir allvbuild/v1.5 RUN jekyll build -s allv -d allvbuild/v1.5 @@ -17,6 +35,7 @@ RUN find allvbuild/v1.5 -type f -name '*.html' -print0 | xargs -0 sed -i 's#href RUN find allvbuild/v1.5 -type f -name '*.html' -print0 | xargs -0 sed -i 's#src="/#src="/v1.5/#g' RUN find allvbuild/v1.5 -type f -name '*.html' -print0 | xargs -0 sed -i 's#href="https://docs.docker.com/#href="/v1.5/#g' +# Check out 1.6, create HTML, tweak links RUN git --git-dir=./allv/.git --work-tree=./allv checkout v1.6 RUN mkdir allvbuild/v1.6 RUN jekyll build -s allv -d allvbuild/v1.6 @@ -24,6 +43,7 @@ RUN find allvbuild/v1.6 -type f -name '*.html' -print0 | xargs -0 sed -i 's#href RUN find allvbuild/v1.6 -type f -name '*.html' -print0 | xargs -0 sed -i 's#src="/#src="/v1.6/#g' RUN find allvbuild/v1.6 -type f -name '*.html' -print0 | xargs -0 sed -i 's#href="https://docs.docker.com/#href="/v1.6/#g' +# Check out 1.7, create HTML, tweak links RUN git --git-dir=./allv/.git --work-tree=./allv checkout v1.7 RUN mkdir allvbuild/v1.7 RUN jekyll build -s allv -d allvbuild/v1.7 @@ -31,6 +51,7 @@ RUN find allvbuild/v1.7 -type f -name '*.html' -print0 | xargs -0 sed -i 's#href RUN find allvbuild/v1.7 -type f -name '*.html' -print0 | xargs -0 sed -i 's#src="/#src="/v1.7/#g' RUN find allvbuild/v1.7 -type f -name '*.html' -print0 | xargs -0 sed -i 's#href="https://docs.docker.com/#href="/v1.7/#g' +# Check out 1.8, create HTML, tweak links RUN git --git-dir=./allv/.git --work-tree=./allv checkout v1.8 RUN mkdir allvbuild/v1.8 RUN jekyll build -s allv -d allvbuild/v1.8 @@ -38,6 +59,7 @@ RUN find allvbuild/v1.8 -type f -name '*.html' -print0 | xargs -0 sed -i 's#href RUN find allvbuild/v1.8 -type f -name '*.html' -print0 | xargs -0 sed -i 's#src="/#src="/v1.8/#g' RUN find allvbuild/v1.8 -type f -name '*.html' -print0 | xargs -0 sed -i 's#href="https://docs.docker.com/#href="/v1.8/#g' +# Check out 1.9, create HTML, tweak links RUN git --git-dir=./allv/.git --work-tree=./allv checkout v1.9 RUN mkdir allvbuild/v1.9 RUN jekyll build -s allv -d allvbuild/v1.9 @@ -45,6 +67,7 @@ RUN find allvbuild/v1.9 -type f -name '*.html' -print0 | xargs -0 sed -i 's#href RUN find allvbuild/v1.9 -type f -name '*.html' -print0 | xargs -0 sed -i 's#src="/#src="/v1.9/#g' RUN find allvbuild/v1.9 -type f -name '*.html' -print0 | xargs -0 sed -i 's#href="https://docs.docker.com/#href="/v1.9/#g' +# Check out 1.10, create HTML, tweak links RUN git --git-dir=./allv/.git --work-tree=./allv checkout v1.10 RUN mkdir allvbuild/v1.10 RUN jekyll build -s allv -d allvbuild/v1.10 @@ -52,6 +75,7 @@ RUN find allvbuild/v1.10 -type f -name '*.html' -print0 | xargs -0 sed -i 's#hre RUN find allvbuild/v1.10 -type f -name '*.html' -print0 | xargs -0 sed -i 's#src="/#src="/v1.10/#g' RUN find allvbuild/v1.10 -type f -name '*.html' -print0 | xargs -0 sed -i 's#href="https://docs.docker.com/#href="/v1.10/#g' +# Check out 1.11, create HTML, tweak links RUN git --git-dir=./allv/.git --work-tree=./allv checkout v1.11 RUN mkdir allvbuild/v1.11 RUN jekyll build -s allv -d allvbuild/v1.11 @@ -59,4 +83,5 @@ RUN find allvbuild/v1.11 -type f -name '*.html' -print0 | xargs -0 sed -i 's#hre RUN find allvbuild/v1.11 -type f -name '*.html' -print0 | xargs -0 sed -i 's#src="/#src="/v1.11/#g' RUN find allvbuild/v1.11 -type f -name '*.html' -print0 | xargs -0 sed -i 's#href="https://docs.docker.com/#href="/v1.11/#g' +# Serve the site, which is now all static HTML CMD jekyll serve -s /usr/src/app/allvbuild -d /_site --no-watch -H 0.0.0.0 -P 4000 diff --git a/_data/.NOT_EDITED_HERE.yaml b/_data/.NOT_EDITED_HERE.yaml index 65fbbfca1f..ae06766bc8 100644 --- a/_data/.NOT_EDITED_HERE.yaml +++ b/_data/.NOT_EDITED_HERE.yaml @@ -13,18 +13,6 @@ - path: apidocs/ description: "Auto-generated API docs for Docker Cloud, DTR, UCP. File an issue." -- path: engine/deprecated.md - description: Docker Engine deprecation reference - source: https://github.com/docker/docker/docs/deprecated.md - -- path: engine/extend/ - description: References for Docker Engine plugin system - source: https://github.com/docker/docker/docs/extend/ - -- path: engine/reference/ - description: Docker Engine CLI and API references - source: https://github.com/docker/docker/docs/reference/ - - path: notary/reference/ description: Reference docs for Docker Notary source: https://github.com/docker/notary/docs/reference/ From d2e8ccf844fa636ea4cd6f2ace7174558baead5a Mon Sep 17 00:00:00 2001 From: Misty Stanley-Jones Date: Wed, 9 Nov 2016 14:50:41 -0800 Subject: [PATCH 10/32] Remove engine docs for refs, plugins, deprecated from docs source Signed-off-by: Misty Stanley-Jones --- engine/deprecated.md | 195 - .../extend/images/authz_additional_info.png | Bin 45916 -> 0 bytes engine/extend/images/authz_allow.png | Bin 33505 -> 0 bytes engine/extend/images/authz_chunked.png | Bin 33168 -> 0 bytes .../extend/images/authz_connection_hijack.png | Bin 38780 -> 0 bytes engine/extend/images/authz_deny.png | Bin 27099 -> 0 bytes engine/extend/index.md | 263 - engine/extend/legacy_plugins.md | 88 - engine/extend/manifest.md | 215 - engine/extend/plugin_api.md | 188 - engine/extend/plugins_authorization.md | 248 - engine/extend/plugins_network.md | 67 - engine/extend/plugins_volume.md | 262 - engine/reference/api/README.md | 13 - .../_static/io_oauth_authorization_page.png | Bin 39458 -> 0 bytes engine/reference/api/docker-io_api.md | 12 - .../reference/api/docker_io_accounts_api.md | 273 - engine/reference/api/docker_remote_api.md | 271 - .../reference/api/docker_remote_api_v1.18.md | 2145 ------- .../reference/api/docker_remote_api_v1.19.md | 2225 ------- .../reference/api/docker_remote_api_v1.20.md | 2380 -------- .../reference/api/docker_remote_api_v1.21.md | 2951 --------- .../reference/api/docker_remote_api_v1.22.md | 3287 ---------- .../reference/api/docker_remote_api_v1.23.md | 3403 ----------- .../reference/api/docker_remote_api_v1.24.md | 5259 ---------------- .../reference/api/docker_remote_api_v1.25.md | 5295 ----------------- engine/reference/api/hub_registry_spec.md | 15 - .../reference/api/images/event_state.gliffy | 1 - engine/reference/api/images/event_state.png | Bin 78354 -> 0 bytes engine/reference/api/index.md | 11 - .../api/remote_api_client_libraries.md | 130 - engine/reference/builder.md | 1719 ------ engine/reference/commandline/attach.md | 124 - engine/reference/commandline/build.md | 409 -- engine/reference/commandline/cli.md | 222 - engine/reference/commandline/commit.md | 85 - engine/reference/commandline/cp.md | 104 - engine/reference/commandline/create.md | 188 - engine/reference/commandline/deploy.md | 55 - engine/reference/commandline/diff.md | 40 - .../reference/commandline/docker_images.gif | Bin 35785 -> 0 bytes engine/reference/commandline/dockerd.md | 1292 ---- engine/reference/commandline/events.md | 179 - engine/reference/commandline/exec.md | 55 - engine/reference/commandline/export.md | 35 - engine/reference/commandline/history.md | 40 - engine/reference/commandline/images.md | 277 - engine/reference/commandline/import.md | 67 - engine/reference/commandline/index.md | 135 - engine/reference/commandline/info.md | 143 - engine/reference/commandline/inspect.md | 93 - engine/reference/commandline/kill.md | 26 - engine/reference/commandline/load.md | 45 - engine/reference/commandline/login.md | 114 - engine/reference/commandline/logout.md | 22 - engine/reference/commandline/logs.md | 58 - .../reference/commandline/network_connect.md | 94 - .../reference/commandline/network_create.md | 192 - .../commandline/network_disconnect.md | 34 - .../reference/commandline/network_inspect.md | 119 - engine/reference/commandline/network_ls.md | 176 - engine/reference/commandline/network_rm.md | 50 - engine/reference/commandline/node_demote.md | 29 - engine/reference/commandline/node_inspect.md | 127 - engine/reference/commandline/node_ls.md | 94 - engine/reference/commandline/node_promote.md | 28 - engine/reference/commandline/node_ps.md | 100 - engine/reference/commandline/node_rm.md | 66 - engine/reference/commandline/node_update.md | 63 - engine/reference/commandline/pause.md | 27 - .../reference/commandline/plugin_disable.md | 57 - engine/reference/commandline/plugin_enable.md | 57 - .../reference/commandline/plugin_inspect.md | 145 - .../reference/commandline/plugin_install.md | 57 - engine/reference/commandline/plugin_ls.md | 41 - engine/reference/commandline/plugin_rm.md | 43 - engine/reference/commandline/port.md | 33 - engine/reference/commandline/ps.md | 372 -- engine/reference/commandline/pull.md | 237 - engine/reference/commandline/push.md | 60 - engine/reference/commandline/rename.md | 19 - engine/reference/commandline/restart.md | 18 - engine/reference/commandline/rm.md | 61 - engine/reference/commandline/rmi.md | 75 - engine/reference/commandline/run.md | 676 --- engine/reference/commandline/save.md | 37 - engine/reference/commandline/search.md | 126 - .../reference/commandline/service_create.md | 469 -- .../reference/commandline/service_inspect.md | 152 - engine/reference/commandline/service_ls.md | 108 - engine/reference/commandline/service_ps.md | 100 - engine/reference/commandline/service_rm.md | 48 - engine/reference/commandline/service_scale.md | 77 - .../reference/commandline/service_update.md | 113 - engine/reference/commandline/stack_config.md | 28 - engine/reference/commandline/stack_deploy.md | 57 - engine/reference/commandline/stack_rm.md | 31 - .../reference/commandline/stack_services.md | 62 - engine/reference/commandline/stack_tasks.md | 44 - engine/reference/commandline/start.md | 20 - engine/reference/commandline/stats.md | 40 - engine/reference/commandline/stop.md | 21 - engine/reference/commandline/swarm_init.md | 106 - engine/reference/commandline/swarm_join.md | 96 - .../reference/commandline/swarm_join_token.md | 97 - engine/reference/commandline/swarm_leave.md | 55 - engine/reference/commandline/swarm_update.md | 36 - engine/reference/commandline/tag.md | 66 - engine/reference/commandline/top.md | 17 - engine/reference/commandline/unpause.md | 24 - engine/reference/commandline/update.md | 73 - engine/reference/commandline/version.md | 59 - engine/reference/commandline/volume_create.md | 83 - .../reference/commandline/volume_inspect.md | 50 - engine/reference/commandline/volume_ls.md | 87 - engine/reference/commandline/volume_rm.md | 32 - engine/reference/commandline/wait.md | 17 - engine/reference/glossary.md | 278 - engine/reference/index.md | 13 - engine/reference/run.md | 1533 ----- 120 files changed, 42129 deletions(-) delete mode 100644 engine/deprecated.md delete mode 100644 engine/extend/images/authz_additional_info.png delete mode 100644 engine/extend/images/authz_allow.png delete mode 100644 engine/extend/images/authz_chunked.png delete mode 100644 engine/extend/images/authz_connection_hijack.png delete mode 100644 engine/extend/images/authz_deny.png delete mode 100644 engine/extend/index.md delete mode 100644 engine/extend/legacy_plugins.md delete mode 100644 engine/extend/manifest.md delete mode 100644 engine/extend/plugin_api.md delete mode 100644 engine/extend/plugins_authorization.md delete mode 100644 engine/extend/plugins_network.md delete mode 100644 engine/extend/plugins_volume.md delete mode 100644 engine/reference/api/README.md delete mode 100644 engine/reference/api/_static/io_oauth_authorization_page.png delete mode 100644 engine/reference/api/docker-io_api.md delete mode 100644 engine/reference/api/docker_io_accounts_api.md delete mode 100644 engine/reference/api/docker_remote_api.md delete mode 100644 engine/reference/api/docker_remote_api_v1.18.md delete mode 100644 engine/reference/api/docker_remote_api_v1.19.md delete mode 100644 engine/reference/api/docker_remote_api_v1.20.md delete mode 100644 engine/reference/api/docker_remote_api_v1.21.md delete mode 100644 engine/reference/api/docker_remote_api_v1.22.md delete mode 100644 engine/reference/api/docker_remote_api_v1.23.md delete mode 100644 engine/reference/api/docker_remote_api_v1.24.md delete mode 100644 engine/reference/api/docker_remote_api_v1.25.md delete mode 100644 engine/reference/api/hub_registry_spec.md delete mode 100644 engine/reference/api/images/event_state.gliffy delete mode 100644 engine/reference/api/images/event_state.png delete mode 100644 engine/reference/api/index.md delete mode 100644 engine/reference/api/remote_api_client_libraries.md delete mode 100644 engine/reference/builder.md delete mode 100644 engine/reference/commandline/attach.md delete mode 100644 engine/reference/commandline/build.md delete mode 100644 engine/reference/commandline/cli.md delete mode 100644 engine/reference/commandline/commit.md delete mode 100644 engine/reference/commandline/cp.md delete mode 100644 engine/reference/commandline/create.md delete mode 100644 engine/reference/commandline/deploy.md delete mode 100644 engine/reference/commandline/diff.md delete mode 100644 engine/reference/commandline/docker_images.gif delete mode 100644 engine/reference/commandline/dockerd.md delete mode 100644 engine/reference/commandline/events.md delete mode 100644 engine/reference/commandline/exec.md delete mode 100644 engine/reference/commandline/export.md delete mode 100644 engine/reference/commandline/history.md delete mode 100644 engine/reference/commandline/images.md delete mode 100644 engine/reference/commandline/import.md delete mode 100644 engine/reference/commandline/index.md delete mode 100644 engine/reference/commandline/info.md delete mode 100644 engine/reference/commandline/inspect.md delete mode 100644 engine/reference/commandline/kill.md delete mode 100644 engine/reference/commandline/load.md delete mode 100644 engine/reference/commandline/login.md delete mode 100644 engine/reference/commandline/logout.md delete mode 100644 engine/reference/commandline/logs.md delete mode 100644 engine/reference/commandline/network_connect.md delete mode 100644 engine/reference/commandline/network_create.md delete mode 100644 engine/reference/commandline/network_disconnect.md delete mode 100644 engine/reference/commandline/network_inspect.md delete mode 100644 engine/reference/commandline/network_ls.md delete mode 100644 engine/reference/commandline/network_rm.md delete mode 100644 engine/reference/commandline/node_demote.md delete mode 100644 engine/reference/commandline/node_inspect.md delete mode 100644 engine/reference/commandline/node_ls.md delete mode 100644 engine/reference/commandline/node_promote.md delete mode 100644 engine/reference/commandline/node_ps.md delete mode 100644 engine/reference/commandline/node_rm.md delete mode 100644 engine/reference/commandline/node_update.md delete mode 100644 engine/reference/commandline/pause.md delete mode 100644 engine/reference/commandline/plugin_disable.md delete mode 100644 engine/reference/commandline/plugin_enable.md delete mode 100644 engine/reference/commandline/plugin_inspect.md delete mode 100644 engine/reference/commandline/plugin_install.md delete mode 100644 engine/reference/commandline/plugin_ls.md delete mode 100644 engine/reference/commandline/plugin_rm.md delete mode 100644 engine/reference/commandline/port.md delete mode 100644 engine/reference/commandline/ps.md delete mode 100644 engine/reference/commandline/pull.md delete mode 100644 engine/reference/commandline/push.md delete mode 100644 engine/reference/commandline/rename.md delete mode 100644 engine/reference/commandline/restart.md delete mode 100644 engine/reference/commandline/rm.md delete mode 100644 engine/reference/commandline/rmi.md delete mode 100644 engine/reference/commandline/run.md delete mode 100644 engine/reference/commandline/save.md delete mode 100644 engine/reference/commandline/search.md delete mode 100644 engine/reference/commandline/service_create.md delete mode 100644 engine/reference/commandline/service_inspect.md delete mode 100644 engine/reference/commandline/service_ls.md delete mode 100644 engine/reference/commandline/service_ps.md delete mode 100644 engine/reference/commandline/service_rm.md delete mode 100644 engine/reference/commandline/service_scale.md delete mode 100644 engine/reference/commandline/service_update.md delete mode 100644 engine/reference/commandline/stack_config.md delete mode 100644 engine/reference/commandline/stack_deploy.md delete mode 100644 engine/reference/commandline/stack_rm.md delete mode 100644 engine/reference/commandline/stack_services.md delete mode 100644 engine/reference/commandline/stack_tasks.md delete mode 100644 engine/reference/commandline/start.md delete mode 100644 engine/reference/commandline/stats.md delete mode 100644 engine/reference/commandline/stop.md delete mode 100644 engine/reference/commandline/swarm_init.md delete mode 100644 engine/reference/commandline/swarm_join.md delete mode 100644 engine/reference/commandline/swarm_join_token.md delete mode 100644 engine/reference/commandline/swarm_leave.md delete mode 100644 engine/reference/commandline/swarm_update.md delete mode 100644 engine/reference/commandline/tag.md delete mode 100644 engine/reference/commandline/top.md delete mode 100644 engine/reference/commandline/unpause.md delete mode 100644 engine/reference/commandline/update.md delete mode 100644 engine/reference/commandline/version.md delete mode 100644 engine/reference/commandline/volume_create.md delete mode 100644 engine/reference/commandline/volume_inspect.md delete mode 100644 engine/reference/commandline/volume_ls.md delete mode 100644 engine/reference/commandline/volume_rm.md delete mode 100644 engine/reference/commandline/wait.md delete mode 100644 engine/reference/glossary.md delete mode 100644 engine/reference/index.md delete mode 100644 engine/reference/run.md diff --git a/engine/deprecated.md b/engine/deprecated.md deleted file mode 100644 index de417b9b82..0000000000 --- a/engine/deprecated.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -redirect_from: -- /engine/misc/deprecated/ -description: Deprecated Features. -keywords: -- docker, documentation, about, technology, deprecate -title: Deprecated Engine features ---- - -The following list of features are deprecated in Engine. -To learn more about Docker Engine's deprecation policy, -see [Feature Deprecation Policy](index.md#feature-deprecation-policy). - - -### Three argument form in `docker import` -**Deprecated In Release: [v0.6.7](https://github.com/docker/docker/releases/tag/v0.6.7)** - -**Removed In Release: [v1.12.0](https://github.com/docker/docker/releases/tag/v1.12.0)** - -The `docker import` command format `file|URL|- [REPOSITORY [TAG]]` is deprecated since November 2013. It's no more supported. - -### `-h` shorthand for `--help` - -**Deprecated In Release: [v1.12.0](https://github.com/docker/docker/releases/tag/v1.12.0)** - -**Target For Removal In Release: v1.15** - -The shorthand (`-h`) is less common than `--help` on Linux and cannot be used -on all subcommands (due to it conflicting with, e.g. `-h` / `--hostname` on -`docker create`). For this reason, the `-h` shorthand was not printed in the -"usage" output of subcommands, nor documented, and is now marked "deprecated". - -### `-e` and `--email` flags on `docker login` -**Deprecated In Release: [v1.11.0](https://github.com/docker/docker/releases/tag/v1.11.0)** - -**Target For Removal In Release: v1.14** - -The docker login command is removing the ability to automatically register for an account with the target registry if the given username doesn't exist. Due to this change, the email flag is no longer required, and will be deprecated. - -### Separator (`:`) of `--security-opt` flag on `docker run` -**Deprecated In Release: [v1.11.0](https://github.com/docker/docker/releases/tag/v1.11.0)** - -**Target For Removal In Release: v1.14** - -The flag `--security-opt` doesn't use the colon separator(`:`) anymore to divide keys and values, it uses the equal symbol(`=`) for consistency with other similar flags, like `--storage-opt`. - -### `/containers/(id or name)/copy` endpoint - -**Deprecated In Release: [v1.8.0](https://github.com/docker/docker/releases/tag/v1.8.0)** - -**Removed In Release: [v1.12.0](https://github.com/docker/docker/releases/tag/v1.12.0)** - -The endpoint `/containers/(id or name)/copy` is deprecated in favor of `/containers/(id or name)/archive`. - -### Ambiguous event fields in API -**Deprecated In Release: [v1.10.0](https://github.com/docker/docker/releases/tag/v1.10.0)** - -The fields `ID`, `Status` and `From` in the events API have been deprecated in favor of a more rich structure. -See the events API documentation for the new format. - -### `-f` flag on `docker tag` -**Deprecated In Release: [v1.10.0](https://github.com/docker/docker/releases/tag/v1.10.0)** - -**Removed In Release: [v1.12.0](https://github.com/docker/docker/releases/tag/v1.12.0)** - -To make tagging consistent across the various `docker` commands, the `-f` flag on the `docker tag` command is deprecated. It is not longer necessary to specify `-f` to move a tag from one image to another. Nor will `docker` generate an error if the `-f` flag is missing and the specified tag is already in use. - -### HostConfig at API container start -**Deprecated In Release: [v1.10.0](https://github.com/docker/docker/releases/tag/v1.10.0)** - -**Removed In Release: [v1.12.0](https://github.com/docker/docker/releases/tag/v1.12.0)** - -Passing an `HostConfig` to `POST /containers/{name}/start` is deprecated in favor of -defining it at container creation (`POST /containers/create`). - -### Docker ps 'before' and 'since' options - -**Deprecated In Release: [v1.10.0](https://github.com/docker/docker/releases/tag/v1.10.0)** - -**Removed In Release: [v1.12.0](https://github.com/docker/docker/releases/tag/v1.12.0)** - -The `docker ps --before` and `docker ps --since` options are deprecated. -Use `docker ps --filter=before=...` and `docker ps --filter=since=...` instead. - -### Docker search 'automated' and 'stars' options - -**Deprecated in Release: [v1.12.0](https://github.com/docker/docker/releases/tag/v1.12.0)** - -**Target For Removal In Release: v1.15** - -The `docker search --automated` and `docker search --stars` options are deprecated. -Use `docker search --filter=is-automated=...` and `docker search --filter=stars=...` instead. - -### Driver Specific Log Tags -**Deprecated In Release: [v1.9.0](https://github.com/docker/docker/releases/tag/v1.9.0)** - -**Removed In Release: [v1.12.0](https://github.com/docker/docker/releases/tag/v1.12.0)** - -Log tags are now generated in a standard way across different logging drivers. -Because of which, the driver specific log tag options `syslog-tag`, `gelf-tag` and -`fluentd-tag` have been deprecated in favor of the generic `tag` option. - -```bash -{% raw %} -$ docker --log-driver=syslog --log-opt tag="{{.ImageName}}/{{.Name}}/{{.ID}}" -{% endraw %} -``` - -### LXC built-in exec driver -**Deprecated In Release: [v1.8.0](https://github.com/docker/docker/releases/tag/v1.8.0)** - -**Removed In Release: [v1.10.0](https://github.com/docker/docker/releases/tag/v1.10.0)** - -The built-in LXC execution driver, the lxc-conf flag, and API fields have been removed. - -### Old Command Line Options -**Deprecated In Release: [v1.8.0](https://github.com/docker/docker/releases/tag/v1.8.0)** - -**Removed In Release: [v1.10.0](https://github.com/docker/docker/releases/tag/v1.10.0)** - -The flags `-d` and `--daemon` are deprecated in favor of the `daemon` subcommand: - -```bash -$ docker daemon -H ... -``` - -The following single-dash (`-opt`) variant of certain command line options -are deprecated and replaced with double-dash options (`--opt`): - -```none -docker attach -nostdin -docker attach -sig-proxy -docker build -no-cache -docker build -rm -docker commit -author -docker commit -run -docker events -since -docker history -notrunc -docker images -notrunc -docker inspect -format -docker ps -beforeId -docker ps -notrunc -docker ps -sinceId -docker rm -link -docker run -cidfile -docker run -dns -docker run -entrypoint -docker run -expose -docker run -link -docker run -lxc-conf -docker run -n -docker run -privileged -docker run -volumes-from -docker search -notrunc -docker search -stars -docker search -t -docker search -trusted -docker tag -force -``` - -The following double-dash options are deprecated and have no replacement: - -```none -docker run --cpuset -docker run --networking -docker ps --since-id -docker ps --before-id -docker search --trusted -``` - -**Deprecated In Release: [v1.5.0](https://github.com/docker/docker/releases/tag/v1.5.0)** - -**Removed In Release: [v1.12.0](https://github.com/docker/docker/releases/tag/v1.12.0)** - -The single-dash (`-help`) was removed, in favor of the double-dash `--help` - -```bash -$ docker -help - - docker [COMMAND] -help -``` - -### Interacting with V1 registries - -Version 1.9 adds a flag (`--disable-legacy-registry=false`) which prevents the docker daemon from `pull`, `push`, and `login` operations against v1 registries. Though disabled by default, this signals the intent to deprecate the v1 protocol. - -### Docker Content Trust ENV passphrase variables name change -**Deprecated In Release: [v1.9.0](https://github.com/docker/docker/releases/tag/v1.9.0)** - -**Removed In Release: [v1.12.0](https://github.com/docker/docker/releases/tag/v1.12.0)** - -Since 1.9, Docker Content Trust Offline key has been renamed to Root key and the Tagging key has been renamed to Repository key. Due to this renaming, we're also changing the corresponding environment variables - -- DOCKER_CONTENT_TRUST_OFFLINE_PASSPHRASE is now named DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE -- DOCKER_CONTENT_TRUST_TAGGING_PASSPHRASE is now named DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE diff --git a/engine/extend/images/authz_additional_info.png b/engine/extend/images/authz_additional_info.png deleted file mode 100644 index 1a6a6d01d2048fcb975b7d2b025cdfabd4c4f5f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45916 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 Ol5(_nwX52}O8Ou06wbc@ diff --git a/engine/extend/images/authz_allow.png b/engine/extend/images/authz_allow.png deleted file mode 100644 index f42108040bbbf9facb9fff0c320428323f061e10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33505 zcmdSB1yEIg6hBBjN;;%dQfW}S1ZgBh8UaD1rBg{Mr4a;_loDxCN>UIMkWxZGLZm?& zY4%+8xBK7!?9S}Y&d%)4ym98ryZ65PjdRW?&V8hn=q!g+ci8JxciMc^7!KkZ>@vJuSY|M72eJ0*RBf^rxl2wv9?-oiI(lUN6 zFTW}e7?N}zG8p>)$&@ceomwRb_4h-s%3R0l@IfsB4KM!BhYN$k&kUDM4g>j2Tfh;H zC||MCpF=t1ZlOD;t;3&{XH}UwaPy)c z8F$#SHy>}Q*9Dx^o2<#69lQG;Z+3qFK~_~|J8;3M>4C4MCgG9zOY@PkTYBQ(s%(fI zd{4!$4aQdJC#H>uqm_$~U)H-unBT8V;e7}Hxr~4PB?0TMq(oj5kvgBv7d;u021+rs z>~>!YVoC%_c}jH)HAA%CJk(o_6v27QB#zNAf1z_slYPL`xp4U0`{6HzTHRxB9foKK z=|qwivI5PV%p3jmP7nG5JGzTZYVLJ3>{VKIPQ==Lex}Dze6uL=aYXm&+YvM2L8+tF zs^!|6gN^&Ye|^fn`Y=x=;le9-ojNz`nk5t~IjJ?3o zd3weAucUs$)B9aCYpBgreWGMPTv9aX`@GP!&MjX@w()N3Hl3Zv{`_<2uV1gVhG4OK zE`LpARVFIZEsX6+6ISNb={#}WxEtZ>MzTBPz}PQ-v^!!xH)LR*EFX66Vy4Aqs}2J9 z>VO)|qLe8DGO-6as|I>ZH39bS|!itj*|`F#IXAkVzVyWC6cZ?&Caw%Y;ATj zsSmx5OzTOK-oHM|o^BGi9-cRKuXCHbu|}X3VtVv)>6}}T5L?W@{#If z(FotI^;#RVUKO?NXEw`t=e1@}fA+iiY|Tqb{VC6~;fKfP^&WgFxE}MSp5Vdyw<=|Z z^`YVv*M=MUY8}<$Yp<=lC%SwN=2999+QjF&Q@n3A_zb8_y|z|Q7IB~NDbq+3qFL}< z8NQzHyE|kMBj)tw@p!!pg7rBp&2*6+%F(#dTz!igB{D^8XQvk30Ps<&+?rWfmv zT>t*A=CRgOp0pL18l{FB!i?dGGC#VJ?%z{^&gou9drk&1v{#~qJS9#DB|XLb58tdL zC^K$8tJcnuFN3AIlvidk&Yg;kS2-d68-EYK0Lh3TvBFCwkJ5rDLp_!T>&ncV%ZQTs zZjJ4?N_nlOiq~;d=S;oxE-$v}%j}4oJX&vFH?F!Hv(gbmcS-9+A%dxAXX(qkjyR_E z!@Y6mTY(4N=F#rYM4j&?$=VIFvC1gN(w7Au&oY&1$)0@GD>c5tI+<>EHp&v1r)=!u zDB?7hx3$Bew9uR3&TClFvSxLf5V$j-OsILqVff~pJoVkr&*sLO{NFjWN0Nr~*5@XX z;5d7=v{Q$?+sk~j_3KguQ-Hv#5(7!V!5kGU z(c0n87cIJ>i+Zn;B*Ir(&1?O3UvVowrnux3LBwFXSn=YanD5pdDha%gR1D}0lfDZK zxjhn|%e74qIff?d+k#_o+p@{>*Uwj!S#SKE>CpX@w+xo@yLjw_YNv618wXtJ zADDLK7Gvy!BQgZ|1^&^GUD^auTsyILU1xfCI%63+hz()=MPo8O*a#+#W8!wlRa$hN ze5sQg-LQdaM|Af#?Pc3|*Tu=k`+Oc!8<@DahpwK*&no+!ot{XH?ZU{@u^OhkPq(0Z z_8eRNhAl+5v>VPZIM}%vqa(i6&gn2*QkE5X`c3S3HcqzwZeQlw){ev?>8)?Ctz+Jt zitWE<9X)*J8*qBCp!AKHN#?T83#$}u+yb*E$KU6f95Z0$7L2YCO(b2^joy=cey1mO z!1L_XpGqRHKBFi1fwSk8!Z4pQlN!xi3M%jJ|Gq~hfiWM?Z!VK8Dy0w6Q<#X?=ym&0 z#chQVhw{b(DKsiRQx|rvOw)X)siwvRBD(rE{MHd))VNve8+FU_6N~ZA(!_~MY4qL! z$vfvdObHutiCyOv?J^|2MG~(+7a`1$vXV8Wd+RVF^19=NT;n;$np2i^ad#zn0Gqcl zZ&KZd(cNc#h=PbxJ9h}?kEP=d#-=K*B0Sb7Z!u_QO4apbN}H%X<*{Sq*DZ+lSRK`Q zb+hQg_CjAulmAf{)9D6|c))S3nmarqt5XG?YU#RFob+9aN4^f9$=yHWg}DrI3wpkn zAP$Y86FoQV>NxgBb?t03E|B8Qr_awt=iaS1J%Qj#Gh{#6P*=I;gz0`7Cv*5x;*IBu zzFmKIu!TQfQ{~gPp2gK~RUyO}^V`BUy^eRjy->tAg6$JcFMi|m_co%Q6V~aynr5HIj|<1)Ci`vSV_RZO*tFRQxMrAXbU@*JNX{{_qMePtrDJ z#Way@z&_~?K_){`9xh#g?Pqk$xa>eNe)A?r`i={neHO9r+~yuH+c60>z@{sABJ5+0sLQS*uS(xNu;6 z=9PivGHQTP(yL^m)>T2;MHOFq3_EJPqJo^^ozr;r#ch@!=ehO2>TMpz#Pqdf$j+jyrz9lD+@x}N`vdhSbjvXV*gS($mmt7n z?oKl_GOc>czettzzQ?LQadDbPGeg4q+HJ)*HZ5vPa+vK5vRi&^usS7uw?B)1*Hl)< zdrzDYp^VNwQAx|B5k<-SYLMe5XAOb0SE8}GyQJ@(HE+@MT{Vr2<>6B9G$HF7B3A5; zdr!X>8)z+$l$ZYybsS~(YftaDH8Wt$Oml8N(cfDeFZ?wsr!1lnPOvO+?JPgVjLh^4 z)II}+A7Ln>ogA4Nls3m!^48ibYiq^k@Dw_`wlTGWY*b!0CJz3a<32x^sY#UBiyH5v z4^@+^)n_Z_XRq#2ZE0M-^O5Arix0flsJ~4sYn@SF;8kkOS4+N8xc058liL6JwqR5S zW5)A1ocat-Eyj!bC8_k%em7&L1?mTWX?lniXlB^o!E)UoxGO0Y=lg4Rn5%Y;bi;yF zm^;G@M#XLGr|R3IF7EP=6}Q`VSUer*yn19O=eICt;=dl!cA)A=9UDVF$q0Iec>jb{ zq+fHh_t_Qo^AY3IYAJlYB=@COW>(6ZMara|FD%>5<|srY6*K8x?UVkU-mp7tviy*U zu>duFrDZLDQTx3@yr{F;?oDM=a-WXSUn+b?udiMIp6%pXoLT4ieY4*>m*A&Sjy%?G ze1S!lRzi}Op!xkVM&~Km0L}*jy-g5E_nhAOJT~%8cVa zEyPu_oM>uf2&i@Xf3JU-C+TKOCor-}tutG%!ZlIv zsqSkLPt+HmDrEgQiAzVGh)KrLV^SbFZ=5>!h*$#nHh9644EIOCy zD+!cKh)mT)TlvjNG=SE6z~8 zd6tLytLtMjcgjdZr9IO~Fj4CpgNn7pR0k$6_5yzo|9z)GjPzV@Ih*SSt*eg#BQ(aw z{*KXkY{nL$*Y1+ih8cvVp2~DROQzAnj5wE){&)2v4)>rS?fXSs_irwB&y+bg&+U?< z8;I#QS%pa|X&TaFQE_GJhYJaq$C3uHVJIcKeE(r|U=c#K*OCb}0NuR@CAcG63>pLx zwqHd@{jj{?rjOFinuWz6-GN+ubRqO6?xMbOYl zI&#%gzII%3JSlZ=U}0L_}3y`&iFiyC%708ZdKcj z24t-P_X)YrYwYqJESf0blPRFBhjku}E0Fp~hlW@>E|7Mu2FH{*s+^lyQ88K>qC94PBvBWm+m+x+UExs zNYH^wOnQ4Z02fzoagDYsnY*wI-;8e0@oGvpJ493bw9N)a`EVf);d8sY)K5qhL)~{O z$F@pD|6q7I4H&h~Yr<8Df2XZdEl8fJn77aG$sd5gP^=eSbGMmty`@$hu1fFg-g!s~hjUoFIQbmU^(?UwWHX^d8TrMD`~D?OyIfx%}$H zeWAB5AHTB~0?wV;j+mK`&wNi)S~h0d^zOfi+2!=z`kBb0fPGQtMd&f0fh8=yuPD7?G6Eh8&-H6VG!IryE(U%CR4zmYV3DA;Lq+x7=Vo zB$nBiJB51mV{V+xtI(59robeK)5aTd!BGv6>0Ud26I%LG7}r;SJyXi4H&dFs&V6Ao zje`QGzv}l6U+4w%`I(HCsnb2tIq6^=>+Si^Ti?B>J`EKc=oM}NoJ@g<=>mMynAKyb zOeTjzY&lwPF1y<-27s1rM3~}igema2(zW!5-<80zH+H$#nr;@|7|c~B7QO#@M6CA! z2!*5?``zWCLvk&rv!q8L+O}18J3ki-MG@%PTGiNZ(=mwZo@9pFMVcmpW@O@ zm8QdG?zs+xDConN0XUNgB}4H2l-6&k>7hqaQBO`!j=D=tYQ7TZR5|pFrQ!9Y3Mv3Z zF9>D)avzXS-4^QE7ehNbhOfU@!vh&d&ir)}MRxEBBm zOfM5QP$DoParT$c%k)jjH@I>d3bO)?`ycHR0JCT-hw=MxdHVf+?c_1Pszd!Y%4mbGN+^T)5@xJ#^lOgAgs=L>X zV6TR>_hrfQBc5a1romcZ zlJe31w)^vm*7BVn2lu;H2IQ=Y3A=F{DR1=LKf*VBfHlyYCEMJ5r$g{qSmEWs)t0!W z;_{|fdxABm?c`dxr|6&2-J4b7)}d}ZS3oX6HBn+D{0*oEHDJgLfH9033y*Kniy*>K z@W7ppIOlXQ?%Yh{6pE#nx*SZkSX7vKV~t3sV8bNZjb|;)7Tp!uT{gP z;nL?VjgKAj?tQO!JKlG_f)(aK$Y)r>&|<3*fv|?jm-Ox&?{D6CW2>|Dt*S7I@0Kx# zW;$2kej5`?_WeA`$18T4O!(u}pIJQ?`>*;dTqB*f*L1}Fc}B}n4`uy1N_5K;k}}T7 zpUtPc{8=9?{m^yQUEbvi7vkW_Xl=Mnw*+Hes+J4JFpI^e3R}S+SqJEvv_P@j@rH_$ z)bEthuRCodSM(BPoIATvq=hy^eLM^}!N4sbLkTZ^K_-2~e54Vw8*V&tlfhQ~GF=Bl&HIsho`9;QWU#;|J zNM=Ud!n-vKEC1$*8?4A%6*R3?nwdxSB+j0WL$8uw;~XppNeq?UGWj42b*jYJ+`;`< z;;CnW@uTC;c?qgyBJW*K*jnkwGwstzrIl1&%6~jf)W#}t{E*bb8YgwZW&IhZk`eVL z5L0q7lb<`MuL$7OE|5$Q+Ej3$H-;P>?yhvnX?(WuFnDXPC;CvZUO8xmo~3dGS7~!z zyV6qeZIn;#LrcK+yU}6s zL0U?9;}x?-qZ05$H}5YGoSyaKey7xLYi+L?Y#k88!KywCgGF%2QsH6i{-T z*!U_Q0816}1gAF~6>6eSCF2E%IRq9z0lPhItW-#%tEEaki0Bn2_LpArDf!fLi0cKGa@n&@aZYG!W=499G?qbYi&siSU9mD?Dz#Vx`HOS_4 z%C;#p`LiKBW5dy}cLAT4%{crHVWICle~PoFjwV|`jc&CoX*x$;Iqmn}_M|-Uq}Xlg zDZjbdcg5fjN`|3%3VG$Eqmk2f^=9L_k{KH=g6*6^MIt^+0*CD(N_|1W7?g6BW7zn; zBs(`B@BLVGmy*<#kfE5Wtzp971sXD&awq(PR-iA+SowQvyTvCHIpxddO%EoC1baJB z@LN+?XvJKz5f-adBdohic)FAHch`>>9sc=vShe2--pk`)@cH!>F5P}BrG%T>_n}m~ z6?GDKzDHbxju9i(r2Wk~ec{}gnZxjpRt(stb@OQJL?Mj9VcWEVDaAG1H(zF#nMaG= zez@QndcTx(qn|5$AN6LOv6(!zZI58%=d@<{!S+ITs-V@)1+6$47Ry?8O&sSq%{@or z43Si4sXFrQrBrj}LLsug9Y|c%*K%TEea9KFdnCSz;GVpyH2N&ansT<)Gmdlew&wZY z54;GtC%Ls^<1lKl@unK@6B*v z>wG)yB*9;FHsTYq05SdLFjni)^hz3YI19@dJetdAt1e74VjiNe=qt$rLm#F!FrLy3 zVDe{1M~M6EjLkf4Q()hSi?T7aYNa=I_EG!Fne~9o#UXovn2J`v2_bV&g6Aq{DA#hGQFQ3cqgGs0lqk#UzE0=&^SHJ51l(HR zOV(~whS0b_p`L5?d=&95l}U=M3^ok=jJ2HdUb2Ci4)J>HV}H{rA2Z2-$R}?6wdFz? zBym_yw)cI`j!*jJZ8u5iT-w{5TsTohCj~S;EEPXgdxwbXz%f5SNT#hN%dBeQCsmb+w_$8FC zvZ;Bh1P10Y|BUx}{;#bf@&e7}Ij^%0LQ~{~q|liK73HSMeC;hCM-{oR_IQ1aXIU=8 zZ3vEU4M53%56J253%FKlBlt_ZbtfXTpr7(b8K;lu<-LYtU5WLGoXk1iB}+w&N9bRDTo z5ZMMk-g|`}Hfgq|=%5PnH?u0L0((&_@bJkY+eOw)M>?Q)YOd=JX#e9Ha5K@uWPI*Q z{YPy$Dg?tPdFb9M+=)2xvr>yTpYQ+5B#Xv!DZYef+X)j1R+qUV!t2?0<=n;AuSV#fLT>!vFCk zB5-cC-6dMJf4Y1td3HZeU$o6%4L?4}372gtU&PhbwYrFlFoqtzfuVcOO|eYwDTNS* zLIhE=_L=#%AFk1MyQ$JlEu$6Di%2$i_AM$JLW>k2kCXtx#a_NQG0MlG4orlTRq?m} zwegzng6q$FbYjP5_)&SWFXA{%^PmV7RTH zg@peb61hbfLWRC0@qfb~WR0u6$oqxja_B!U3Vwk+lV3qk!oOo4WWLi1vRVF{Z$FsN zeqrm_|K^JZ=BxWM7U8DiG-#A=Gw-p?BWSe#{JiN1SPR7I+Du)~t`zf_)(V(a`xKi^ zHTmm3DAq4!1J2$|7D|wW&{)-mO|WjEAMb;aX?{tsMuz8HaQEAVPq&x#OawU<25q*scI(^@%wuvnwHPk zyMYMp(Eqzc^jTrF45NO2Oi(yS$@5YM)asEcxysRCE?9Y!m1?sPxBu9kd>{RyX*$RJ=;V=w~n zgQXz_7Kqx>-kSCP#!SeA=@>b2i58P!D_pK|lT05yPP6;zpyGW3j`eG~x%u9&@5Q}# z-|OF+Hu&gBc&)ya5SK6y_{&kDfahbPE{xA#{#x|Jt+cJNOcp>op3&)~P{>9sov3Cq zPVgS3fPHV$#V3di!Q2b5`^F@yC&sFNrt$ZrZrK@PfT-$|;l{)!0KikG0!YIe$dk#} z9#QYWqR}Tc;3~(sh?_3yt%=BWCx^Sb3;f1!R34oHe) zDf#A0?W=x!s}}(cCIQEz0*DjqfYsu%d9gmPxe@Iq2)x^AoU4-HJJ_P7m+(*l%)~)* zW*bVxAc6ZqhW4is2VT5fEp8rxK}XMsWbpC9wmJaz38K3n<6E6%DI~2rWA*r4Y6laV zWrIiN&I7;U#3&nJ+M6!UYAE%x4H)7ie5QLl7+B{PZFj*~;9BFqO*FBEd%9JEm@k0a z@MW0v|9#7P1=MUVL>IL=pRfjiNgdc4MQ@D@H@NUwAQA-&kWEL*M7!jsU73HUp2WpM zG9!15vHFE>5E=`=Np*>7quSDFdf?f3slCerE1TA7R`(K!%^j|d@xA7m zh7WK}K;6nN!2I#!2iQpXI(R+D_*lOPI6HoOt@ub16`3MeYsD&(ta=sBoWUHG3>2()v#Un<9W=R&y`o6|)3Y>ZMdL&KSpw0!@o(_7d~_ zeUN;M75yWKnVy1wpm+(hcDphr2sh4j$Su zWUlpCx`E{Jo2ABjh(-r{;%4!dV4#fmFVnXwMBAreE783YDi(OSR2X81S#oGzX&GkB z8~5;Zs~tm;XIX(}kt>^?=Y5-qJVeQ#;H`N=%BuA8MCCYVR5?Vb8`4@ND);1U^CtTt{3+)2o)1YD_hsmm*F_>#8%qpf)a9ROVz>Exf(6F#I-its%2y zghTU9B^`#XE>h#|t2-t-$z%|Jr4koo!86J@cL`naWvG|idB}pUG##g|f!fyEa zGl?GtkP>7({q92Mk+ASrhE7g2%WM|QiIC_@;)Ef{x&y9}n{nQ``LDlee(ZW;P! zT~Iv7{Y>RKlDk?sAu4NKmXgDG!8m3G8j8lB|Gfvn-pfI7j7|_^K0(TCtL=~d%!>_z zmR0eNd}PQ-;PFD`s;G}hvOkU&mfBu~t??dC#}l@EOwHONen9QuqMw4I z*94_t1N-i72y6cmBY=KS>;)gGr-=Y2+*5xpWV2OCkvA#a{F9}RXL13mzqmF5Ioeejwbzv!a zORP*Y^HI2jBvl-V+}9$ZijdD{y#+AoV6(&7k||=Pp4=hP;y^AC1$ux<9*evk_B~Q=FlRMv_e#D7 zQ<}K@e00JI1o^MHhd^>DnF2kIgzi5YI(W_yD?@=snk9XfnClA)UgMiWcYC;Qz4J;2 zXIPOH4iSAk1S+*^$8UMS$O?h4sLO#U$N*73S6I!w54+S1Ola{jkoG(;mF0c!jaOf{A1MQy$DITaNxFbn z{4nSCNLDgNzV0fLU`3!9sPV=06ApYIiidE)zCRO`5#ji$mdruB$!j0iMG9b8)xi*u z+kh_7nkjw%4v;}x0AJMsyz+r2kPIx7dahDTo>`-xy(ZIznXc_6^LxU*i!o1`v7U9dTl1FppX3(w9qN#^$q>dp1vFv?i9Dq_F;vd+ zYE|FYk0Y#hE$<#;6Ou*0fRs?I)B%3NsLh?)nyCO2u!*rlV2_6F{DBz{}?6T?*{=(?Y6CrE0i-r~1*|~45yD4)g zCy@O|h;h*>_gST`dh~pyPnpZid!_st#?Hlkq>v`HnGB*EHxJrhjt6m}F7T|09@5Zt zycWgsze&h^U18c2{Dfg3)@ZN$oj@#2Cu7@gg<_)U)@Ytjf=qhA*~JdjdA^&Il}DVGscHJNl<<5KRg`pJtkbrrQ`?!w|gZurWiIb%~-%S-a&jnC+e7}4@N{5~8a&XXnA{6N%0lmgbGa;brtR?`OY z7R~Ltc`MBcB~Efe4&fk8kBNhr8H_0*850G26+& zRQq)k6C#EZVn;N-De8adG1r?V?q2XrVZ^f|l7Y|5gZ4OV{`2!AzCwDnI<^1l-h}OoKVSC~A=lXSff{!~TLXcYh`#bNG`ELc+ z>GYU)gHD9d07WLHb0N%`k*OJgd% zHDn;x(M;jXcmUbWK9o2`YNF22x?BM=*;iX@xBuWaEIJpN;5%iZ9O4Wu7JxVH&(~(m>oEj< zPtbGedK-G>TSS$-3@W82u zHc?Ir!!SEyXrBNANiPHv?*O{0a8iyS#W>`D*euRN$S;0_T6006M?Qe`$e=@|9|Eb1 z2C_`At@7}D3>5R04>cj?pUV6ZTvo00s)?hzT+}g0Mvgi-J$+W0nZa6$y|(jg*_GKu%Ccw94X#Z9(Bi0B#JU;TKsF%Db0np~c00 zSoV|TZFuy0ZtwQkK7uTQ`W8dHzZbE@yku8dfe^2s7T(Gy|w;FUialCeF^!i^` zC9Ou^^T=Bq0#hKyf+nctcee+|Aqe$e1J1tN(leQcn#L|1m8^0y;wE#Ug<9Z?ankN1 zYV^nc?b=n$P+_t`uHr;z)M7_}EM1NyuVO&9CXHdXS#x;WtGrX!V0&9WgPdCMJS&;_ zJe>GaMTiMb)Q0axJmcDqGQu!kwW37h)`Y24g>hCF!H;>(jUIUd$!gVJW(`uJ3p3mq zlP+2BF&}!Q^xt_5gHgN0dsPytM-cQ*0CRUcsEg-6JbDR^_3iM+{^TE6C%2&zAjZ6T z_pgdBhoO()Q8o2`BKXb72Nx5n3F>Si^?%0|=ir`t#vxuXjmSri8t`WuS~4ZS)}kG!3I1kAZPs)4rW+fW;+P$TxR5b zglx*#rnTX@BSd(Lt(`Ey1elCa_`LFDSUq-YNE-13)%zi|qta}TE zVCc60`jQ0-ia3L6h6|Ywwp7102R1WkKJ z9gKzhEg^?!*pqjAS!8%R|_l@Cr7_i9vp0`Ld!rNuuZQab$e>A442M< z);b6U+R&$ggTuo;n}^MA$KMuW;>x!G*Z()cv8k;6;0>8Gj<|m-5UL$=eIk-c7~7&P z=Ke_xrO$|z3i{=__BycSbUhEMbJY-S_&s^QYd7$4$IchzR_m4^bcns@m&V=}^MDuG z}*0iT@*tzpJo`VH01tbStO5$b2YdQBmg02w+O$lRvDt@yG zr>O=^Z}E_3sgCze= zM_!>MU?U-fVX@V=Nn<0qijlg`r}N^PHv9hySI5=7ai!V=AaQM)?z$|ba2seQa-PLi zZ2(rae}?9}6y^a~&Qf8t9=ro}o-0quPQU@eWe^BPprMAq?DLy{SBUra{B^yCdGbi! zmpC6}NN#A5^I>>=kBH*gW=F>%u?5?%afU3EC&9J~9|dh>?Z0wekqv|z^U7fplt?^g z4Teyy723!2VilY#(8?;K{P{UuTo#vXLL0|Zy202eh61XP1BI4)IIbm;hGt^~io zu$J6Nx(n}@aEpLfq=7Dp|5NnRBqh}yHBC=|UCntT8MMM#Tc z?gbM;k;NEV@u@+HVUB+HY<9C$r5tJ0p*FU}IWC;2jf$B5QWH_%wYMX8pcJrY>Z5P@ zA?4hfMR?k^X_Hmsh7prHilg>;N&Y%>n!1*8n1l`foGAE95o0a^qtvLp{s4s}+4S3= z%|jLcQ0~4~#!l|kgYB5ri8@`gz?0oP8_IC{hPwTkjDGjMhRpY98ActfEu{WZY|#*1 zEAY`v$Pw$qnq}GRC#?5PuB5O==l4s#pfSQDi@c8Evrk+=u}b-7bk+z9mccz(1}@}x zPh(jHpjV(~p|ef8yDyO1BJ`w#&N;p_upBRtO17PGgbWie^f{VyIlk!a`E@Z2{^nz$ zk^5q0dTqKa&h9()Y&}B}%Lix@S^-ajL^0?G{&TwFvZ6OKmxF2JHcyz*la@e;iV%fN75i$znEaVs$zJcDnZb%vPyiRU616bBVK)*X0A z3Pg*HKr#<=5sGU|mHp%P6Nvs<6n;`ENH!p2mP^n=BO#8+fJC?&X@sN`9`gRUcQMx3 zCHFl5VB~gZ<-?7{Qqjz6x`%d&?pZv)8AIGtsj4ub0SW1d6gT4I(S6*w6I}7O9}uCt z%Wl1618d0B5)$Q|r;e1gib#%W!kf;|JvMxZK3TH?T>&(Dr4nnhv9$xWd>9EPk5$e)E*p)0&2r@57@=53QDeeO?!B0Z@7fV|NVx(r( zyc*SATnqHC{O2&FWVX<&EbKR#{*jG`j0qHI%od833u~Uewbh3Be^O~M7YWj#<2coH z3;3f6HGXhz@qowobR$CcBNza_$13_o$TQjf;EDT_IU(#L^o>vTRY0mghLGl`tzi@A z4^eR*s4$tqb|c2W`PT~fjs1|?#^(7F=AHE1-$N47f1iLE_As~*vq_Dx{-yE_MJVc{ z2xk8)4Tyv3MDKlsBzv4!(ZO=A@yb}R{-4=b!OerBoR_E#L-4_WmYoK^6qYwANUon= zmcJy z4nh|?cPcyrTZcA77<3k?R$6{QW#BTzn}fnQRBHV%r4}prRG9()&kllYBA7;s%$u85 zzrPc0wURJDS^KPSZv7)2Y+U$eG|#2)dm(N$1RRGGGnFk9tYcFz_Sd>vc@i8oZS5Gu zA(kj06!YQU2#cLj%HDkOe_LodENHGUhUqQ&#H80+R4Cs2?=0#BA0ZiZYr?(n6Zl~6 zoE{$tc`RzPn<1V6j_c33THC>CSCtQG|Bs;zaL|x1*uZqRzv5HzB|*m3x=t$RLd9d4 zjoJa=3kdrB(nxvMrSU02=PM%P=Ul@}C%dGebqVQs6S8PQ3oZq6Lr=t~`wM-_s2>lI z!Jd}DAh7Z`?j(wN{j&22L@K;_Vsdd`59LSMs34L&- zBNiczbTOS${1)A{sH(I%2Dvo;?D+Rtn>fU;8IND(r{eDPwJKRP?;V z(5txw-Q(}=!>j?C!!bGiCN)mBG{}--dyHnf?vlI?M8@ZCtDA&WRpN;IZB5<-8WQYf z^7gdS#aP6MbGNcJwg_oGt-H4f=*~$XP zVOPhLpu70IlT&fC(2Np45IqN%k-oq2CSRO;zNkQ7jt+fy8vSqcPc}>bt7+x0p+OtX zaD8)-xI^gsF#PU%&y|V9_xW)Hvey{jI}uS=${sG}s@(+cW2JhT-tq`)fw#CMbIzj` zR{>b&Uuy=a*|i23yP10&1g#9onmR5klksybzxC$9?D(T@d8U`&pe!9BoCVjwfcKRG zTWA=6>3HrDR!q|}y2;yH;W?Dwrz0m{5Gqvtsq)EC;Cf;Oa#%lVi#c=y0|Cj*J*ni) z(6<%MBy09-s=1tU{&tzP|KZMHgRlD>FE!B6(^8R_=KGYP9rL-UvwqY}JpZ8OCX?yj z=$H_GItZX~k z(I=wt>X~c)Hfphw{{IQF#>x9F>4wc1hJg^?$4M)?S9F|k zhI6oW7a7JXN+qiS#;-xC}ooJ8~Jcp8R_oHWF(nE4W0_qW&d{U>9I&BcAYW z|6yHWGPwYgD%YVKO8v<&Xn3JdAYZ3@r2X}2LmiL?$6bUiKmKJB=5%|2(%Gh7LSwoEv6^&%exs3-r3b*piU*zhlV0kaOvRKKzx{ z;^oAkHfU2#@%`^O38@t((0DRYt8&@UJQ`w<`)jna?ehfKfM4zd0*mw==Oy)qX?cOT z$n}nS(orQ^)Bh6@UD?$723WV27{JhkILNo9@DNY(V=8{W^@inN4e7IR#I4 z9?-#v_x+;L>%3?NN&OAJT`+=lL8uuLAMFFl1)}B1$6Vm;5WBrq79EVYDhQZbw6dAk zF*b1>Cu#-F(lb~A1~Nm!7?uZsbYc?Y3j7Wdi628m2h zzs&R^xOd}0?mFns?1bS8LC6FQ$|s3IvKS=3g)!FzpEdh#7nGd1Y5wO0px`q#ber$F z2uWU_bq7e?BLx;uy-&!Pk)57=u=e1^s$U(S^9f+kA{=etkg$eo(krgDRdG z5$zv6AvhH~wC!@BFbYCNsfjlYw#$`^qmA{ z?q6Wcvax#qp$zk0f&v$mlw=MJ#G8|^t)nJAj}RjC7;N)Orq3?hwX1$%RQgbR6@!ww zg|rciHke~HF6fKmWB{*x6ztmv&;fIFq0NVE<0=|=XJvgRt2R>*HEdXmivS8uUWwaA zGvKm$IM6HyExZ?wmy<^U6_C%!o31Uv$Qhi6JYN`NUyLdSShf?PVme|NSn*v+MYXHp zXdvvT8!V=vFTyN%Y~g6Pem~0Ta0fa}KV!BPA>88Zh)N*X1W5y~SR2rMGiZqdCQrGt z#_)MRJ;a1{h$oYE0#8w7Y;u)aB&5h%Hw=PZixDG7zN#K%={!}PJI6-CjRe%e!4jKM zT40H-Q7KateBM z^P;SMk$5=`v2T)-mXSHQoiu1v7|#EHMtLFE1gci>;tr7idgY`aim&PBsjvV;{{&g6 z(C%iD?3KfC#*S2>G%^or4H#LKqT@@9s?SnL-vLexzSs$-GuRpgE zSac4MAd+C&cR@{o`e6>1b?D#qDKW#ZE*2fD0Q1;?1@_wNpGRgR!NU;b-Vt~E86Sd$ z--Q@@5f>Q}0MDJj#Kz>mlhEpqL3~xP|B{xHsLp4C3`gjJt607 zko^V&G6#x7J?*_I*e5AS9|7{d39wJNNQN_*dzKkizR<{!(96fMc|$CLFY&d+NcV1U zdXe|RpJY_c89%sp1y=`a`n@xFI>;W}!Mhq#0hm}G2^4RMSu$h;n-G8nKZOmtWNvf@ z9&al9&ZpV10lL^4wTc5@h`~?j0}1JEfi~f!c(7jFf;__suhOWJg2HgCQ1(Q%?pXq{ z1Qi5igC)VRpx^1aEF>3kZJ`DJyM4?SY}OYjXP^RKLlZgDD!puI zk+)JFE$5^d99$3QnqmrsGAIuW{W%R5V`@tn^~ zJg#kK%236I&^3BNE=TmOH*k(gsVtZNDRW5Mk!f?lEj&J@S$OY3GQ3_y6^ObyxVgTK zRo*06?9)JerLAM#f)AJ8S;&?2-sF{;4ob|+`%Dc#5LWQu&r#V!!;BDe~7>jS%CV8^sHR$ylQpr)kEK3G-f#I3pAit z7Z$MeYywYu<6UqPX=JIyy4>KQRpIugKEKBcfecHc%m+Q451fvQg$pcOTtQZ{zjL-+ zTz*LlUkc&4Q(%!Db`3}3j00ytcjWc07PvS-<(%MYy9L7YBPnq5dkJQEL5<25EZ5UJ za9`+Q5Fe0rbq%hLP(*Bfv&s4dJ0^L|Gu#{Xh1J}D zH<@%9uY-p!gINtIB1`>6!39Fs z_C*@}8qlvfscBZij7VI1oGdG8l{QoPJ9tfDH=Xa+h5eL&m2=@J%#1AhC?~MUFUQ~CgolF`neL8y3jZ^(1R~Q&H zJ>uHw0V6ySwwnu3<-EK|$@8@Rg=~q<{_%F-kd#P)WICgE;8&Uv2GCZ5w(;6a`mOF! z7Oz&yGh86niFj#ok8uWk3`r1RU(FgyMOdX`c4A1Dyzj(y0dJK3kjP*wgM`a;OLiGG zBy;{~y-64ASsbVrCYQ-IlngWC9w2x~f+KZ2T=WHK$6b;nkA*@ik?}kT!fCkR!f(ZZ z*+90~j-n&`@pzZG#(7Gg)%R!2`Qyc&;J^}8$y>t;i>oC!Q+C;cQ#s;$!py}YBEUBB zGI6y<*#AMh?a?sKB>GO?RAHjM^0`kq0(>H9^X)b z9QKOJv@EFB3(0aAEX>)8GJ-Xj;n_ZS|L9FJaDD$5GoUI(2O0fb+ajUmX&06)6|8tB zbRI^S0sg!;YX9b&5NefcD=5O7bh;7ae8vLpTsOu10kruHli zsaisyYN4P=Q|=*E$&k46L1x}K<2(oYeZ*5!_1*R@78E$V{kWGwrewYfzX?Suh>o|< zAy@hPbGR~0O377F-D145&x^qS)ws?Mc#uV+!}q9d@8}C2qk1fvP6rJ!5PXM1Fsc}L z0ULTV>dk14{ZN;)1S1=Q=~a+tNEGRIllser(wl4PBXCIus;oUbZex3L43hiEz?1#I zDiZ#ynEr~}a5Ll+EC2;(1p1{al+M>Y> z9?jRFLAoc6K?_eM!g)E(#(0CEw0(%A9X1d8G$2HW*N)-+KdRu^yaST-X4hR5(ATSQ z-%d@Fssc(5clT?rSuupG%d-uj-f`zRk5`wbOW)V$oB=Q`7Y#*sr{Tk@ z`eC+sc%>9#S~-N*%IFN{samZre12{KXFFJH8oa)vN&`K+zy>N4(Tin2p`L=b1|@*u zQw`if?C_o?q1*3K$z`|O!V}@WTgY2{kg_b_yUuj5IWQ1$Yap&7cs~a}APYSxGbA}c z*NPXNdY}tgn>9{)FO`5=K+c8e{r>=SgRdimYo`li0|R2c2L44g7y~O0df(jEC#5|n z417P5?{3~Lywu;v^pz%)Twnk_GZ_jY&Uy`Jde6yY4s>o36+0|eTTDE$47ozhjGqS! zS>DAQs8V>d);-spiQrU_0X6G(AgirkS%H7mp~C$MRu(r9ri#oO>vxui)b&dYS!7T5 zbEUR>gw-ZM!o7%3$)k;d@A?Zk(Zdoj@y^{}8Rlir1WM~ER5dE4#&45cMC}HzAr%`^ z#Fm&hn`KNv>!d2Y?^jg=RAXz>ku#tIg z>L~|WKLxh(TbVeA)@k$R7ci%UmGcsX%6tiZ(sEYz(dFs;236(`JPVMMDh?hVY->jV zM}Q}Vv2PK}I0tW9(VITMab7?#DB%Q%6tBl{S_$!6gEG=i6zz2!p}Swd^=;Gz@x&qUQc2R&y! zg&7ik?GGNN{4dpgbx>9NyEot_50XlVgtQ0>qJVTtsDN}y3W79%g0}m%;Xd40h(E4rL?|o01jPQJ z9HBRTe7Bo#q1o+6|LJeBPyb-4NOlaVU~$0E({7obO4A)<`oc-~UKfm_Ec60}z7q|E zEF@Nc;NeA9R@r z??quvcY{KgTmzft8jEpcC14E!a$dqnYt10)mPWOCY7~;;2!__k8W5*RE!=CGGzOq7 zukc>$mC2(p5{&-V-F5bnCuL=*f&>HTn~OSwFta^A9BIOkgTC8^qYY-!WB zhIssd>D;?leSu-gXfX7|y&7Dhh(mq~=sH>65;BTHaqMu>B4J+`&~Hl(!JPUq8pKRW zyc>~Q_7xxbY9g--84Q0OzOFJ{ zQ)PD-^bnjeIu4704pR68%C{rhNFPi#-A8`Enc0nW;V%3C%MHj=?xo^gr?< z(24M>vo?-k0+Y!(qT91Ma+wY9Oc6DRvS@7pZ!6>!RLm+5Jm|3+UB~2;7={-MJ%k~5 ze@EnT?Sq_8>`P9A^GyAb01=8(x~HGi`;$4@i9vzQo|O2I6_ATUSWDc>&+BFXIynf7 zwrLv)k+)5mp!F4;NDjYXjLDC>=XKn_bY?#Qa>!n*xiQY(zDqA}3{rRsYU-H^54LRS zgt%a^T3p65jlw4w*Tqym!ZB;o2nAJ?il|5`Z6;A-M}RBE<~i(=53A;amE6ogt1+JL5%45iJoOCL8haJFyvZ2o}3h3rr2M96K!yBw0LD?W9 zC4WU7B%V>BOM|{J;9(;?weVqXEMC9@WCLAPY+M%*5+*h?yWsMwTko*mCR5Z}GBA@C zH4{jv`Tza;2#=U1thHsd0y4CD*IXV8)ou`|vy!3zB46yH3%K-e-B3vGrEP_X`O|Ba zQ>cYRe@TR4zE}+JN_W&{{rxUU8}dyE&A16GP%O9Z`EnHywS9vx7qH}j3m4+Ud85N~ zfotKf7{^X%SG2lL$iewPMUoHC<2@1|D8Fq_MkmF5l?iE#UcBvt-~zYFVPG>^YzQBe z{98?wWC#JWEJC1Ko;Xa_+JC()HX%yJ0(W6}E?2ki(L!fR;3o-M=PdX&f2jZaiq7;O zl=H#Yw#ofq%`U##!mJCj@Lb5qbnXVGD4u zA5RTQ-xr(*L6Hgq=oZN#o6tU>`A+rr*W_2Br&mG80!nKPDfB}d7-@q~bZ>oO~?0666%~7@3SLX=CmL6V5*#s<%58O*QkA0vcLNJWe z){42m16Uq3;Ir8PZHNcSq{2XfQ32*T)QebgZx3Xh0Sk|8=mg-_NZs6 z2W5$cytEGhMsaqDu7*==K;YhU>T=0>rg&s`d5XAOaksS>3 zfRBTNmF^`7A%`U<`ySo8j9BGI#*_po`g!wxLLrNwyAwU~gf`|IP&o zpkIrm0`cBJ2Ff__d2wfet;>gbt^yX>S&!v0|Cr8EK9(L|K~dXlHi-xO8#S6KD7)_1 zPl)Au2c6sGingyeL$wQ9BR>0P*Ka!N;ClM+3&?IP?q5<=Q z`BgK%4JpaE=zN>oza^BHy$a=_bg#?wzg|I-P%XK)`*HM%mi;q@7-O zN0Y4&VpUH`hw`Y;JZN-AqkIbGOZ{1h-Pn9lBi{A3yvAd*q)*>)JaRHbeCS@H1X}ZS z60j~WIuzCXY@)lJEo!g~Sg00bc$VW!;J8+N4>o*bA;j(vm8ywiMtAp?d>^Bv8(_P6 zpy7)K<)IREXj9;biiQq>h$`p!IYR?LJ6Mr-4xY*_(MM$L6(f}D>?0(>ej-@BJpPRV zWP2!Uw{hpWgu!yPwDkJ2`LlxE_q0!mDYwVDYl+;=MhMPu0L*2B>uebq0gnZ!GIhJx zfJP-7rP&-Lv9cZ)xI`eT^)<7^q>-%iZuZkL}jWucKdh0|hlxWp>dhQah} z->8*-?XW(aVu2)un1s|t=n-x{ra*R}-$UITj7Rzf*DT5Z6pecz5f;D6nfUj$P86VY z9=6gC{(LUeO>`WYmhivF@qpI@)|7g(e|X1Jz{Zi%Dp~w}J-|}CGyCcjd+Bd+#4ZJz z{ym@IE7pSU*FLAt7M(_+5Vk1e(>iy|`@wurKi@d_5)SVdNI3S&8WdW@kj{xO^S}yW z@#r41fFlZ6^Cn&SbHqBB5C6aT|4f$&5#9>?COaVS4lJ;GkstS+>7?hgf5$dK0>i2X z;#|X?2F3ZU6Ao2->!W4O{d@Lf7+CoR1QVzLaIAm}_HKL(-tEVMOiGH-L3~Sb9f<)= z07!doiN?7NgVpn2bq#bq@!%v1Yx@@a-(pgSsyqe%HbgH&}2pkwa}SrgwwGaV}p=VKaJcnV2?oP#?-c#Ie{uWE&vm9}2bB~=IqZABq5m<^D1yW#9_#1XuT@z62uT%bME zN2|be3dhX{i;DI9|5ZDPJi;Ow=O%F=krPXnKH5*?YJH5 z7XeFx?U37r;S(6nUjvr-dVuoA36|SFtTz@_Q--PmZ^mOh^R>7Ree}l|7D6~R>3kwMwI`tZQ-~s zkgS?OAkm!L0Q375WNjDKx;4pTIU@dF7~7F_7yb#3PrJJDO4{#;}kdGab4IY8~l)&Z$ zL}GmuoNIG+i~<21=dXG3He{J^?MqI9xa@U3mCJ{^ ztq=#U>ApkiJzU};R9B8U>V;VRO z@I!t9BacZ51PRU$%k_vo@b}X=D!h<^0)mL_+eEe6zcIVz-!rfRlem8Zl?TrXL_LP8 zG+pLPkOAqktSVI|*ypu9fA{5^zx#5@`65-aEjy4sj^zXsxPI@Id($05)rSEV6+zc8 z)cFpgNMr$YFdu&FA}q2VVHI#sm}$Rt_0}_esUc+42bzh6tR&yFBZV)|BqXl z@&~@2w{Vus9ya})u^82xzbH+R-bmFb7cLc}Z+ZUW{kvTJ>T&UjRJSdUab+{}a6%na z(`C-W9h5HCxDa2K|IKN7)w9XHYGd7K$@}2bf$!+(>ejOFW9LrK&W$G<-kt89&Ykq> zB#sih%Yj@g@B{oaJ;HZzw8R6Nmyhj{dDtiQ{Z|bvEOPE18>8z6W*a5%HTh>UdQl)x zE?o6K<$wt4AA-HB%-{Gm^eTV5$yt|uar{sAsJAfM@AFn6*cn)FWCHBG z@GVel-iE-{>{{A@j9*_KRsq-leewjkyL3^m=UOb^~EIZcg zM&+?ennm{z%Ck?$dnaAcuf~KObHVJB%r~RpTookNv0haH5H(a664D+Ii1aIFj2{?q*Il8i^H|V`2T@<^=FiF1g+<4r(rk^Fg089hWw+VD z>FR3K`qRtDj)ZK?hf~6wb=cII>C7Vs~?tr(I|v4 zQ*2(^PSX-?JJf5E5#wmA)#cuLbZF^gO2g#N9?|>BEpUj^@e-)^;Af`lDjoj5eiUgL zq?U~(pHY7S{Th>`9AmhL#p%Nd2}j8;cQ+vln`rR}P>Eb?x=dky5RfwIWL1^8tjBfl>ctfW^KkXw4r%E}7jDzU3Z zAazp=ItI_z4xvIwY5|+u2$C!EcbH*Nl=v%^{-QnC*3-`v0PD$uGUe2FO|S(jS<9I; zjPRY=w1o+%2pbWSxf{YPEHY0^0EEfyvI3h`pO$U%(e<4VEK!zv>0gB2Qv(ar8h@Gv znzh(ZhMqiMovTKxYy`bUTiTZLq6RJ07;tdKW;oW5Dea;Nbg(Arg!4V0?fKveK^afI ze)uY~3cx-i#-JzM@ zHFq6D6^~Nx9vk_b1{v&t@;EGe*+6g>LkrOz<9^WyrSi5G!g+3=1$BDu}9o zmhw96*N^>AAequ!K^UdJebq&MpJCgRj^bNWlx14p%XRo_6%Ho;xLBjFE8{D-Q>V=n z12$h~U0+lEfjr<`vyefd0I?G#ADcl=!vg@2Hvc|=LG=Qgz@^*(T9K1?No_?CTgPR4 zW9b~2Itq{wbNf{LD4WIiA&jB-y5^l8(*f_-#wnBD8LM^SWz0~PIsh%oA z8LhlegHm~}?xeH!Kk0?gg{f4}#Tb|e^WG4%k3l@_4QLBvcnI6;)8m$5rfI$S$slvp z4AFTI&Y@x4TjI30{;BQh!R{@wpmW&MeUKwzZNDlQMF{+G?Uq}{QC&1u?tWMCRdYUj zSymMfNT=@ajC4)=O?{WUeN;!aZ@4_n(S5FQ+6r1JWwzS>Fahib6sa4*61!3m%i9W< z-l&csAFyd*J((n$@x9H-sKJ1yFYG09M74xJ?xMbMXY{~uIWhngaLLkK?;TbL3kk-D z&o(=-fphk@&`%XZZnkZv>W1H65~2wK9jx`rJwbI&{7S^ZMIoE|R}_?GAu$GmW} zy$5t}$q`Kt)wdDLMUdc#=b&`e^^?wX(14Ox`q|YDoqIpIQPj*pd6mQXYz6S-NWgJ) z`*F>#oX6U1db27k@5l5&$xD|o%jwcL_Q61-OkbByq%Ky7Q)V};H%G68-6yHqo$$4c z!k$j*8J2C9WlzQmM8hh=YK%LrSsDW}uU2UPT!@HlkFx7*k{DmGfccFFf#pbjIQ7K2 zGY0&gS742pf*9p!SZ@f$-`j;|Uwd1RKTebB{({K4FrDCV zNN$p*i%BU0dwOBsjIYWsk1b)iC$S{(ULm>kkPhs5Ww7S=k>U|y4wc@ewIDS z7)tmRK$*VbNyBCSx>;2tb~mXd9a4E0o`T?$MCOh&M5k0x*uo`mYHM%rcLQB?&nlR= zzHjlA4`s~2GvEFQHPq`K0QjfOL1i1T1~sKq{kj*OcX;*kT z`IXUD7+VTF(#as3X{NZ4!wV_|&CdE@(kPm0&>WsXU*|+V9E6>Rr^5?okiiMKJc{*i z<~~OW^g@EfwT$8Wddl6lHmKh*(Y1tdO@J_mq%b`vx>eIQhs&B zc_&)cy#2$6?p>xEXE@b8Jl-1GLsm_2^6_%*A0*dR^z|$*EdcLtj$tURK^(ybO#M# zk`#*J{REqs*w8l3GT`)GVtra2pTu2%F=@*9U`PK7(mIssHzNNFwWtId*l! z?#;sMul?r{+wg++i+7amiqKIVvoS}~HsY6DWSiD^U|+AfzQ|uu&C5#!hD(J^y8d#c z6J_r|?-XjhucN8PfZJZYu5aXi{StWoJ}O~d!QMBy7eOwXbBqZ@&1CI~GnWek2uV5$ z{p#-64? zJF8o6YCYF_b(?hkQ}t(6qWCFRByzTK`S`~9me>Ihhf~0`3@D!%_-Yo)j+xd7F|x(1 zHjoKLyv0q?CeXr@#8r-<33g9gifBs&76t(91$78C4|TJKz+la6MRCsJFa<_(K)FH z<6J=2UIbG}y-8r^9SK8_0$4lz7G3+{*`p;cjR<8>$naf-f z`vfTR`A>8(oAZ#2i{`&tBHTSX^j=`g_rz>>6{ID31h}uL29OLxCi?T$?)1f(>7<2j z_rAh~7Q`jj8%d;Y2r?@6Oqy?ksF#IQY%N-Jb1aa&J2F%_Bke$5`SJzFWUTpW_s+ z)1Atzw*>nBq&r;_2VOViuy3&loziWY69^EMt{hnxka*ok_z(3rS)7F1fe%SCRfH~h z;2yyhLeaYHt)$T%D<3Q+kT&%N|=nd$J4bhu>3H1 zS1s4Ap<3r>gUROxvf3f$9L=$gaN+yk>693JXn4Q9#T}pzq4#Gij;MHQ9d)i^49B*H z#*vwH{Hi1*(sVeK8*q1?b_mV54doi(1w4^zn^KQYH zG+(;xgYdW5zj1|v+vxolS8m&S0-mJWN+Nvvmj&yQ`#+`jpi-VKs9aHMr_-)@dh1&0 zxJT1sp{O!3Hm9qXD%umrdEm1+ttowJ_oJZzb1Areo*EXn4O0wW9_o7CJX>pO1gX3A zTdh1`885bT3H!B_GUpon&kw$nCw`8YdNc`t@X$3j!VxksEw$qj+)Sp8hJi-7u7^tc z+RV3KRZS$RNE2Vfq{H}rfpFqx!?Qr0HiACU98u$SKj*aLn`ca(KZuneWbFuHa4X_x zm>%n~4%Q_}RvK$;WEgNr2>gEZovawxSouETdF=D1*R8I@W(~chnD%nZsaf25M-GlE zx2b<{IBI~rn)SFH`Q9}DQN`;IX>a^4F6&=c5fIG~eH z(Misw@eu_qZgd2fVG%J99jO`waxO1aFn;TthVY2>vR>nT&dsq}jgxln5rPa|&X=)9 zKKzREG}Z`C`M!L;$%3DTelpM;myydR{zx0C=;C;ne@&uahthI$%vf~r+^nQD#mCDw zK9x0_g=j~+fNys=@xQS8j6>LN?VFj@xrq19p+ehJ&Fg}}b9=meqmi+{j*m5U z>4nkOE#XkM===0oPAdeQ6(=uuv`pe0=Xf|sLVI3TTW;(enVMRZ-{|^`t4E&vg)OJ> z<6H^*g?+~af_2t0XYje1eRlnslI`q#27R1lmfVK2PV_K#QAHij_7qZBTK{mXG*wpW zkImt{nJ;b|dhGs$lz{c)NpJD77G?kyq9xTRYxD2wWDo~iyj*Jjz~KB#Ck4Z{G{Sc- z@1OVWjaOmrw9p{_9mATZf;H{1BOgDu8GeJV=m#N5+j3>sgKvI$Dtu*1l5$V=)*FWq z=pmU;P>Vl%pU$q^_l;6WjQV}7nOXIm=Ly#jF&B!Er!c+lw$uCt2Gs7u>sF29{D0$Z ze^RDpL_MW7L+6J+uaztE%CkA(IbG)<5~p{$}ke(8BA}>YDAGe;CgO6*z4l zi}1hcJ*Q>hwfXZf+P?w2n}n)8&0XPqe;7|DNQdotc2$!v^KklRC6j=OdNYylZ`yAb zvA@CIb<|QlyDF8~Q_1326KNja@(zDRv6>tu@i#1OBrVjH{~$Dw4z-N(59DOFVh=XD zse#4jh*^Zjpn)y5HXhh1ZpinzGDewjCxh^U?H3K?)oU~R%-~f=Gb_7m6D5V4XeP&~ zVa)y4Gnz#KOzAT8@RSLp7TsU{DZ$tumW!+MsrbXDM`^QC7TiB@X0*Sq3Ak!u819 zWIQa2Bqy!5U_B5N8lzVC(N0yV}`& z2v`K{v_KuEHu9D3xaTR{5pM3t777B%TJUNFHs!8{T+ zI{pOzq)5m`Z_EKSQr}=ne?-BiqyS)WHjJi_b601hSPjBZj{-=!LZN_zVDfZ6fM+z$ zx$}~I+R*Y4NM|l>WMo%abetG2u7JRf+rOGdsS2l;&>jOFqp$&vQ?GM!vm>9{_T4Wg z^Ph{4U~!oQq?n)5GiCW4&dATJ=lP^tkkkcx=-2@I~YXqb9;bZoeAbhb(2<>*t>(m zjSQpWb9i>Zk5Ov3+zy*tY9XsAaE5(eWA2pzbw41vs&88Hi>;d&vLi5zJF zt3)Kld5uR!siHfW$%Mzes)KPR#eOk+<(W9u^W!?d(|nD>P;EA3B;~;1n#7(kF?2pk(8!JTcvZ4^ z6s%0j!q{G)JB22Rok0Vj$)Fkr7|8`V?cPew0>fdH3H4lKmw1N9?d6u=gr6GXMxU^z z&Hr

n2L|QNjuH0gY?``98dz!+rP4sz-~>n0h2UJ|yt@5G3@|T*xn29kD-R9|CCI9twHC4;H|uCd8~Rv$ z1i0gpqA{5ZL|$$I!iAh?9>Ym}j=j0pSuQTv4^>>h*3HW|X$1PVY;dwU0R*Q6?qQ6D zdxA}U_R*+2SIvxDYn4!7UZqVJ%iiTHaQnecp?sd#B-4k9_pvqzT46?A8mgI2vR>8V00Sy@-%Q0`L7Ra6 z((r}bZ1IWwl|DS#t(R%aLo=YMzMEson@yh2VC%I*7y1?M$%`p{$|4Mf<<@lJMiO$xC-czcN^$OG@a?3J(6b$buiqzR`N zdk7_ik1UJ>v>A_pU-wg@ZXTCDi@xnES-|_0k!>|O__lavyp=AG0Z>V+%sG2jyXC%R z@%l%&ts_b=x1`;KCv|V{LgiIBfde;k9AJRC8NqQ>`w;jl3jtVX5vsrP-BpNV+zh`c z3&mvnKg4F71ySRygix%BRf7K3OL#IB_t9Y5Npx}p03HqiG_->usp~%Bdy{*SJ(i`V zd|`5KqFt>J5;vc&)A;6A7sJen%RyQh+4l88JB=Y;09dSm#au*cY#HxanWfdI7uqVT z)v!czU%d}wdKlabCsrkIgUd)hA7Gv-GR zoj8S{4z4PdYf3tc4&3Ut`Xi;L!mjMtZojd6Md>lvr{j7vw~)9lQfNXsRd43;>{xPe zn0UWi{7|Pi_*@-;PnNxXeI0PR?EuAE!5%p{aWOIJEuSxa1fuzQ;4pX|uK`xtA#t+e z$tf%>95+Q-DUE|Im8u$`d{bubv(QiX^NkWeyU@NWe}%3y3@Ud2EtAND4#Cm(>G0qk z2b_6GoZA+uRV3+*xXU1_w=J;b5K?j;0?E|D^e85`olqdJ`*Rnr2Tgw;Y65~fr-k={zlyfOERWx(D8w-jvNrt5Zvf@F-*aRyT&H&wM4sOv8lGzq$i7_aN|&5s zMhmxh^_PglegVeNKCSZ$kn_3blSB-R>#&UVv`A-_l3PNn^<$l6MqKDYUGgZ`m7xQ` zOkqiN>E9w9`Pn7DWAl0^rnlUk^x15Txac;BmD0j0prYX^J83azNASWTaKV`5Srt5` zb74o4UCT3q9}BnQ&Rh{ap^7rAz9z+=u$5>3_f$}T34aRks0DIq;19X9bq`AmyVmsx-HtJ33JiH40FuiB z1<_X4y*Fp@surD_qlyljW##kOZj)w-lW9_cS-^rh0SNkI@t)w2L%m|Bu9IkL&dyXW t{`B9d77A&U7VZb{!qJ#((6j~HnNeK-%)Zb~CNyMLr_wfZ6Ib^eZ5npA9(WRnkv0@}@nx)!0 zf;6vg_@mLt5TeTB#2`4yzqU$=OGYp4&il*s(vl-A8W)XAhMxBQR#^XS*Y~7vrzzd4 z(rM_O@zCBorxj;c-pDVr1Wbgqs26`<2xQjoykxnG9fk7u&zDY|u_rRh~JfX_t#|MQt`Kc<G$S()49>g@OyT0UJI2b91^yU{%mO~_LA@D+atkfKeEk+0*|Ngl3r)sM6y?)go{-yGX8YgKBFP2-_ z2zgq|Qs%AtB|4S&di={1H6IH!_J04!E_5skC-eLKima-1 zjFnr*=Weu9K9y%478= z{WzJCo5a_gWBKico}t?o2MZ}rb96qK$ua2^3I!E#iMefviyqDqy)&pOqm7``EYOJI zG8VP|QI`9Ayh@pjtK#v9mRQ5=oAZ;rm>T6bq8^E6WS762tUR_@`AGPrjxp!Ft!n*z z)%aZP+)B`CLF1ggT6_AuSvaZx*Oxqe!Og~u)tRx}U{+c`@6#i9Ny*d3lP&qC#ax-_ zdsKa~%#jYBFs}5$cj}ZQE5bXD3*E`>H4PrSYKyrF$ph*I8mtv-&;P(q2;1&U6`W;N z$q+B9=dp~S3NdyMi4-F&WV2K4K&CERhyIG?1J ztOi@cei30-PQTR~{#2im?6nq!fZgvZj-O<&`5(WHuZ*2a#uT;mic) z$D3bhC>IYuMyyXYl`M>!_?^KUyxu2nvnMZ!m?>5}j_1C{+E8vw7iyOzNWCIuWgqVC z_+>Ire(O=x$Y$Q(nwI=f_jw_toDj@C*~x5^`K}IxGEcihZ^>{?ulFW9Cz??RaH7YiU^o z)!ny81Jf-5maD_>ZM;d8u~Y9j+%x&QWKryNZ~W*JzLWDmqt6k2D z`e%P$ZyhMSz9sttkCKV2>7;Corl8StcSW=R^e8vcNUfgJpqlpkTSfIJw2^lAJ97Gh zRHE>PMRe#s2fwQomqZ)Vrr9@S$_X?1JG}=AX+oMWG1spbqrZXuR^WBKzn-XVN~N>>#O9-C*BSn z&bFJ|KU{o6c}yehHZ7aTnMT3$srA9pcApqt7yd9W$L%x|mq*FJOLGFEF)bH6qVLD! zb{!7n%IjV4YxFu6E~SfB=1y>K^gIl6DluxXnfv(U2d{Df2A=TKhTQ~H-Q;9EDxtwU z`;!gNF+TEIc3wLsvXRB?YJMWyw9$(D;I6omlaS9@J+u4P+=?5_X-}}Q$n!moW7CH0 zGi>X}C6^T`&D+CxEcD7OUM`1x$-XH+xErf1x+(M`TxEAYTRM`0w?%ET+97)}QtV7+ zetoQ>%W1xogiE*abWeZwL?Qr#{L8OT#AKf}jp@z5%XxNj@Ap-o<*6!o9(jL_VI;wH z+t?6$OEhY&e0^-I+3yne%6$jjftEAnQ5WNHyH49Ne&!Na`Zf-57UaB$9+XkzpFKU} zif7Z5+qmm>RL-GOD*kM3f;C0psTL`5Z|kE$V~?GF>F}SWg9I+&hYa1?H%zHWvDA8A z^P_L83Q1JLeMxD#box@aoe_VA}MGLJBnvje{i<_=DefQb{x@S5^~?|Wb?~VwpLO}Uku|b zQu=9LQH7rE-+n8rB^hmT1ls2>m8ZU(QwmG#Jv)h94y-0?3tDpbaHH7pAr3v3GH@wd zg*tW_+NZ9KE@?k3ab3*-@%4}L62 zyh&ix@FEZR2D@7>Pbn>otjNS9Xqx||`3l!noBpgI($DK~wO)K1+Qw5(rD;jLzgEOH zmybQfFDG+{Y$`5zC2|?>;n02ji2qrWxo!=&ao1_J(#Lj2i{kbmrBlD#G8*x%2UQ`% z?ZP+DtdS8`4l5_eVYW=}Vb`zDc=iuUpHtJ*SUF)oe>EpwTxTS|rivNcy}OmB{Uw|- zL4mgG&Q*D*ngtJ&s2m~;ZNIId#iWv<f~O%-RCQ5eeQM~V&2@q8bUU1+j+v=u<~EE-7+j3klMt zanB4J&yH4Cm`=O-`tqd}c0z=Um8fMHgwwOmRX07PCnQ~jJP%3Go z`thjIVLF<=ewi&P&?9-92mf}$P5p<$S>{)$ahQy~A{sZ%$A#@j8=hCqcn>c!J;PqL zZ}vr9QDvIrH*3Q(mqRJ}Flas79`2!elVJLLp*Gjy?~i?hJ1^2~ZK*pDTioJU+wP-R zER99oHZpJ`B*jVnt5weNC~vc9?XC=|D`e<&d&<IV7TaE1K9|P_pjO0PE>Y?Uw)x zs^Xn=@1Fl%N~0@j+y|*V<}W6RxywJ|laph9FdOl@5t3!#fD>Qd)AJ-<`Llk^j-tav zwL?~Xq;5@nm0LAtv`O;*Qvdy*gBcl{d)$Uvp4$rDho#S=RPrE%cP_s1;S8~e>{49T zf7^>mO1$tOGs-l`EF=57Q=dql_H0Gq=eOU*&NlJ+F>&UfM$`^}A*%CS$_ySX$4H-- z^1n-@MMp?Cv@5)WFLsjgR&ts#Nz|)WZ6Tj8%XKqMIK~hzKPSTrN@9BHi0i7BI;Yr{ z#_fe7GnV%(L>JU}xWX5sTBPtDdEzrMpZd*(aeWs*)cJ$&LJpUGt>Z=u?oJz#GS=I1 z?$S@^-H>jwB1~0cj`2lKTmEF&+Uk`h6S0PH@F6QU^-Z!ukaF&!N>ZK>* zx|+f~*S_69y1p)G{Tu&*IsUr92AZb96Q{f^4YJwHRvVC#Ke?fpeM?arq${t-esrr%Wu!y^47DBD{RMa(^f&T<-W0omiB8r*#G6)mA6XIev&zhOw{Kv z+HN1Ep@Nncy7t= zJ}5leU1etIk~9pcZNagbYHYCRN>HrX-PB^Qo^`&e!@aKEenN}(!o)9u(@?Kr7pK^3 z&>D($qo+NgCC!g8=fdl0aktRLBy}(;g^8zld2;=%;-XCyo6}w)3aRa$xk+q16l}Xm zJB_I&@|L@sVCGo`|5hMJshsL0eWdU&5{VMT_BQjN7kQsKJq0!OH8X-4wuyt2!|m{9p8Ds>FA*}$A_zC*(vtVq zvg2O{;sxL9e7LvK?=LR#*uJ5q0k`lq@(`-Ohoq@rZpRHwmZ9}Sa5uf|P!r~KIz4jP zJ-E6+$}<(}sxuozY#+cEje=brjIxfqSHXYN`dEjT`5(|+8jq4)XZ!hUw~Q|W`PVFp zrZKSh!9wXDkZi(^%4V(az{~gV@sTL;WP%%`fNubfapN@D!Qe1urQY)4Oc#HIb6 zKH36o6_~CCQJ-bPV!n$5qv5f7iw@pGlmN zYN)5H^I~o#dEsaoJCRPMze{m-2xdCF)?HWd;%FJ<(O=(7|B(H=@L8`>;+-`FxY(sH zj{XWq)7R{>+`YIA4di94ELhH8Y!kX(fOWEOL>piNrB(*t(SOfV zPQ=8gcH6WY%#S|eK25vpI(SBA?5S$|M&$YMYQ4%6&-2s$GWYET6^kC>)2r9`ZQ^Xk z;oIb0fLY{UTqe(P+x)dv)pV+etj7*&V(RFUn?Lr67LFa)ET(^aPjPnU3dLk`XN}vY zS?WBn1mjBq3ujApqRvYy@rg~1ubiOpV-$3pi$ZRTh2FGP&EoZjp4E(S%9(nrF_y~5 zWpc|oukWEYou3`^J{je132x5J>38=zKXv_4q+L5Zai9Hw+7Ck+}vL3lzY^u z$-9A~sKl^NODSF0y4>p?>gZ;Z{s%LuuIJy7n96m1GX9qJfZI#!wYobSkTg4?D4Ux) zKdU;T67|%y#W(@< zMhQ%L@|hGWrrcKSO%TLHpS_R5hHc#%Wgc7fat_dcVZ1{ z9HsEq&JJert;Z|hUl(#_SqpP}F^g^T4P9!u>Z$SW`E39fl3h=}oUbvz@ig0!*tx%5 zV%e1-Cy~gZtLCw@G{aa@v;ONf0BtRIpW*lV%dfX)hmvxhk%IqV%2zBOHFZvh3u1x5P&lD2D*T3e!(7 z2C}4ZYh2gUx2_{xq7|7p)2)d*u3FAsQ{0Xqj^inVBtLCsZTKjW`WniT8re-1OA>#{m*Q_Nym>#X+ip`za_ zg*>S3Wsr!SX`z>=3f5^`?1(#2Rwl#e{Hz_1@KiRh;rYH?-LpS&g~X(|b_ei%&F{=d z*Bio=eI$(UjU!s?1^=I^DLj{!ho%G?<4CLlR<$rF&`rnQ{XRTbk#eE zNJoJ!Yf!?g^zkqxZlQei(d&3m7SJT(JUIUxNWD|G58~TZ8>Q3dL?d+Q+fBIgbwEuN z{JgrZQmA$FN2%%kREEB^yUey@<*NH1zQ!`k|0uJZt#9{4TT_-<5;#*Ubr~F?7Ic&x zt9n|pW=+obkl5fHur7Oz&0v0}GSSrYx8q02sI8gou&R34X6YkrH|}8J>}Lj3mkIUU zdEukRqRZksae^dsD#B~#R)z|3&pvcxZ>QX$=^~(ifMu|ewC;I!xMY=1+(hBGy3+;iDDwEfE*VWP0wTs7oP_LsEJ)F0xFoQY2qc)gk?bI) zx;U2GcEjRf*AK6j7D{Bs%iZzP}j`B6;Yoyd96>1D6dV_ zh(KW2GpM$2VZS?d>??Y3yxznfVUnkwacR?Nq%Ld+ws2k)-xWz$OePdI`-w?Y$-aea*(?Dk$ zgP&RFR%tOQr$K(v!)+d&)dhqr8R5jVLN9X$y$yu$w}GDrF^Wn6!9K^vFQmX;dzcfr zN2b%appkhGz2fDmeZ|TSgy#ZHoe>%P$HjUTa=JqHt|{Lkn!C;uAi3JOS0kR?c&9{@ zc#_XPeMjX&C;W9q59+@$S^XamIiJ0!uce?SPn*7Ze{0ufX?6pRZkoht@fGRKP?G-l zeV-g#1F<`Wf`cMxIP`UT?LX0nQ{C0#mQGCy%rm`ef*VOV@lz;MX@dnLW#U_(zh!jX zBI6$?g}1L~btS4pukHj`W&e>$I3c$utBP-5A{24!7A+*gZ5ZFwNKp)6=iF`7=Q zs6|*w$l+IDritm*gUWF22R?W^Jpo?V7=d{v-ch|g$c+~}8kk4*Ew5+0S4bH#x8j|@ zkFIw#%t&#pn^Ak$y2(85mOoQQ4nDOoiyH=yO6wAZmcYWFUvf#tlC7y*m^7YOH=M(S zdstPNuMihKY)n{{RTdZX&V9<8wC}Z;<~q2&d-OrDjrkE{{y2Z;DdV>cUe1!J%AHG6 zD67@D-6bjN<@?H)%K(oQ6ok2(`d|kX{TZ(+bl3LzLiAA?zsz&{+o|Nb^b^#Dt{DQq zJkDY_3IlaHYyICvH7XZ2;u+h<HcHo!>o%*%p zDAG>OPn*t}12FLufQHlM9ikTtYqaW1w{_>le}IWP!ENeJ*GaKvsYAS^Um9cVwW~SL zc~iSMHFQE61rP19Gmfi|Uzkjz>VzJ(h+AOdS4C`fl?~sPmHR4bPg}*QCESu)#qEh> z(zU)B5qO2Kqe!n;nZLBEBGA|yR9Ak7qJDR)ypw)ZXhni1j2y1-6F|$uyKP=q7^bf= zhP%JHasNffQh&ClGlPM6BenpaF!RgaP%E5SIeYz<*M3{U`s4dIEkion^QoK?+$5Pq zWzRpgEmEXYdY~maeJV#}J?@{hC%Z2}kAZ5Z=HwrYE~_t-`I~FOan}QsDNW-SQds1k z$HeJ1QmtKH6LIB*l>2DiKaQB(9$dw4GHF307qCmEh_Wuk$H9tJT%KF!|InDaTeGSA z>wR#NSi2`LhR2K>*ZoqLz~}&>wb2jsTJhY?{nXhym^GiG5!Z?CV7LlQGQ4oVFWgl7 zeBX}C#7!7AvSRwjL*X;TW0qos00Wxh#*^HVp>WD+{ih9#d{(`ekAf~OY?ZU~eS0+I z$vJXg86}ilpa+n4fuLT!5veRDRi<$=5jBtd{!iB-&Qlo;mg847PZ}cpSSF>zYpfB( z$={*W%`_rX7N2`c1ByV3~cFgDbmB`5m!wn>I?3xoz5HESR+n>rQ(N#_f8C z%TB%5WIy!;C8AE#5U#IE*^?RQy7Be3y(9{F8`givKrN&Z*qZF4FTp89X=L>3hzte` z3%r`Bt5KC6yEeOFMdKXl8I&yxM48`qQW-f^-0qv)pk2Bu2XijDL!XJ?QYIdCZDKMc z|8pu;5qCBEW){JA7yZ2rD`z8@~u72eSVh?JQ^S-FNW6v9RkE|H$mzm1iE~6;%L-$T!@!atMJo z9-QAc4}M1~Q}LL5_QL0~^mhn2$CT_|ZHy4V^R|O_`kFjN^>lh5I%;n4Bk2j}OdV5f zbB*x*yYYD~i*=<}iy=^@pS#$5S=KIO~Y#n}dteXV79fSQl z3=iQ?`$Bfi=_py|yO`J}E;HfA)tkShXiMcB)CaHy=9of64Q9^G?KWKnJ1kIA2W5%XXmk^#M-$omte z5x4)|Ck^yCUh2ZO$3dHqDBs?(KmTTDmZl9?zFRMV@w}D>LoZ8gEdH0e^bVy$wlC_L zwEcS97m?Bk;y2Ip4Y&B-1QN)+V6Gx^WQ|it<5HAyD6VDF8@)m!Y9RG%w(y}sv^4GL z9`0U!2mRF=!dYxg1@cEDjm6mM8Gf#)=~#C~wX(JqyJJqjyiU*NuzsxS9(Ms6uc2*_ zPV;DX-%lYjyB)PMQu1`N#|4wfelWE>Kv4A-5*&tHLvz!=My)C3doz9Ng;cnpjqoxW zx~(^nZktADuD_aWUHOczEg`Mn5+e#(*_jG1n!{$oU15m;6g^3|;MwR8OSzPjuT^D( z6Xo^pm;dVp5RgY=UcV?Jaf2@QlKL#~8(d-NfpI8{Irl>olP?f%lz1y(TIN)$5@1V^ zs=i+o@CR2|jUHZrSaCFLW^u+e`)Bnr|L_g>fPWCmaZ48bhmT-L1svP@V^i+$*HH{-NIYg(~pIzBbm3@ zf3;GCUE{gue@bI@x2`l`RAc^Nhc6{GEdNQ2JE0pU`lyU7QV^jLdpek}niIkSB*Uv~ zx|gtP&A(hZ+;2LkTC#6jk8JZMF<#=g8I1DSUC}in{qyIE?jh}!+RQfyzm}~ylcQuy z3{_9=mIP-8R)Vnm#YPPjB%xd}M|5YK8?T1jymy;!QvUgqI(pXS9i!vF)|l=zux95o zoc?$6np@z~sV43ahhMz>2`_*CJS!5pU}gefCGJ)`uuxpQtb>?E_qKX`9RS6+XC1VGsk?&pCwQGy5^1kLWep_wKryJOVkhx`x4Qg^gm@l*H zqjph*vT+Wiw1G-neSUEs-US@wcqMt@eqgYfc=l(E)%BLaz)=+(A0>AwSJ1Q-p-CNA z*o1h@4^_M4TnB-lneAw4X4x+uvdd(rAm_%{oq)2x)r!m20gz`NfYCsWla+3@eP$C! z!=7Q?vzsRADn}icJVZ1x0TPpqO%aqKl0ox$-++gSMhE??A3 z3}9?fYxHzSIwb%#OCiacNa3vzS|0|Te(*S4iOc=q1GWLw?Lg1P-Zb^$qm}?n%ejtd zw9jc8%b+F`vaRG~^*O?R6sKk6VZieXruL8lx_e&J4fv<}%0Hvm#JuYrDLw{(M1eZu$ zh1jESw2Z4zTC+geC}2fWxr-FsVwn^r@i|(xxN+%_5v~dATTH}OvG3u}U!Py$5m>4XjB){C zyfcWJh=?B04=;7yfFpVG3sa>2E~olE>&m4kq!MThS6@MF1_RKKI@c1Rhw+Or*BU5e znfHSkypDD{=dY068IHax9Bl4pBxJA*?9V+ZD$X&EV4#u{;YQ{nu%kp=tq3=%1Sf}l zy0CkW<9w%DiIE7nkU~Pw+C4V`H*1QMEz}fhy)P&ZGE2K<9n(A%v9vW*s9l)<hCI^vOPT}HI76rue!V84U;u|7N8M*W!eAm{F1+B-1D_c3+L5&S-Sf2%?! z{l=(yB)0$8tTaC2UEtrc(`O>~YF`vraa+OinqXBwkcCaE)-c9B0I$*XLo_`J z`qsNrp~Q9%T52I&2KvE@UZedOvP5g5_026$@M3&OE;k>W?>wJY9G!}!r$a7Eyo~?| z+-j!m<{2h<&+ZpTBtk|Ug7z>&H3O;`B0u9)e1;Q-TMEZrp|l|-eu?NVK@FEYWaYz- z61PCozrXjgcWy9zt9N&r75RCC=_Bn+%VQOVVUz-#MllAp z&a6g@%ySk_s@f` z&hIRLe{n4spGGTT6)5j8uW$Sifg~6f23nK74y@~=bgiTfVR$XQp0ixt9*x`mMN>AW()?{AG zm@KJRod7#bJ3c(>r;9fRf<*HSLJrv=eX(%W(OT0NIF!Xs%N0`Z@UReMd;_ltBa+e5s&0G)v{c#S z5za#(!Ym-I^7@>4)_`;8){{|{bhlsF{K0tWLT(!-F4sp48$2{Qjp|t-Q^f)M*$J93 zViCc1X~dw>Q#ajfPuKcqZH3;OyROAMD?{?$N6XB)Dw%Pa2M&|zBF`-#o|ORr>=KTo z5i6d1^8Iai4CW#|z6cgJLtgRS#J?+Phg?Y}>h`US`YY7J`9-G0xQzQhtlqG`;>$F< zOeLgY(twl_b#t1|jtV!micv3N$P{S2%YjUZWC8t#-V=4U*Si5xo(llPap~I)ua5OC zz%``RO+0TRgn9bvK?b!{72ElCe+&4}F7VX6!@#y?g= zW}ia`@|0>&txZ?uJB7CCB#~5j;npm=byt)IdH_pVQ zkc8lB9Gw)7`^L22rp*dl?TS^3{b5cAXb34BdR6${uJ`o>2)pw%NPt z&lBWd)_ESXcbi#fq4Z3J%MAgveHQWWP!e{Ar<3*V@1SfkL3ip~KnV7XypEKb6~d4) zdDZe6=st7@Y_LUX-O`G8q4R?f#t0$oS{hEei)+uxsEsCVCf_%)I1 z4Gv0*pwnANKj1?3d&pNOOjtkN#0z>F|N547RuP|$g~|cY%W6(dkmf$rDp28SV4#g= zY=HKmZuy=*r0D5XqrbAWnGez@diVM;-$IY;@6j8e%T#oK1ev2ibc0)5sXH=~T0~FC zWra8|wcia5ZHt?$3F=Tcv2?Odye$K5_1RDT`Cqa;VHt!9^eYsD zah7-jw+%8v7KYzJR`2XQI+%^z|#6<0$XgI&=tks5CQEjG=UBSl`V57BztY+mu)Yjik{WuKM}|o9KPrYLokK!H3ixlkg&=#Qm|w zC1#~=C?N0UsB3U9zs&sdShg7-^?kO;Ro2Gq-C&dX}@@?+>zr7t7eEpEy*`yrOro|$B;D=RgK_pwNbSmVN? z-$vw{h1?3Xe*al`KZL>mU;ut?{~}J& zO>!Pg!VqrwZGvGFVu3Pji+?dEAu_FtdL8ATLJm#@_2lqW3hMMus7B@hupJSbyB}yw7OR=pgt z%*tAe{Exngmsxf(f$ulY`ukh*MdUpMv55J{N2^2t0`h<&Ea58rJ*Uyd1%+CWpp#|X zIGs9D8tLc(A{VJ4%L0M%SI>J5(7XdmryOtt+xTW}_KoflJ1@lbAcw_;{oky_-mm#$Eg+I1aSfGz%C& zA=Mn=GOE{MT?5~NELZ^>w!+q5XbNg=WnSl_xh&^AR`34NXg&t<1PCVEyJ`<*(1sBv znyqrT&Zk2w?^f6h$(g*I4HmSHyKCNl*^i%^rKRD@D-Xb=F+wgj5v#s}pa|_=ZzwyMNpRJ5kJk>#A6@B-%5ihbNY4 zn+_F|p!viO@cb+z0kIHaoIO&^p)1Ht&CG`xrR-|JBXa{OnbCdg+@%-H>dH04(TNuj z)!{EhbzB|3nOl0-WhG}~7W6!=?THqxHaQIB)z>-9zF;%j-i$}*RaZS$o2jINSXdcA zw@vHELjNsCmWTvh^x1D6zt$ka_UpSzJm!O*JJ41VKlJ?k%uBb{`Q4L=YE^>fW|XyE z&`%4dKfvzo0z>r>PoZ!Xlpb*t|ADL{xBi8!6xN?!;2~?fLYFBqt&7WlN`6*Zk@a?U zoQ7&m{=dS})z1j-#nAs}F!qu72PH7FPuoa4AA%66sd4*?-uz1wAw)*zWfu3i0AHRW zdY9z^sY&SQID}GQ=yp1*G;MN|1!DkmM;@|&nG%II2aRej9z=}$j)kI`qr*YPr(pa< zq&K0|^wV`t*3YjP(0*&5kLZP9e96{43gS3-Ww`Zt%KP~J?}-}qN%zIHZ^Tz44NhyC zXHdU64gO}{^!=)CPLRP!g^TTqEI`vx7Czr~UYge7u~xlXX-%iZ&9)r!m={L@jlq}f zV>90RTn-6;`dur!{}$8fctK zuh&|GWr;vH?Df!|E&4n21L;QW5l1>8Y zqV$!oH+sI|ArB4VH;AbG*qq25LyL;oa94cbz>IR83p*6W_#q)NQ~F;w+ZlG?Jqi5= z+RshI6O=Y+04-x_d`?u=@|37nvg)_;82k%XiL2p`abErl%#yG7vu$TB4x zK)44MOtB3J@SYHqb^I}5$c?%3g0K(PnHDve-~brfIb;$I{^Ii=mi7}v_!9?c%ZbY& zfpe>!aHRfo?te*IcCd#}%PT@4js`}y+vyt;0YtX zsi(n>@(ueCnLS0kHU0tZLV;Y)(9@y}+$b}ca$_Jtb^)CICH!`KNZzLmgNZY0g(c|h;JGatPYm!~PBSN`Y**b<^ZD(-|z!KKpFP)#1IDPT>$q*78{9q?#B04KY$yLA0=7fX*$@Shf*y^ zhu`IVdhr?^x!Zlc5CE|mfzH(cUiZ`MR6xmdJt-qBInt5TompqdHa5s_a))mri?V4I zu>iNIy6AJdJAzht(jzcMd_CYE(tuKy4=MD98~Or}z=I!PmgNETSpuPALw)_}FMms~ zjcEzsZgR>TRqxDUJ9l60wUX)zExQ!|vg*0WRtLR*EqzNU_!cXbl|Bd%=|zqT2KnH} zJ0B!}{L3%N+(NA`oH3dNs`GX53x3?HB0&-k9TnSqrlhQDZJsi=un`RGsU{W{c7XGf z9WK(H|A!NL>0Vhhc5Gwlg0wvQO+C+OW#mTg8+);9=!VT~`KWYYNW6*~ggD zWDfcEHkoD7W8KWaOYy+jjOnb|RyTv;i2ZBqc}b5u@X7Og((OV^U2MvTDf9wNiy=pH z{}=8-3C>A=AMYTe3YLH$1cOdUq#7vXao390!EA;b$F|^GVo*c(#{1|UlBz(DHnkIk zfVIw#e)bcByet?6bLq z_$Y5W|K`oo(vS659tJEKNJ4Qwwto zsw$Ij$1kW&SIQ0dMz03r>@Gtzc7 zU5#=glcvx;(#kw<>}6*A54F?7PjF4#&^AD_orz%!Dr;C;Q!3E1toau`VFH@EgK~kq zA+9r!pgwSACUH-Y{~ME|9-+A*I9?OoTz+I{ID8=k(q;jml6Kx!bwjQ=t=}Ugfa`hR zRr^oUx&>zpu@l9)i0W5+khrqOMOWbB=n&-5{XNn%7l|n=8JX0pI9DJ1{k^OGa5R1G zA&c*CvfA&gOjZ)C!B>{XfW#5>3FvlIfSfAtV?;1J&N^nRUn_=V2U;x zLbeZ$`7HKQ@svDIYr}&Dkc2Byx^?fNI9k8#Gyushpn&8cbX$VEqhD8cI23VR3Fcx3 zPjXX+_8k_Ig-4o`-QjeWP^yDqwVWaOqtUAlv@_{4i?4J@SP1X|w=vQHY->oqvh&h7 zl79kJd(C~gKvNzZv9?c~f5ZNBIUZupj3k8_XYsGguFN2dQ3{G z*R1@$MA9U}7L@~Q?;O+>NamKD$1D)3s{#o}2ev+K_aA)2#GBmIAKo02L3}WXjfsOkq}UyqJ;#D&>G* zkAYN$-K!kW7OzpHqpI6gngM5KqZF{y(AtG@L4!8uUjjFtT^kvdk*?jZ2{%(T_kGVU#UDUlG99bkY49KyQHyv1N#zx4UvS3@Q?`^rw@f#e> za?sg^xP+oJSX#ucUCe=Ol|@R;$d37v)oLhC#a#uCK_XTXXI}!J{Eu|kJG_CE9&lDz z20~!FH8x+pe5tzKrNt}$jz+{|a5WB8WElYPnzs%BlW@UVHTr)+g%A(MYcJ9wHW-y`mlhOVrj*1Q#-_GyeO>m@du7W7~d#cG;<%{?`;4hK9wjZN6 zgm-&(mUMf?`a zBkq<7zKQWhY%NE?jTS%?HwK5<>U1X=KZv_MF{jcA9KV)WYT)YTBQlOhIbUde40=>& zg@Jwa8%3zKPkt7GTWgc?>P;MqU4Uh-%`2a7z9*v2zQ<-%U#(W|Ax69oNo)7*2rt;G z9k&-0&5dE}FsS9BhsoIo!4?EQ5^IL{vFp_kCiFiMq~yi=L zV?czlD!-H)0OfQx2KJpmnDP4*{$`T+sB9}s*7C!Fh!~`pr&fj16)A_Nrz&kZ zufqyc`mankcNeEO-DqDfR2G}RPsaFvg;A@dt#Vn_vL48J z2_pJ^Xi;W>PU31X?+;Y}0)OBNUm&teb&v7cJhX7I^})tvxXo@2{U7jr2e$r0Nk@zW zw0^MrmK1OUh(|u`LEGio`s7Vyh8+6>VGd|y9LOvvH$T|V+_MJT0g^U@(w7MyY!L-f zPafo93+Ts3E&gSfN1*fZVYu-Agp(Xck@=9h6BN*S7 zM?YkLP%f$8Y^UV)*m>0OF2O!|ZLC5bq5$UZ*H);8o>T2t`9(HoUyiGAT{nXEfdCG@ z@{T(sodrO&Ii4Ii=+-@Zul81Duyk$n_aFGe&>@snT9&PflhA_UzTU7uh`BKHHW-su z1-$1mjx#jSTA-Wgw-sa-ppDwO`QOYU(SP8%B5{m3mLV-jY>EgV?Fbi!hni%sV6R`o zV1&*h?GcQECQWy(T>-?=V{`@Bbu7TmsRfX*EC6L$=yLhGk^4N!XR1pX;$J72(b6v9 z=2baJ?{xktJRFi~$j1mk&qE?Sx@6TbL0)G9NpnK4K6}?D_}nXmjcI-l6(*Kdnht3d zYAJ#&mV?hKPaR4*%(L(*S_{wznAj8k4^m<-@l0(H<2aObvY_=*m}o$YXh+|a9B4*y zQh1isEK^7!2rBTn&))wc6q%mGWkKT(q!yP9>4ieP`I4W|yIBK_;*#NFI&fMHEC`A17+sf zg6pn}RZp2py@57+9AcIXE^Ybh>Gx`I`wf{Edd{?`^FL0Y;AjrzgbtbRWWFyQ@aU3q z;Cfv%luD~JN4>hf++N9zZ93AAw_?oeRp+|#SV1AobL%T}==Zzp_1PGFCKy3fPwq`+ zWL-%h?Sm4nG{v_tzFg~@{g2n`@Z5mGlU306y6c9HsvTzIG_e@%;!R%Cn|kXpS0@E1 zmWCl8yy90;NZ-KYiuagm{0P%^7t--y{p|&ho@FR=7J776;kgCs$3IVAa)CBjksph$k0<6bXi>yuM*qSiTw2VTToZ#vm} zWfp|m3X>sR{um&f1GLFT%bK1%g(u_0wYD_k ziynxxD!&iB#7|u0fMD-Q6;$u}(Th|k{V;^4T*W5(u#5uAp2O`qWD2^eS$npm%9%=Q z(teP^P5nw@mKNAzZ1U9G<1Kn&T8C!E6w@vjkB;0V% zsy3T7JNkRSSqFB+-I;Hv&y}|p`Ll;^|AlOTz-vgtKGDN#94h@|_B4#Cx{z0rsUNO75_z!(AG#is< zAG8T|wq#tgyb1jK`_(5`ck$3eq|-7=fql%FYw;AqV77k@s*;As{@Q!*BOxF8i{ay5 z!jN>Mzp;e3y*uVK{oIawTw}0B<(DAT5zmNZ7B4(H z%3_*J+^uh5F(M?&kbEx>$=HAXMJkxIPpJOjg^VE+9f#3>7hHNvx9K}_F zXn85B&Nbpw_s8hrjctGV$V{ebHb%T8jls+{wf+<_66c-Dn~xu$DKSn9F^0d$$a-eu z>RfD~@vYaEQtkm-ze01o90i`76jjg9vB_FhiSe%38psL=W!T3QA^G_M>nwI6u{dMz zZ}xe_`to5_>&a$gmuEeD;G}|+NARr##pSg@9MaZBg)k_|>F-tt9dns!4H|%EIT!jVV4kjnLC5QLDX4mYZv0WS9jd-#fywVd`tvnG zM$%y(dnDy{3wAMNZYJoNA^m-hq$a;Bi@Cf$_&aa&069;ceWB;8v#_L*4f&KP2rcsO z)N*s|XIi($9+zNqd<3Q6&5+-+6PV$g5R2|4Riv;5rkhw`|Jh$1K(AbT%~)9wI)q>? zB*gkpU6RT{2YoOqmja;Gxf77W;El_q;3%R6K_(Uoq)zCS3zN@y(g}nQc<-X1*p{co zr74^5PFAmVUFQT^BmvT5p+rcNr>WuI|Cz(oNY2OX^nkX9T)UsOThQjz37R6_D`zlX zAt`W(x3A(@RPX(->b^Uk%f9cMpFNVj_g>keNcP@QRz}F?M~F~<_Ff@Mg~$$tl#!KP zl$}k=3`N7J=X2;hulu~N`?~Juy6@NPc|Ff_{&$|8bo`FraeTk;&wG74li4bh%tvNR z<*8jwZ{S44m=qf-_29=dgrBH+1^1=^^fw8p=0Z5c0ss(cf~JBXmnDDURr0Mm`2TNxCYbt*J{h9)m0ld}8J0*s`VKxFZpJ=hB0qy7L+ z!ltDC$@*)%rGhw)8`BLJPP&h?!+0p6ANe?p5@|Fmha9fJIeu4uX89LE(D3E=6MU_v z+31@pZyLYN1cf#J1*hyH5y<}nr{LmH@T-to1L)$VuTk`TKLNa}sX+jn7(Zh3dVbRI zu%h=#=?jiQ8zI~0-izwsYt3XVM?jhJGatuVAQ`=W9DEr_)DbIg!zu!Lv{RuxYd>NP z+Y@2n6|>-#`Q;}W6u;&=*JsmjccYvD-8*67J{ z3;q~*tX5Qd)1numK6e98{qDu3m&96kPuG&tiz%9i0uy`-_-MhxdYC{Rd+OZA^o<|t z3ef*|5DO9AXTVM)SSVJ)VTw^#u-T3TZvlEv&^biD_Od;u?AzyUdw`;_+)xU}Sj*ha z$ET;)Y&nOO`5{6lwv)*};uH&Dsn!N!-bt-7#%Y7r1A^~M4 zRkligw_{W9*i+c~@LkX0TYflNbQfh<=nf^=MBCUYJ*k`Rt7lBzUTgJYEPbX7% z<4Nx~P&AAi1H7fp6jNxZZIFr{Y*MS~53Qsh8uAV(#5aVFJAnPbOZZg3TzT)4w4oe= z(Hr2P<)?8gl_r`FzfP`- zeaN;GUo_(6zrk=8S1=dX<-}xn*v6CS zcbDAEACj&UPrdHzf_#C5QQx;p6KaQ-XK{5}DNr|>K1M*;ti1S*L^gcVlw;@U-#sR1 zN2n$|)FlfnTIuT;d?S*~2h*6Nb(c7K=-bF3hF1HmZ%8~}*rwSErm_d9ytzj#U`u{%XlG=Q zBWt8~jw^uV&HGmFvS9J9#2CNya3z9Xi^hOzi?KkiRVHHcb9O}BM;Kb9X@>0m@ReXK_3PqWa!6vd*w1QN??kBB+|;>5-Z86GYt7*kk-Isx$IynPt&?BVL%n97bLC0o9gKU&@JdM_M_us+YS_ich!udyRdQH? z)FoAn?!1^>PkQKdVv#dc0n^-ibiG;-OxP3s+{nOZO6TkOY@O;ijPm3FwlFjE@|oYr zg)<4*nGR_Nyx$rtngnQvr!`V*TEF>jZ-noD)Wd(|d`me(L6$W;u=N&d-Q-1TDtAwH zB1{>S0J>Ot?<^bb78U?&Nxx6o;Pd&tR>ns_IFxrXq+EwJK^e?g4(2=+j#%6Oj!ChA zE}?7)ls!xV|FhMZ4{=D-Zo`hAaHZCfXcLC%3uKUt7!SJ50QVIB=vSYBWa*)c*aM9Z5# zu!3Af>Px`qno7x|-3`3~;2nV(Hd?u2)hm=d6)IEtCxGb5$G3F81Gh&D5x!^Qo;VHk zBCQP~n0$R0{*kqK?C6CkIbvH-M{LWbf62B09Lxmvy9a5xQiw$K@XE!XCxLz}?Nu~K zT1Ub8)D8abgmZc25TFr6sCGbif{w&$$JST}Ht#_-#9gTUv^C|WHh>-OebcuYs`tla z&d6h7fYrE_UiJ-?r{3qJ>7vw3jl_mYhVC$7r$G*iabo7VpN<$gMxtX5&(nd_f?eh_ zVze&hYdlV$j&S!EnTnB3ab%W!xspa~8q%c0pbm(c{eZ^DLa;)*vfvPq`lPVo1Awq? z0U*Ip>E0jGwuU8hG$!f7)31grV{aC7`eHp=DUHuS1SpWv2H{&(^>Eij;Ofq2E>^zy z=^EIqFb*vnjvno$73V8%LkWo{n{lQ*wM_XU7+p&ak!F*B68$lb13t_s(;X?+Fpa@h zhr+YOgM$jh!)`uo_yO}-52_k-!2E2!4uv%7km41LAI`ad?@MIP^mD(Pa51IWxbo!1 zTn^B$laju z1I&!(Ri%oNw;w-;dt-lcHoZ&Hrt;P@lgaRHe8g2h&kM^XEX`JRA55SfL;BZg!0KN- zYZW}FWF2XgV=Z~64pPO=R!~{>xAK~GvW4uVw!9ljoyls50tx&uyn&Go(<0u#dwU2t zjQ%^-qc?eU9)2}n3R>tO5&)*3QP>uZdO22dj?W$o=fczf;9*{-5j=(t2boOf4=l+3 z>GB$94XLL|TfAj+-KbnlG4v&=C;CSFV;R03?E01vs;@^jv6Fz5>j~@6YY`X^VkNWZ zL&-&PD1ZG`iesdBF(GWhTNvXbIKywYh%N%<uqiP-4X~aO2EoK)6ET39WxEpyozPY$Y!n0uhfHDWudl@;+ftQ*Y z&XUrzGd&cmaZFaC$H#HD?2c*<#geaIJ>)s^di?>+N(w5dYocbrk+)k+b1yz>B+|*1 zLNOAHpE+JgDHWt`Ej6ijmS%`>LtT%D)vZ95E=4SDx-W%!(LmZ=q=-|0HS5^{Pm{hj#Tu6z46MR6W`o zu$B@uvT|DRAhO|XM!(h@??4f z?!Upoc)GZZ{*m2UK$JJDn?|-rd=B0(qfK8WMgjQAiJ(RbznBY5#TlwH%q502TFQ){WX5 ze+hsM7m0ryxWDN)HQNakuqgw-8@OH`+qL7HgPqJJd)&B;-WPtZZjWzH+g%;QZyo+I}{tPwfUE^ObRsB z8Kp+g{};?c<{LM5{YWXI0nsslm8WoD^13FwxM$Oy!hYR8ML33t%ovN%!QUQ2R8 zvfOkw;?4nFU6Vgom2MFjmAV1Og92~dfZ5gOce)E9#k}6($tqPlkJ~mj*Vf0y!Piye zlhJ-LiEV1LDjzD`x$uao2XB?}SZ$pz0a|pm%Cs46KkyfL0$|DBf#iY&K0h=Q{ZnxW zT49kZ-VN<)oNY{M{tteL5?z}%O8oBIhmA=r$a@=osr;Fbfqvkka%Fz+GF%;IqAx?I zTVFD}hdCa+(O@GgzsRzZ_{`00ZG7}>ec84VA#=M`e@mY~3H^tE>UoE@dlXW$UB;>|f6a z=6M+!SyC*B1BqowiLOW^JFkSJF!d5iQDYmSH<3Pc?Rnc-s2|ErFFN0bVI&!qMfH#u z^6~ zIN~x;rEu)P@L$xRfMG&J3{sW~6zc)(s4aO^_?{I*>%wI&Vt< zqMW$vRU)$P<6mmB23R21c-tm|XL;b|28x=)<5>MzUJj(}J{8ueSU3|(j(xgug<^|- z*-Q7%e#Q^xM>j*WvG!xL@y8Z*T1+#2m4%nTqn3WW(F>*Z^L;Anrh(Gu0^%Z(e?gJ9 zW{5HJv+SMF^TUL}zhiEOl$s2^{dd!4?u{f0{kY=Q>31x-iTsgyZ?F3x8-}VLis^nsWY(Y^RKGGZd) zz*y>1V%_w7Z_mtG+xAf&ckYWB>I)3+AL|LX>uE5*W@r2qHB5cy=LwW`3ZglibT+Y7 z_+!O=l`{xA)hJM%VVsN^BK)RG*Nl`m^E5Y`v^QC}+3#WzX>}ibY={p0=s2DEN@U&h z(;2?NO}%GcAMONRar)FG>E>}(va9{>qS^Gu>xw=K^-v153$B@FgYOsbc?RTP zZE>d_88F4!NEZX>^^F6U=3vp6F{=9{l4nzYU&wKK&~}|PM7AJ6fh1H?>OY0xy&RD zxCj%NPo=%1-Kh8pCb?g+kVTIHjwL2pVNWv$7HCaux>^`u6DMH^jNP7G5gK*g(c05fQ+!)}VPGd|0WHPWnc`>WG7lpLugtI>;pJ$A_mAWA^{#E7vC8G8!@oS#RL5m*WImI4FSwlk?FM)dr$$b z22^neDB3GHS9qDHn}i`dk0&n}x<(LB3XyMs?+jdEJg|XraAeGs!%@Mj zs+t;+mzUQ~mvsuvMBRMp3~O+9v?DI4=z5H#&f-Xb0otO3SrvjcZ#Do>i%&@*_Xf?Y zFF`hPh$~c!4%ZwukCmW1;`ZuseeTI#SHV$g!KQk4_*bpx^le;UP$oOTc$ikuxYryn z4}>23#sCbMkIH8Q`0=w*3ue4uWKkR_M3@!lY>fskxOPcmaeZf-C3F;Pi zf!$XSA9!6Ra%wxXq^|#1x>fVp=CMO;z+$3IxuC19ZLaf3X+}(PGT$qVY4&=0OqZ@4 z_6qw+eXbr(PEJ*2Wt86*s8mc9o{%5Jb(hQXP-gK=NSL_5dgdB8bojd&fk)Q(tkO}t zt2eN7+`_gu!$Mzxi0eG|h-D%U@wm-g-}k_#$2!L`6j@sHs&~uNI5H zIh#Aux<3>0?INb9nBx$*T$E5bI8olX63bVk8X(l3RxtW?fIHjjJGO^EpssCDp$LPa z+ZDe51Y+@XUoD-@wn8{XyKj5Z32lI{>|8_ZZ0p$A1&F}C;Y2rVFkB5!2d&If}! z?U!XL+hA1QEIpUoTJdM==e}CL%Y&FsDFXuo%mIvJ1wLR~)#0IvvcK%Q=EO*@e{E4p z*@8%EJn$7oPB=RnFuRvXHf?k=wK8oROZY4}Z`B8?c=o@4Ck!^b78XLa;(Z9kpm-)* zRae0ZWWs#PCn60A7UqMj<(rIQD-|WY`fw~63!kfI4NP3MU&C&a>+%eCeBa+c$JWwv zT#`6K$o*bi+N2Hp;2Rr>%l-V<_cvtTK)Vq3$nRR$4uBp#5#iSfc6r^G%uWaZ6?(fE zYB9baew$T$ldq-*Z<-o_pqG%nR0SRo58vX9`Ow+jm5V=E%bW*;Hk&jq5Gs-nKdDQT zo)zIW2S$+`Z5D1ox<`aN1(T$1Gp%4?mU(VzC$5g(g5G5@N^fASh(o@-l1c2~6(u~x zKlA}uSdgLGWQPiCzcZiZlyJp$)v0rJ)5PwrIwdOJeBTHvPOGIdy}iAAE-}KF{R7rV zejAuwR!#{D#vx^|`U5ZqYPZQqNTju?C@a@&!31V#27OXBVpHW7wQ+6m=$AxlsHz%{ z!nE1 z#Nq`@oNk&I5b^2yvol|pMX|B5JD$SSCm}9w6y#)PMjr|1zvz&-y{i$3gyw2}lJ-}i zHVRD5&f1U|=>Hm)D4gqj_w~uii#~B_DJkqgatk#zHWuvFEiNt=K7IOhXKO137F?~i z*Jx(LRInVdGh^;@o|}EtHU^KNx`syCdoTrVcW_BbnUF{}5*S8YHSVT%@f%o0g>&&osLo57T|8k?6LbF6o^1K( zF0LOPp(~pAqlRMOu)_6&EMk%&{PQ-*gKiv9UaDj$6YjntYIbG~RypmR7<91(4ZL1S zp4HFsl`5VAy=JkZI9*W$%SDPh;(jk!80jjE`bo5bFW->25}Jv^eGv}+RAadk(>hkV zpy~DoMn(p;!AuNkEu$c-g`#X@n}0L(nEwj!E%U8UVmo{9{719A#p6Pjx--` z`aS2|x|7`N6;aca{*1oPYT#Todg^P+CXDY5AC>*|>C;*bwa#zC?g3LR3V*Bq%@gZI zotX;cCK>EOyL96QN@)LKD&9QyfZT9fuShSv;e}2@Cmco7C_ zYedQf53zHyu?S9R3_>|(M#PB-glPUHnXQozc2zg%K}NOLX|*jcsoI>K=*mYl7E}l| zm2{S!vG({zs6xe4IiY*#Zqq}<$n58gqc2(ZvrC@KovR-rbdl9l)I_4$w#V}Y+SVD% zJjXYLDc0lJ$J4>?>nw5V^1W*kBe8m?%2vL7K3vmK^mt($PP*OH3c-rLLui^TY5K9U;WNJ3;NZ;?FJmEiQ{-=A_cEGymq_|W!2x)BTBR~ zIgXDQn8*f`*osE0j+;oaPgDutSZ^}N2@^f_$##?4+=&|NGYU|-rQA^pH?Y5S@P7zCu zref8lM<<~Ko`k)PE0&LnwVueTZND6Q zLZXLbx0Rdkc#)qxs_I#*F!rWJjm+>%^1&^o(Ay>kgH@r!#678pYQL=gY@n`wwa<(q zpEN3jILK2;c8X6r)!5HoIP}$MN-hJ2?*JsmmmuV5Q%TgWhGVtW38-}@#Y%UW7wWyH zDPnEAP8uY^d#!T83g2xlMvZK>9<;+>CPY-sh2nb#+yt^bDE&oQd_Ng|%J6CO{R>FU zk~`Ec2vt{W>m^xt)=t_XHa9Bb0nyjpRC7*9#0?dl6lAEMaHxL5V^{iN56LiSpoUgXnw`X$HmzkU$q!APcdZ4YYm zm$Nj3NuugJLQY?8h(5>Ctd}L2-u}>zrTRXz{tYu8Aw9y^KL}pkKWn3tbn@io585kF zYV#S2q; z2Na=mvb(G0w%IhHzdj-6p?jtoMwuy$29-m`kuHvIf4~-@5RrkG(~Et@4`@he?u#q%)v~hl=5INUNCu{ zCj2AtuXuG)VFt+8V%|A7wtZ$DqtuP{*BJT7G)|7(qhrp>1iXVP~B-vrs~X zhnTnRfuZZAmqLZJj~)lvKQ7wKD-qgz(8PbrPxS?c0grx;sdYS-?OV$k{!{kFO}zub z?keoZfV)qlY3u1MuWJ-BUGk=L2Yp-r-uLgOlDuOoEyzZCca3B2IZr1UK^AGctIY_m zoOABQP~JAyv*+`_KYZVN*d>2Wzc%fpjY*Q@?-{cSAKRIvN{`0h`An-5&Ty_0PKem7 zoH$C~@uvT!oOXP^EVu68zho{SxrP7pUvZKX4Ivkd${olx*m6Y=-}HclPCj(RnasnJNa+ct zIIS~Svc(VK_TdUYIeNs{YdKS3=%Zj|6#t4e&8i2)wLFQ1O)M*dAJUMF9;5&&7}USU(__WlvsO^ zdI0K8K3HWrL7&fullJn#T(JPj5G^wi%esUG`7>wKfZgnX`k9*V;Dm_j4Z5G{JsI;k9hIotR0*q zcp2k^1Z;I~K(5^g&KO#V{E1=)vO{GXj^^TI2HOn}BvE*km6iFYm<>$7L6paEa_%nD zt_N}od2@5K30dRu-3tznSWFrHq@yRnoS_QJsVdB!nm5U5X?ZW%+Y6MPSfZ3|xD$Ky zI0vy0LacrQ!ZDXJvaqmd2;S<&)D6+4Zph5^A{G+FwF0xW@jVRTL1Kcv$l=4F&J6~^t#O1&#W9+U<5-L%olx;i` z62{FCo%#${PMs_dxVT7Gr!n<{=wNFuL_TllKH)Anv3&t$hrDJJ8t^bdj!k=@JNX(Y z{Fd=HRkoNM8822Ml`Hk&LOeL@7(Hl8McR}CBw8l8V2Tssy4Eb^Pn`Ofb50u3T25$ zUgk?1Q0r9T2UOu@QiY5NuE~VqmD>x)2Aqn2=3Tz7Xw$ASlRf8w@xPf{L%d%3ujR)@KbCwuKV$pg>qTSl@tSNE`xph;OdV5zu%( zJdNq7kU~UNbv$PRiT-L3BX>2&Ad>7h0QV`P_&#S%?9Ykzb`?oC#Y4|h7Srp(DTla%x@h_oP1tQCucwC+7T{Bf{y z!~^w6K|#R*UU^aI>f{pM#wUx7jg32T5y+9sGxlq@I50(=ItQi`yYi_Q4o{1VNqi+M zsP3@LP`ZJ4)*jbV8dsK=WcfIdkaY0sa5ko}1~4w<_7;CE+B?=JylwKs#InTc+^+Ok z5_AR{Ppr6-$$aObZ&n$>3$sYAT~fa0&wQ?U8~N_n!xRk-Q^p@Vk`TGbQqRLW9dZd~ z_tms~>rbO~NFbdqu z#C>g!u6o?j0A!WPS8%ww1@1bIp(4rAw78jr<-rg-$OlI?w?oEOTO6YW2Ik-sOcC{` z9(N2`S=)Pmc=txE>C{veqsGM@k0>oGm{Lo;7(PE#sNmZ~c2!Ts{^x zB6mdPq|#qQ))dh7em}CiM5sOtIIIW<}7H~s&cTNzPdDF7ZhEo1b34M z4bDD=iA$yvJ119Q(@7Z`1*1`qof{OrNdOCNamuz#{R~uTsUG62P}qP(DOlvgECyyJNo~(Ay0)hN+>j&hZ6W3U#qb7q^u$ zCh3x=A@U3*Uom7yh7?KX6R-mzTw_7ezpb7RWmRccrJ3K%jpJ5&^DL9U0BX~`&fVO{ zB%JOmB-he9?kraJ9^1Kl9t#VbPfJzF#8X={{H%Nz69@syHHsJ%CE3L|_)WI~VQATs z5j+8deTq|qV1u=0I}_t>*aLRvCD@qXLuPXMZtoh~%u+WAskk>LoQ_wA-Cp?}rGdSl z3}3-E>y-`XarpH9^KE!-)b+5g=mgZZuQ563JbTOjz*NUmzvB-uW{6vL{2H_-IDGV9 zj?alXwcdyBBqk&r)E76T%SZYS5qap-Q^7RoWnwZ}Sf&%R zWWDp9;V3n#^iR8Vn5G7s8%$`TBUq(bOW3l;WI2z2oK;v^MMVvqsmsGpp^oOEh3*cG zliyR;W6gg9+c|{T=da2c*`tmAfMoR8XHdTgjE9x7LPN4EvEUyqHGS1b%C=$u3#2zz AiU0rr diff --git a/engine/extend/images/authz_connection_hijack.png b/engine/extend/images/authz_connection_hijack.png deleted file mode 100644 index f13a2987b28d70f81bda7096a54ec479f20b2690..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38780 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 diff --git a/engine/extend/images/authz_deny.png b/engine/extend/images/authz_deny.png deleted file mode 100644 index fa4a48584abb3db280b8226d18888cb0539de89d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27099 zcmdSBbySsY*Dnf)5~8$(2q@hlA|NS9OM`Tygn}SQH&QM-Rir~Y1VN-Fln`m8B_*Xh z_Po{i+k1awpYz`y`w4>|{)(SmnBm_`vP$p%`-!N8Fx9lYaf;>N>#OjT;s1Lx zpD;Aij7t}k<^H~tPiU0qzn?H4W4u7EAvq-JEXGqk>Gi z80oWdry&CguGZU=9&|Q?1@>}#Eo4UJn`31bFJBtT>(^}eDrlWvy=|))!rnq0)XyxV z#^yfhxo7oI=l#R`) z?Q5OqQKswG{N}J(#MdY~ndle|sWyh7U|Z2E$(U+M4Nq8->25k+U*8!r>iF^gk--?F zax(is{sU)wh4z*t!Dr@;e&^*vC^rS(87+K!>m>T|*}`QjuL*%nbHTg1a*WjRn8Wo= zWjY>LLPL9)(!XCwHuYiDHb(!WgPf^pdgtp~3ew?JEU$PiaG%WQCb|V(zJ}?Y z%kfh!ynnvoSW?pGgpE&M@-1tQn&kaqg+nZS>R1}DeTg8;v8qzxgV~tF{&#|c2Qh#Feh32>)UpQAunIX$j7lRR*`Y)mte)jbLcG{N6trxoib-BB*ddA zZpyEYR5%GJ+i<eGv#=TI>R^!uR?-PY7+XV6U;q3cY^EtGN4WB4W4;CBQ9h_{XoH=eh ztFLn1%Jx`q#B%suyN5d{-It@x^#YfaD6`&m>*3y%!@;J7>)yEYd7IT=M#et;E$=1` z?yB0w1c`ZGG>Pf$zE3SMExNbhRo3>?6_-FIR)da!hNf6b>g@hoALX|;p#k}hj zsJlh>lG>gItLLgQ#3d$LzVKctZF3x6`SCvg@sBc{jcUim^v~N%104=GEp)4%rp-O% z3Ob=Oq3ww0P^aKEe~Kq&(N1#h8yS}J+;_q_HQ)ZB^_tZWqZ$XBb50+}Ix3ADF=EPR zHr9WB&VyS}+0UjB&(3N$Q8RLFLHaVa@H<;rmtK>6K5Eh@Ap6-XU;uLvjtx8giyf;%WV|V4p z3=s!GOO^eM^gyk<^YZnZmfvZ2PWC4ApDlb_SjK^*s)5XVXdyn+3}WE z(iIL}?Slv!u?dH6*imk9_XgT%ybJO)^B;a3{rm>&La&TVK+DSpWwDdYzU|D&a4Ny{ zy5miS1hFIk&2M*pmkSIO8R#v%3|fAa;+Z{Ippy}ZPh%U`Qlq^;J(WwvY@E7Nu@#U$ zQf?JfwD7AZqmWlZ?kL*(bSp(`e`z3}tp>X@Swt_6U8mQflC4#%P}j^VQdW>8+n}Lchp?sL2MlR508JOpRC}c z@J065#>wDF24P@VWQ#Mw>x2Ki54K z#z)_hdc1t&dqhX{>b+`}&aK+C_k41;OAsFCS~q>vboYm`W5_AS0hC-)k{knEQr67R z{=O_Xj~BY$eFza^WL*+!%xo(9al#*-E;20(R$dKc-^8SzQQko%gAt~(vC|rUn`EQZvXD#_9ETz zLZ$O>!)x=0JIh+b;>yu_lcA(+x;my|{p-z#uWmPvOuxGM$T3p4!g|q3pP1UlwsO+z z)5rcc*gV*S>$Jnu{uQiS36YVh- zG3~JM*4a8Cj_rXwlp#!;p8}@iKfcYtiT4x39;AE!sM|Jc`&ULpJG=@PoiysZO+;Fe zv)WO7{fY3$lMal}F_DC+n$};w3o&`@ENMP*wZ7ZH-5S%-Z~>n{Saz(%z=TnTaLUAj zj9Dhw^;fchebZ*3Z_uaVak#&WYpa_+^(}q==cuWS9p>6eS1*1}4WjWHW}x477lo6$ zxz#PEx5mBFK!XZNRg7W%T3CE^!Q*pZZP!@Gqua)QJt3bOroJ+J?KggD!#)iCBoV*y zeyFYLKwY}VQoQuZ=!g4PLz>&#^rX2-Sv3gAtz3y~NIKu%d5~({g~hmD_ChqQ9#DXK zwsHz*p`cn|j@o30Y$|~+ zDzAGaKRsWatr#+V77|W&ky)Pk9!lE;9oI&an?t88^YU`O5+_cz0exlN?sEr)k!1_0 zJnY`ujGr!k*c@ii`|xW*L2Z>!Im=#Q zs-gwDx1Wq;7A9;&Com{nxrXPt`|43L;kJ?cIF!A$XuKwqSj$5f=H<6Zb#r!N%C=_? zzMo%45=;g2&}-K+S*J*^_GAR{%Q;8zn13MUH6%^q5x;>ITlXnB_h5JPChuKwg< z*xJhCaGXEI$&Zs05iXTfpIBB+`RBhUI1*V~u2#GX_4iBWvx<(>I62%YeD=(gE6Dzt zkm)FTw(9j^swa;urjMchm3g0ec|uuNrVw&`w^1gox{FmW;_WQ}*FehzL%5Ouf-qmi zwL94|+Agw^8DvL=g=-mJ-tgj zLc@hV&u|f!qHo?(=J81h+oAE$o$qxP#qVoVevFTItLJ-vOzgbNJT?0UOifAH}tjQ$>^Zkpl^1>I*sRclu~zd%V`C)uJ8Iw zbh}p5=+?7ZQUe9o=-DVacZbk(g-!|Knk9k;8j$W~kJIhKGI? z^_O}R+k_5Zd|CSv%eNj6t1S2?@L&&$l|JZA(64b( zjhH9AY>^~jpB~GiF3o+&$Hkx6dV4jbXXeiDnv5gi!R7T{|L4th(sU8Ro52BP6T21n zy$|DA9;CMQFB$p9-+cHvXreAia2N+g&eK%Zzx?BU&UnY1$G0RwErG;UNhpt*dtMX@ zV$T9t#CEx+M^?Ytj45L-*UGl2?I#bdwB;~7H8h`K__XPH_b>}Pcw zMKJZ->L<;WH!kPet_o()u2s!kCbJQ1>lAS@KE#VpD?w{vK7WBIG1Kbhs>wLSjM{y93*9M|b*!-@mvc3Z3Q{hvqwMo5h68iSuK_GVR& zj~|#`!l#o$;cjGIE59l2n&=kLcyTFN-}ibf53QelOr_UyG8x|Ub&)B?`>$nxHob5X z+P~W)i7%3wqr)T5=XXnJ`*-Dpn}YF}KNmw$(P|~9kpr$~?YULG>=j>XI27k~ zziD4exo~(}i>=!&1`TJQ5$)cS!SFY?Y_j8Ge{17OU_>eS*r1|DpR)_%1fb9cZ<$a% zTN@LsEo?I1-tJR=qfRYHYmM`?nY`kDM`)CIFHXbv*1D9-ECcUUB>^7I^=Pv%3i2@G z1kj)t@dO&ZDUqU&T*55j3=>JyUhwy89tv9@P1g3$h!ig;h8i}am$*ashfiV$qZyrH zG_^GRWrICRKB52nqoiiyRpg0(m@DlFjtY;o`^EQOf1ivFL=+F3>>PX`AfQrr&{OtyoG#~qw_H8&yz8w;C*QI@f82?QG!({7#X!Mbj1EX z*$12cVCdF5+r<70CwWV3JPO`so2J>{q{>n*ht_6BamF<3_kvIBu<0xD59P(wPGXJ= zHIBbCrUhpIINDies`FxuIhOn^nx(dr6XqHB!n1+w`k^}=0ZQ~2$BFE&LcHnr&U&~x zcdpKJ;dPJF9VSKVL0?yQCIZy%MQO?j1-VH}#)i|Gv1)xY$A^+Mf7e7#4>KOf zPb)y2YWn}*2MOXsH-?P7;}(+LmD&@yxBx4~QwciAj#oQbOgD!(Y|Yxdl*X?2ft^Gy$L00sz)O8&4ZX)%fY{2+zuvHDkBtJ* zul3={X#Dh?X<)9*)XyNALC>F2GSoP_*M-M#a_D{NKcEux8ha$_wA5dEn6sFZ9PW>W zKWOE;G=!ZZ>gk5iSYasqyk@O<2_EAqES$*_HL_nHX%f7=Ml3geMX4g7_o&tBpbob!CPBl?IRJIVMv7!yhU{3EsY(v- zslB8@xz8uNuWh*fE(W?(WLV2ear2=gOLnc%=b6^9s}9r6I0uV4Dch4p2A^iTZcjRf ze11vJm>SJ|74D=Ke4qsmlV1enzQ*N7+`Ug(cS=k?J9?7~JWUn7Ov(3!<=y0((q5-ogh=+5 ztfJ!f9S&u5nF#8_K9&bXNkY%&QJ1F+jp!Pp85A@E@hCI^ZV#kM202pgJqpdK@%tIC z*3Ftz7Fc#BFh{|%W^yyG+VkkSE1+Zq)|ELfs^w}GzV29-2hKY?YF9tdmp9WEk?=VP z|I_}Pmq2agLAp8L=My_c(D17U`0wUYesO!tOR^S4_47HS-P)s!zkQiRJBURqo1xgg{nM_R4901+BFT2b5E$c zuT0k0?@USPQTzZ>>-g)tgmQ(&mq-aQ+2w)!oSfSG~dF3tTp@^oAbC+Lbt#!nhU4+_Z;DndM7@6X8@(w?mX}BjxNx7k2`HQUagss z|FG*dV`7z9{xB8?U#=Gse`pUgb-}1BF}bh!S5i*>VLk2+{M*bVS4mi@LqS>U9n!v9 zpqddlm0fmmu%CdsZEwO|dBSa(1f3!D!S~G}uS>E3YjFHMVSu0qircnH zW6qPFeprbH$5!s{`<5bYmV}!T-p7(OX^ynSjEdjeGLN?wk{cDe5%H7z(Dw=YAwg_A zkj!iEn{`c&c2{@shzwmiFXo$J;!^|N=qb7vO0qF^HIev`yrP^l;O1?dj zNAFwJ+gJRP-(~vgsV#W;i-^7DG7_y7eY&$W;1fDqNBtcHwYQfCDXtrQdOk3OhzSbS zTk~CgYpbJ`m1AAHZGFmOPd@(qbBIhnIsdl(c&9Ky8$H^78eh-52~!Qz$cBfp5JV!& zE0Z2uVb865GeZpBk3nixB=9_*e#zx1aHqq#{2uUD$LdRzd@8r?CdxNK`^tH4^wA+} zZm`Dn+3Id17LB&8z`_1ZM1?yPbB;ank%`b)RLtMnQQWk%JfsOHRui^ttWISc<+Ib{ zgB{(ZBcarzlSjRu4=LKQilmd)C_dN0wp$we_>8fN^5#R7QU>g~_%}y#pr|+{y8o_y zU{L4rV_ffGX$SN=~)Yvh^P2Eo<^ebEgHo zR4aRU818PT+9C8a^du)t6fHRU?@Vr*Hvd9XH{i~=9N!>xNxd9l_r{dpImr!-Gq>OZ zEcK*~<7cRSGM2~kV;R&YGh21uUC{}{Q12y|8-vAgT5`Ju7_$;b_kU<$?%~wT)96Wf z+D7sr3RHw8b<~aPiC6SWjD5Xq+BEVElD$t|MK(`1+Guu2(#E+4N2%#Nv@=c1Bcg;b zZ8|}f?R#P=9rOHQqfn40^Fs!dG5>{W(X!j8i55*L^ufE2x|2O$GUVX|%_Q=eZ8MY5 zsUDkP1`*!KcDW9BhN$3xLB?1_%=^@1yplW48q=u>6<1HR?D^eDDGe{7+MW9Gt;8@Qsq<<~&o!ReCg2UPVQO{sLClcnNEH=>o7EqvUA zeJiU^#AIr;ZQL{VxkaqVgn#icgw-~4JK(&~c&F0Hpu=3_xY#?sIUOo~wD-F*meSB` ze6))p?X0$c#OUz`Mlz_`5@#(hiL=jQ*sk(F{(drE7jD@bz>~I^(b~26%P>KE*3G;-&a;p@Zsv-B=+T7D7P+^fU1(Ir^m%&t)^rzDa#C`NL9!fd`O=#Yun8;l{5 zR9#rO#tjRciR0_DYt)yAO2@E7He@eVmZ+k%&5_gN0iviODV@+hv=1W+XsvkU+zo6u zx3XVUjzckazoei%iMdYOgne-^EwQ@Ul3+Ek$2fvoWZO|MOFpjr78l+nV;^JstWgY$ zfGWL|*PDq6*E=;-P9xCbNx47!^;|;5kDcc#;)W0Cv58`@tu)5`wf&!w zbzW|$-h0Va7YUossGjy!&n4=^VN;XlzJ+t+qYVLkA+GzB*U{>2GHveMz*nNX)Ta5E(u{SO zeNVY58>rd$dKjotT=mCgim!NEes?wO9(QUa_l>5BJkCs!q?k70bNr=JJ0IA+D}l1V zFw)7%E$F>kF;pJ&LzJ-nL&?IEZyTmB>^w{h2?NQV9{}OndDQT|du)hx^{43~m9#ooS9CdYF|yLV5$e*$uN`3H)IUxQZl?=>T7 z-|p+lD8`xMQf63_pQG^QI2V7FIZBfDu{26NkZaQT5}{pDVtb>s!5C^^i4M=4+rXbo z(__0w#*4Uhlq=i7xHca2Njo>it+bix`vk3+a;`D=KGJe8>3~r&@rdkF20k<4`)>hJ zSET!0Mqj9skX)w@F4=sM>bV||CwWydw`l}_nVnqKSQqEb@6|Wik^@(&xv5W0NM4c^ zfK{~=aj7Al^aOkIv{{l}@Mu%moUBKQ+gQTgY`%5$1g$0D{+@AA*M7-m=})_heKMaU zb$q!7pN^A0aQIEZo?&brnn1lZJ%f647@%U3aiJ@KVrGFf4}bzg#-FEfU|S;Zgm zjTNOr&@kl2g^BV+xQE|-c>42h?OCoyt{SUZD~c5WT%KXA8}u!?N{@2`o)J+;6SV#K z?!|^~iwv5e=+~0v%SPSE1EJCy8YAbx?W5qaJ!=yhvL#TkJrma9&D8`QW>tpI-Gcf_ zRzIu1|9LQl+c&mxW$$kFZhcjifM%VC>kE;jC8WBWuHd6L5fKr|E^T`8Y}cCy zzpu4Yi*aK;_~cUkC~26^5V0mk1bz<|zEPNzqDVSj*Y`>ET3x)_AmkI|z1B^FiIW+Q zs9rm*@6ji(c+E!1@I8pFu%Btw3SaAHWxA}?O~aN(pPVX8(v8{MAjoof)h!J@d*yG`u7_JWsR2g#+igB!%cNnB_pkl<*)ep&j+@MNcWK2E5GLZDv+}jb<#%R zJzT&eL>48AFnaLr1mL1-u(q1NH5(T31`jG5bs5zqP@!g^j^^89O~n?|CMn&I&a<^NR^rWCT-#XsPZr?+ z^@;!2AEeb0yE9O1B(@N{NbGHJsmNJJEm|4%%)XHF>Kyp}|D=Q+EM6*n)UHf3HwXO*Vu2b#|U7EB!jiC1oh za*F6kEjUJg_*dKy*}!Gr-;}ul{=P#94H+3zh4n!6`HNS^qMhjl`U`Z_`RyjCaPC=9 zAYqAy7Z9Ad7@ldMm?WUO`+KtZ3_vI&zVNz_Q|-ep%8fZYhZE=ug)SWfgWHmmXK z3VKFHd4#{xoryd`V$6KX zeyTcv`px&&#xX1gGv$aybX!KKv%NtId6#2~Pc6(`s9O<@7(^gHv%J0I91k71S3R23 z79g*aB5~*yD{*^jK?kWktwL7Mquqgxh0a$QadWUA=fG{Tmm?+v8M?kD?DC(g!-;8o zF~Kk3nIN~D8&E@o(EYJz-5>R_X3~KlMROVmz3qQ-kt|c(7lYTTm%i~`pB%T-%cvPB zwG5Jhc$=+P?S7?#O&7m5{;31}ZiHVuv|V$??hP_7-v^c>z+m;UJ4I}gr)#3ty`v{X zX6Icw$UwXR4dmVo*6$TWh#tzSh$;%I|G7Y8e=g7sc+2?BxsFc(ozV<0JDj*Vr9mml zq35Xx*{)@giZKF}V|x)^a1Ka1hS_yGP;9=d=OqrZt7Qh;54J(}<&*v>7x#VKjrfPq zuFRMEbKNxV7&o993_4G^$_PDQu~crKIT$R|%X(03h{z|bG7$m4WHIO?Ut=D-w^L7qh8nqr|NaGDv(c$dh2SJV?8HUeNQfd?$!SOS__pclUSw+4Jimi<-d{b8xx3 zHg5;soahZGC2Yr?3tar+b#f>Nno2LpQ3{6P3C$qmte8K{_}8TktQyKn4%i0 zTjmvCzIJxzEG-;0+R5vZfnPu2yeG3`m4_7>s_?^$c5u<*+Rz4Yu=LWzgHVQLp^*F*HI& z(R$uM1-J)lem1l1!+9ki`JT7f#ZU;<-oT$)SBm2;C})v>4(rZ~5hn+s8*ipHWH9}e z(P4=<2B+?FyBh!iDQb}Wzu3GF=CX$f(t#d|a5A(2e$C~Z_@j*+^e)$1%V3dC`Ct5# zi^G<|pyCNM%a?L}^^PQ?##cv#DEKK{IKl}ZcF{jcHu0yho(l;~>VJ)iKab{q_W|!V z#;h&;1>b_oEMX|0B(84=(yYXZ;CM2kzYf{#Rp7$$8hHpby!C6bS=Z}Z76286Rsi8T zQiA!j$5vGDyW&bE@Kk)k{&3sMJHs81ER;{=p_I&@ZGR6IAs67i*vs&W|H*6Nt$v_xy$24n zUyx`;92CKeUWV;@f`y8%cM&V*r<8b$4T?(Y1aoRs&5 z`ynsY50NzX%Iy1Z^5BCmEn}R=eFyc&Fa=!KNuiY(Wzk%vB!M)r0J7oQWq_QU2L@*b z?iKcT6JAG8oFE5LVb#Z|nJG)S11Fu8xENaZ63F(fJUpr(ENXWp^322wBaL`Vz-cM= z8{LBaY%6Tg3K^dS@b|Eq98gl zDICe^H8L08eSzyX3waptug3>l|LHQaAc$u{8lxBTRE@uSu{T?V9!=D^W&sf@1LbdK zZexGkc@igEt5h_Uuhh26VNPDefnC3<CpGp*zNbB(4BL+8pFasQY-s$t~g` z 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. -The `plugin install` command pulls the plugin from the Docker Hub or private -registry. If necessary the CLI prompts you to accept any privilige requriements. -For example the plugin may require access to a device on the host system. -Finally it enables the plugin. - -Run `docker plugin ls` to check the status of installed plugins. The Engine -markes plugins that are started without issues as `ENABLED`. - -After you install a plugin, the plugin behavior is the same as legacy plugins. -The following example demonstrates how to install the `sshfs` plugin and use it -to create a volume. - -1. Install the `sshfs` plugin. - - ```bash - $ docker plugin install vieux/sshfs - - Plugin "vieux/sshfs" is requesting the following privileges: - - network: [host] - - capabilities: [CAP_SYS_ADMIN] - Do you grant the above permissions? [y/N] y - - vieux/sshfs - ``` - - The plugin requests 2 privileges, the `CAP_SYS_ADMIN` capability to be able - to do mount inside the plugin and `host networking`. - -2. Check for a value of `true` the `ENABLED` column to verify the plugin -started without error. - - ```bash - $ docker plugin ls - - NAME TAG ENABLED - vieux/sshfs latest true - ``` - -3. Create a volume using the plugin. - - ```bash - $ docker volume create \ - -d vieux/sshfs \ - --name sshvolume \ - -o sshcmd=user@1.2.3.4:/remote - - sshvolume - ``` - -4. Use the volume `sshvolume`. - - ```bash - $ docker run -v sshvolume:/data busybox ls /data - - - ``` - -5. Verify the plugin successfully created the volume. - - ```bash - $ docker volume ls - - DRIVER NAME - vieux/sshfs sshvolume - ``` - - You can stop a plugin with the `docker plugin disable` - command or remove a plugin with `docker plugin remove`. - -See the [command line reference](../reference/commandline/index.md) for more -information. - -## How to develop a plugin - -Plugin creation is currently a manual process. We plan to add automation in a -future release with a command such as `docker plugin build`. - -This section describes the format of an existing enabled plugin. You have to -create and format the plugin files by hand. - -Plugins are stored in `/var/lib/docker/plugins`. For instance: - -```bash -# ls -la /var/lib/docker/plugins -total 20 -drwx------ 4 root root 4096 Aug 8 18:03 . -drwx--x--x 12 root root 4096 Aug 8 17:53 .. -drwxr-xr-x 3 root root 4096 Aug 8 17:56 cd851ce43a403 --rw------- 1 root root 2107 Aug 8 18:03 plugins.json -``` - -`plugins.json` is an inventory of all installed plugins. For example: - -```bash -# cat plugins.json -{ - "cd851ce43a403": { - "plugin": { - "Manifest": { - "Args": { - "Value": null, - "Settable": null, - "Description": "", - "Name": "" - }, - "Env": null, - "Devices": null, - "Mounts": null, - "Capabilities": [ - "CAP_SYS_ADMIN" - ], - "ManifestVersion": "v0", - "Description": "sshFS plugin for Docker", - "Documentation": "https://docs.docker.com/engine/extend/plugins/", - "Interface": { - "Socket": "sshfs.sock", - "Types": [ - "docker.volumedriver/1.0" - ] - }, - "Entrypoint": [ - "/go/bin/docker-volume-sshfs" - ], - "Workdir": "", - "User": {}, - "Network": { - "Type": "host" - } - }, - "Config": { - "Devices": null, - "Args": null, - "Env": [], - "Mounts": [] - }, - "Active": true, - "Tag": "latest", - "Name": "vieux/sshfs", - "Id": "cd851ce43a403" - } - } -} -``` - -Each folder represents a plugin. For example: - -```bash -# ls -la /var/lib/docker/plugins/cd851ce43a403 -total 12 -drwx------ 19 root root 4096 Aug 8 17:56 rootfs --rw-r--r-- 1 root root 50 Aug 8 17:56 plugin-config.json --rw------- 1 root root 347 Aug 8 17:56 manifest.json -``` - -`rootfs` represents the root filesystem of the plugin. In this example, it was -created from a Dockerfile as follows: - ->**Note:** `/run/docker/plugins` is mandatory for docker to communicate with -the plugin._ - -```bash -$ git clone https://github.com/vieux/docker-volume-sshfs -$ cd docker-volume-sshfs -$ docker build -t rootfs . -$ id=$(docker create rootfs true) # id was cd851ce43a403 when the image was created -$ mkdir -p /var/lib/docker/plugins/$id/rootfs -$ docker export "$id" | tar -x -C /var/lib/docker/plugins/$id/rootfs -$ docker rm -vf "$id" -$ docker rmi rootfs -``` - -`manifest.json` describes the plugin and `plugin-config.json` contains some -runtime parameters. [See the Plugins Manifest reference](manifest.md). For example: - -```bash -# cat manifest.json -{ - "manifestVersion": "v0", - "description": "sshFS plugin for Docker", - "documentation": "https://docs.docker.com/engine/extend/plugins/", - "entrypoint": ["/go/bin/docker-volume-sshfs"], - "network": { - "type": "host" - }, - "interface" : { - "types": ["docker.volumedriver/1.0"], - "socket": "sshfs.sock" - }, - "capabilities": ["CAP_SYS_ADMIN"] -} -``` - -In this example, you can see the plugin is a volume driver, requires the -`CAP_SYS_ADMIN` capability, `host networking`, `/go/bin/docker-volume-sshfs` as -entrypoint and is going to use `/run/docker/plugins/sshfs.sock` to communicate -with the Docker Engine. - -```bash -# cat plugin-config.json -{ - "Devices": null, - "Args": null, - "Env": [], - "Mounts": [] -} -``` - -This plugin doesn't require runtime parameters. - -Both `manifest.json` and `plugin-config.json` are part of the `plugins.json`. -`manifest.json` is read-only and `plugin-config.json` is read-write. - -To summarize, follow the steps below to create a plugin: - -0. Choose a name for the plugin. Plugin name uses the same format as images, -for example: `/`. -1. Create a rootfs in `/var/lib/docker/plugins/$id/rootfs`. -2. Create manifest.json file in `/var/lib/docker/plugins/$id/`. -3. Create a `plugin-config.json` if needed. -4. Create or add a section to `/var/lib/docker/plugins/plugins.json`. Use - `/` as “Name” and `$id` as “Id”. -5. Restart the Docker Engine. -6. Run `docker plugin ls`. - * If your plugin is listed as `ENABLED=true`, you can push it to the - registry. - * If the plugin is not listed or if `ENABLED=false`, something went wrong. - Check the daemon logs for errors. -7. If you are not already logged in, use `docker login` to authenticate against - a registry. -8. Run `docker plugin push /` to push the plugin. diff --git a/engine/extend/legacy_plugins.md b/engine/extend/legacy_plugins.md deleted file mode 100644 index a6ace337d5..0000000000 --- a/engine/extend/legacy_plugins.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -redirect_from: -- /engine/extend/plugins/ -description: How to add additional functionality to Docker with plugins extensions -keywords: -- Examples, Usage, plugins, docker, documentation, user guide -title: Use Docker Engine plugins ---- - -This document describes the Docker Engine plugins generally available in Docker -Engine. To view information on plugins managed by Docker Engine currently in -experimental status, refer to [Docker Engine plugin system](index.md). - -You can extend the capabilities of the Docker Engine by loading third-party -plugins. This page explains the types of plugins and provides links to several -volume and network plugins for Docker. - -## Types of plugins - -Plugins extend Docker's functionality. They come in specific types. For -example, a [volume plugin](plugins_volume.md) might enable Docker -volumes to persist across multiple Docker hosts and a -[network plugin](plugins_network.md) might provide network plumbing. - -Currently Docker supports authorization, volume and network driver plugins. In the future it -will support additional plugin types. - -## Installing a plugin - -Follow the instructions in the plugin's documentation. - -## Finding a plugin - -The sections below provide an inexhaustive overview of available plugins. - - - -### Network plugins - -Plugin | Description ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -[Contiv Networking](https://github.com/contiv/netplugin) | An open source network plugin to provide infrastructure and security policies for a multi-tenant micro services deployment, while providing an integration to physical network for non-container workload. Contiv Networking implements the remote driver and IPAM APIs available in Docker 1.9 onwards. -[Kuryr Network Plugin](https://github.com/openstack/kuryr) | A network plugin is developed as part of the OpenStack Kuryr project and implements the Docker networking (libnetwork) remote driver API by utilizing Neutron, the OpenStack networking service. It includes an IPAM driver as well. -[Weave Network Plugin](https://www.weave.works/docs/net/latest/introducing-weave/) | A network plugin that creates a virtual network that connects your Docker containers - across multiple hosts or clouds and enables automatic discovery of applications. Weave networks are resilient, partition tolerant, secure and work in partially connected networks, and other adverse environments - all configured with delightful simplicity. - -### Volume plugins - -Plugin | Description ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -[Azure File Storage plugin](https://github.com/Azure/azurefile-dockervolumedriver) | Lets you mount Microsoft [Azure File Storage](https://azure.microsoft.com/blog/azure-file-storage-now-generally-available/) shares to Docker containers as volumes using the SMB 3.0 protocol. [Learn more](https://azure.microsoft.com/blog/persistent-docker-volumes-with-azure-file-storage/). -[Blockbridge plugin](https://github.com/blockbridge/blockbridge-docker-volume) | A volume plugin that provides access to an extensible set of container-based persistent storage options. It supports single and multi-host Docker environments with features that include tenant isolation, automated provisioning, encryption, secure deletion, snapshots and QoS. -[Contiv Volume Plugin](https://github.com/contiv/volplugin) | An open source volume plugin that provides multi-tenant, persistent, distributed storage with intent based consumption. It has support for Ceph and NFS. -[Convoy plugin](https://github.com/rancher/convoy) | A volume plugin for a variety of storage back-ends including device mapper and NFS. It's a simple standalone executable written in Go and provides the framework to support vendor-specific extensions such as snapshots, backups and restore. -[DRBD plugin](https://www.drbd.org/en/supported-projects/docker) | A volume plugin that provides highly available storage replicated by [DRBD](https://www.drbd.org). Data written to the docker volume is replicated in a cluster of DRBD nodes. -[Flocker plugin](https://clusterhq.com/docker-plugin/) | A volume plugin that provides multi-host portable volumes for Docker, enabling you to run databases and other stateful containers and move them around across a cluster of machines. -[gce-docker plugin](https://github.com/mcuadros/gce-docker) | A volume plugin able to attach, format and mount Google Compute [persistent-disks](https://cloud.google.com/compute/docs/disks/persistent-disks). -[GlusterFS plugin](https://github.com/calavera/docker-volume-glusterfs) | A volume plugin that provides multi-host volumes management for Docker using GlusterFS. -[Horcrux Volume Plugin](https://github.com/muthu-r/horcrux) | A volume plugin that allows on-demand, version controlled access to your data. Horcrux is an open-source plugin, written in Go, and supports SCP, [Minio](https://www.minio.io) and Amazon S3. -[HPE 3Par Volume Plugin](https://github.com/hpe-storage/python-hpedockerplugin/) | A volume plugin that supports HPE 3Par and StoreVirtual iSCSI storage arrays. -[IPFS Volume Plugin](http://github.com/vdemeester/docker-volume-ipfs) | An open source volume plugin that allows using an [ipfs](https://ipfs.io/) filesystem as a volume. -[Keywhiz plugin](https://github.com/calavera/docker-volume-keywhiz) | A plugin that provides credentials and secret management using Keywhiz as a central repository. -[Local Persist Plugin](https://github.com/CWSpear/local-persist) | A volume plugin that extends the default `local` driver's functionality by allowing you specify a mountpoint anywhere on the host, which enables the files to *always persist*, even if the volume is removed via `docker volume rm`. -[NetApp Plugin](https://github.com/NetApp/netappdvp) (nDVP) | A volume plugin that provides direct integration with the Docker ecosystem for the NetApp storage portfolio. The nDVP package supports the provisioning and management of storage resources from the storage platform to Docker hosts, with a robust framework for adding additional platforms in the future. -[Netshare plugin](https://github.com/ContainX/docker-volume-netshare) | A volume plugin that provides volume management for NFS 3/4, AWS EFS and CIFS file systems. -[OpenStorage Plugin](https://github.com/libopenstorage/openstorage) | A cluster-aware volume plugin that provides volume management for file and block storage solutions. It implements a vendor neutral specification for implementing extensions such as CoS, encryption, and snapshots. It has example drivers based on FUSE, NFS, NBD and EBS to name a few. -[Portworx Volume Plugin](https://github.com/portworx/px-dev) | A volume plugin that turns any server into a scale-out converged compute/storage node, providing container granular storage and highly available volumes across any node, using a shared-nothing storage backend that works with any docker scheduler. -[Quobyte Volume Plugin](https://github.com/quobyte/docker-volume) | A volume plugin that connects Docker to [Quobyte](http://www.quobyte.com/containers)'s data center file system, a general-purpose scalable and fault-tolerant storage platform. -[REX-Ray plugin](https://github.com/emccode/rexray) | A volume plugin which is written in Go and provides advanced storage functionality for many platforms including VirtualBox, EC2, Google Compute Engine, OpenStack, and EMC. -[Virtuozzo Storage and Ploop plugin](https://github.com/virtuozzo/docker-volume-ploop) | A volume plugin with support for Virtuozzo Storage distributed cloud file system as well as ploop devices. -[VMware vSphere Storage Plugin](https://github.com/vmware/docker-volume-vsphere) | Docker Volume Driver for vSphere enables customers to address persistent storage requirements for Docker containers in vSphere environments. - -### Authorization plugins - - Plugin | Description -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - [Twistlock AuthZ Broker](https://github.com/twistlock/authz) | A basic extendable authorization plugin that runs directly on the host or inside a container. This plugin allows you to define user policies that it evaluates during authorization. Basic authorization is provided if Docker daemon is started with the --tlsverify flag (username is extracted from the certificate common name). - -## Troubleshooting a plugin - -If you are having problems with Docker after loading a plugin, ask the authors -of the plugin for help. The Docker team may not be able to assist you. - -## Writing a plugin - -If you are interested in writing a plugin for Docker, or seeing how they work -under the hood, see the [docker plugins reference](plugin_api.md). diff --git a/engine/extend/manifest.md b/engine/extend/manifest.md deleted file mode 100644 index 25e87e8af3..0000000000 --- a/engine/extend/manifest.md +++ /dev/null @@ -1,215 +0,0 @@ ---- -advisory: experimental -redirect_from: -- /engine/extend/ -description: How develop and use a plugin with the managed plugin system -keywords: -- API, Usage, plugins, documentation, developer -title: Plugin manifest version 0 of plugin V2 ---- - -This document outlines the format of the V0 plugin manifest. The plugin -manifest described herein was introduced in the Docker daemon (experimental version) in the [v1.12.0 -release](https://github.com/docker/docker/commit/f37117045c5398fd3dca8016ea8ca0cb47e7312b). - -Plugin manifests describe the various constituents of a docker plugin. Plugin -manifests can be serialized to JSON format with the following media types: - -Manifest Type | Media Type -------------- | ------------- -manifest | "application/vnd.docker.plugin.v0+json" - - -## *Manifest* Field Descriptions - -Manifest provides the base accessible fields for working with V0 plugin format - in the registry. - -- **`manifestVersion`** *string* - - version of the plugin manifest (This version uses V0) - -- **`description`** *string* - - description of the plugin - -- **`documentation`** *string* - - link to the documentation about the plugin - -- **`interface`** *PluginInterface* - - interface implemented by the plugins, struct consisting of the following fields - - - **`types`** *string array* - - types indicate what interface(s) the plugin currently implements. - - currently supported: - - - **docker.volumedriver/1.0** - - - **`socket`** *string* - - socket is the name of the socket the engine should use to communicate with the plugins. - the socket will be created in `/run/docker/plugins`. - - -- **`entrypoint`** *string array* - - entrypoint of the plugin, see [`ENTRYPOINT`](../reference/builder.md#entrypoint) - -- **`workdir`** *string* - - workdir of the plugin, see [`WORKDIR`](../reference/builder.md#workdir) - -- **`network`** *PluginNetwork* - - network of the plugin, struct consisting of the following fields - - - **`type`** *string* - - network type. - - currently supported: - - - **bridge** - - **host** - - **none** - -- **`capabilities`** *array* - - capabilities of the plugin (*Linux only*), see list [`here`](https://github.com/opencontainers/runc/blob/master/libcontainer/SPEC.md#security) - -- **`mounts`** *PluginMount array* - - mount of the plugin, struct consisting of the following fields, see [`MOUNTS`](https://github.com/opencontainers/runtime-spec/blob/master/config.md#mounts) - - - **`name`** *string* - - name of the mount. - - - **`description`** *string* - - description of the mount. - - - **`source`** *string* - - source of the mount. - - - **`destination`** *string* - - destination of the mount. - - - **`type`** *string* - - mount type. - - - **`options`** *string array* - - options of the mount. - -- **`devices`** *PluginDevice array* - - device of the plugin, (*Linux only*), struct consisting of the following fields, see [`DEVICES`](https://github.com/opencontainers/runtime-spec/blob/master/config-linux.md#devices) - - - **`name`** *string* - - name of the device. - - - **`description`** *string* - - description of the device. - - - **`path`** *string* - - path of the device. - -- **`env`** *PluginEnv array* - - env of the plugin, struct consisting of the following fields - - - **`name`** *string* - - name of the env. - - - **`description`** *string* - - description of the env. - - - **`value`** *string* - - value of the env. - -- **`args`** *PluginArgs* - - args of the plugin, struct consisting of the following fields - - - **`name`** *string* - - name of the env. - - - **`description`** *string* - - description of the env. - - - **`value`** *string array* - - values of the args. - - -## Example Manifest - -*Example showing the 'tiborvass/no-remove' plugin manifest.* - -``` -{ - "manifestVersion": "v0", - "description": "A test plugin for Docker", - "documentation": "https://docs.docker.com/engine/extend/plugins/", - "entrypoint": ["plugin-no-remove", "/data"], - "interface" : { - "types": ["docker.volumedriver/1.0"], - "socket": "plugins.sock" - }, - "network": { - "type": "host" - }, - - "mounts": [ - { - "source": "/data", - "destination": "/data", - "type": "bind", - "options": ["shared", "rbind"] - }, - { - "destination": "/foobar", - "type": "tmpfs" - } - ], - - "args": { - "name": "args", - "description": "command line arguments", - "value": [] - }, - - "env": [ - { - "name": "DEBUG", - "description": "If set, prints debug messages", - "value": "1" - } - ], - - "devices": [ - { - "name": "device", - "description": "a host device to mount", - "path": "/dev/cpu_dma_latency" - } - ] -} - -``` diff --git a/engine/extend/plugin_api.md b/engine/extend/plugin_api.md deleted file mode 100644 index 0fbe381933..0000000000 --- a/engine/extend/plugin_api.md +++ /dev/null @@ -1,188 +0,0 @@ ---- -redirect_from: - - /extend/plugin_api/ -description: 'How to write Docker plugins extensions ' -keywords: -- API, Usage, plugins, documentation, developer -title: Docker plugin API ---- - -Docker plugins are out-of-process extensions which add capabilities to the -Docker Engine. - -This document describes the Docker Engine plugin API. To view information on -plugins managed by Docker Engine currently in experimental status, refer to -[Docker Engine plugin system](index.md). - -This page is intended for people who want to develop their own Docker plugin. -If you just want to learn about or use Docker plugins, look -[here](legacy_plugins.md). - -## What plugins are - -A plugin is a process running on the same or a different host as the docker daemon, -which registers itself by placing a file on the same docker host in one of the plugin -directories described in [Plugin discovery](plugin_api.md#plugin-discovery). - -Plugins have human-readable names, which are short, lowercase strings. For -example, `flocker` or `weave`. - -Plugins can run inside or outside containers. Currently running them outside -containers is recommended. - -## Plugin discovery - -Docker discovers plugins by looking for them in the plugin directory whenever a -user or container tries to use one by name. - -There are three types of files which can be put in the plugin directory. - -* `.sock` files are UNIX domain sockets. -* `.spec` files are text files containing a URL, such as `unix:///other.sock` or `tcp://localhost:8080`. -* `.json` files are text files containing a full json specification for the plugin. - -Plugins with UNIX domain socket files must run on the same docker host, whereas -plugins with spec or json files can run on a different host if a remote URL is specified. - -UNIX domain socket files must be located under `/run/docker/plugins`, whereas -spec files can be located either under `/etc/docker/plugins` or `/usr/lib/docker/plugins`. - -The name of the file (excluding the extension) determines the plugin name. - -For example, the `flocker` plugin might create a UNIX socket at -`/run/docker/plugins/flocker.sock`. - -You can define each plugin into a separated subdirectory if you want to isolate definitions from each other. -For example, you can create the `flocker` socket under `/run/docker/plugins/flocker/flocker.sock` and only -mount `/run/docker/plugins/flocker` inside the `flocker` container. - -Docker always searches for unix sockets in `/run/docker/plugins` first. It checks for spec or json files under -`/etc/docker/plugins` and `/usr/lib/docker/plugins` if the socket doesn't exist. The directory scan stops as -soon as it finds the first plugin definition with the given name. - -### JSON specification - -This is the JSON format for a plugin: - -```json -{ - "Name": "plugin-example", - "Addr": "https://example.com/docker/plugin", - "TLSConfig": { - "InsecureSkipVerify": false, - "CAFile": "/usr/shared/docker/certs/example-ca.pem", - "CertFile": "/usr/shared/docker/certs/example-cert.pem", - "KeyFile": "/usr/shared/docker/certs/example-key.pem", - } -} -``` - -The `TLSConfig` field is optional and TLS will only be verified if this configuration is present. - -## Plugin lifecycle - -Plugins should be started before Docker, and stopped after Docker. For -example, when packaging a plugin for a platform which supports `systemd`, you -might use [`systemd` dependencies]( -http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Before=) to -manage startup and shutdown order. - -When upgrading a plugin, you should first stop the Docker daemon, upgrade the -plugin, then start Docker again. - -## Plugin activation - -When a plugin is first referred to -- either by a user referring to it by name -(e.g. `docker run --volume-driver=foo`) or a container already configured to -use a plugin being started -- Docker looks for the named plugin in the plugin -directory and activates it with a handshake. See Handshake API below. - -Plugins are *not* activated automatically at Docker daemon startup. Rather, -they are activated only lazily, or on-demand, when they are needed. - -## Systemd socket activation - -Plugins may also be socket activated by `systemd`. The official [Plugins helpers](https://github.com/docker/go-plugins-helpers) -natively supports socket activation. In order for a plugin to be socket activated it needs -a `service` file and a `socket` file. - -The `service` file (for example `/lib/systemd/system/your-plugin.service`): - -``` -[Unit] -Description=Your plugin -Before=docker.service -After=network.target your-plugin.socket -Requires=your-plugin.socket docker.service - -[Service] -ExecStart=/usr/lib/docker/your-plugin - -[Install] -WantedBy=multi-user.target -``` -The `socket` file (for example `/lib/systemd/system/your-plugin.socket`): -``` -[Unit] -Description=Your plugin - -[Socket] -ListenStream=/run/docker/plugins/your-plugin.sock - -[Install] -WantedBy=sockets.target -``` - -This will allow plugins to be actually started when the Docker daemon connects to -the sockets they're listening on (for instance the first time the daemon uses them -or if one of the plugin goes down accidentally). - -## API design - -The Plugin API is RPC-style JSON over HTTP, much like webhooks. - -Requests flow *from* the Docker daemon *to* the plugin. So the plugin needs to -implement an HTTP server and bind this to the UNIX socket mentioned in the -"plugin discovery" section. - -All requests are HTTP `POST` requests. - -The API is versioned via an Accept header, which currently is always set to -`application/vnd.docker.plugins.v1+json`. - -## Handshake API - -Plugins are activated via the following "handshake" API call. - -### /Plugin.Activate - -**Request:** empty body - -**Response:** -``` -{ - "Implements": ["VolumeDriver"] -} -``` - -Responds with a list of Docker subsystems which this plugin implements. -After activation, the plugin will then be sent events from this subsystem. - -Possible values are: - -* [`authz`](plugins_authorization.md) -* [`NetworkDriver`](plugins_network.md) -* [`VolumeDriver`](plugins_volume.md) - - -## Plugin retries - -Attempts to call a method on a plugin are retried with an exponential backoff -for up to 30 seconds. This may help when packaging plugins as containers, since -it gives plugin containers a chance to start up before failing any user -containers which depend on them. - -## Plugins helpers - -To ease plugins development, we're providing an `sdk` for each kind of plugins -currently supported by Docker at [docker/go-plugins-helpers](https://github.com/docker/go-plugins-helpers). diff --git a/engine/extend/plugins_authorization.md b/engine/extend/plugins_authorization.md deleted file mode 100644 index ab29edf903..0000000000 --- a/engine/extend/plugins_authorization.md +++ /dev/null @@ -1,248 +0,0 @@ ---- -redirect_from: -- /engine/extend/authorization/ -description: How to create authorization plugins to manage access control to your Docker daemon. -keywords: -- security, authorization, authentication, docker, documentation, plugin, extend -title: Create an authorization plugin ---- - -This document describes the Docker Engine plugins generally available in Docker -Engine. To view information on plugins managed by Docker Engine currently in -experimental status, refer to [Docker Engine plugin system](index.md). - -Docker's out-of-the-box authorization model is all or nothing. Any user with -permission to access the Docker daemon can run any Docker client command. The -same is true for callers using Docker's remote API to contact the daemon. If you -require greater access control, you can create authorization plugins and add -them to your Docker daemon configuration. Using an authorization plugin, a -Docker administrator can configure granular access policies for managing access -to Docker daemon. - -Anyone with the appropriate skills can develop an authorization plugin. These -skills, at their most basic, are knowledge of Docker, understanding of REST, and -sound programming knowledge. This document describes the architecture, state, -and methods information available to an authorization plugin developer. - -## Basic principles - -Docker's [plugin infrastructure](plugin_api.md) enables -extending Docker by loading, removing and communicating with -third-party components using a generic API. The access authorization subsystem -was built using this mechanism. - -Using this subsystem, you don't need to rebuild the Docker daemon to add an -authorization plugin. You can add a plugin to an installed Docker daemon. You do -need to restart the Docker daemon to add a new plugin. - -An authorization plugin approves or denies requests to the Docker daemon based -on both the current authentication context and the command context. The -authentication context contains all user details and the authentication method. -The command context contains all the relevant request data. - -Authorization plugins must follow the rules described in [Docker Plugin API](plugin_api.md). -Each plugin must reside within directories described under the -[Plugin discovery](plugin_api.md#plugin-discovery) section. - -**Note**: the abbreviations `AuthZ` and `AuthN` mean authorization and authentication -respectively. - -## Default user authorization mechanism - -If TLS is enabled in the [Docker daemon](../security/https.md), the default user authorization flow extracts the user details from the certificate subject name. -That is, the `User` field is set to the client certificate subject common name, and the `AuthenticationMethod` field is set to `TLS`. - -## Basic architecture - -You are responsible for registering your plugin as part of the Docker daemon -startup. You can install multiple plugins and chain them together. This chain -can be ordered. Each request to the daemon passes in order through the chain. -Only when all the plugins grant access to the resource, is the access granted. - -When an HTTP request is made to the Docker daemon through the CLI or via the -remote API, the authentication subsystem passes the request to the installed -authentication plugin(s). The request contains the user (caller) and command -context. The plugin is responsible for deciding whether to allow or deny the -request. - -The sequence diagrams below depict an allow and deny authorization flow: - -![Authorization Allow flow](images/authz_allow.png) - -![Authorization Deny flow](images/authz_deny.png) - -Each request sent to the plugin includes the authenticated user, the HTTP -headers, and the request/response body. Only the user name and the -authentication method used are passed to the plugin. Most importantly, no user -credentials or tokens are passed. Finally, not all request/response bodies -are sent to the authorization plugin. Only those request/response bodies where -the `Content-Type` is either `text/*` or `application/json` are sent. - -For commands that can potentially hijack the HTTP connection (`HTTP -Upgrade`), such as `exec`, the authorization plugin is only called for the -initial HTTP requests. Once the plugin approves the command, authorization is -not applied to the rest of the flow. Specifically, the streaming data is not -passed to the authorization plugins. For commands that return chunked HTTP -response, such as `logs` and `events`, only the HTTP request is sent to the -authorization plugins. - -During request/response processing, some authorization flows might -need to do additional queries to the Docker daemon. To complete such flows, -plugins can call the daemon API similar to a regular user. To enable these -additional queries, the plugin must provide the means for an administrator to -configure proper authentication and security policies. - -## Docker client flows - -To enable and configure the authorization plugin, the plugin developer must -support the Docker client interactions detailed in this section. - -### Setting up Docker daemon - -Enable the authorization plugin with a dedicated command line flag in the -`--authorization-plugin=PLUGIN_ID` format. The flag supplies a `PLUGIN_ID` -value. This value can be the plugin’s socket or a path to a specification file. - -```bash -$ dockerd --authorization-plugin=plugin1 --authorization-plugin=plugin2,... -``` - -Docker's authorization subsystem supports multiple `--authorization-plugin` parameters. - -### Calling authorized command (allow) - -```bash -$ docker pull centos -... -f1b10cd84249: Pull complete -... -``` - -### Calling unauthorized command (deny) - -```bash -$ docker pull centos -... -docker: Error response from daemon: authorization denied by plugin PLUGIN_NAME: volumes are not allowed. -``` - -### Error from plugins - -```bash -$ docker pull centos -... -docker: Error response from daemon: plugin PLUGIN_NAME failed with error: AuthZPlugin.AuthZReq: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. -``` - -## API schema and implementation - -In addition to Docker's standard plugin registration method, each plugin -should implement the following two methods: - -* `/AuthZPlugin.AuthZReq` This authorize request method is called before the Docker daemon processes the client request. - -* `/AuthZPlugin.AuthZRes` This authorize response method is called before the response is returned from Docker daemon to the client. - -#### /AuthZPlugin.AuthZReq - -**Request**: - -```json -{ - "User": "The user identification", - "UserAuthNMethod": "The authentication method used", - "RequestMethod": "The HTTP method", - "RequestURI": "The HTTP request URI", - "RequestBody": "Byte array containing the raw HTTP request body", - "RequestHeader": "Byte array containing the raw HTTP request header as a map[string][]string " -} -``` - -**Response**: - -```json -{ - "Allow": "Determined whether the user is allowed or not", - "Msg": "The authorization message", - "Err": "The error message if things go wrong" -} -``` -#### /AuthZPlugin.AuthZRes - -**Request**: - -```json -{ - "User": "The user identification", - "UserAuthNMethod": "The authentication method used", - "RequestMethod": "The HTTP method", - "RequestURI": "The HTTP request URI", - "RequestBody": "Byte array containing the raw HTTP request body", - "RequestHeader": "Byte array containing the raw HTTP request header as a map[string][]string", - "ResponseBody": "Byte array containing the raw HTTP response body", - "ResponseHeader": "Byte array containing the raw HTTP response header as a map[string][]string", - "ResponseStatusCode":"Response status code" -} -``` - -**Response**: - -```json -{ - "Allow": "Determined whether the user is allowed or not", - "Msg": "The authorization message", - "Err": "The error message if things go wrong" -} -``` - -### Request authorization - -Each plugin must support two request authorization messages formats, one from the daemon to the plugin and then from the plugin to the daemon. The tables below detail the content expected in each message. - -#### Daemon -> Plugin - -Name | Type | Description ------------------------|-------------------|------------------------------------------------------- -User | string | The user identification -Authentication method | string | The authentication method used -Request method | enum | The HTTP method (GET/DELETE/POST) -Request URI | string | The HTTP request URI including API version (e.g., v.1.17/containers/json) -Request headers | map[string]string | Request headers as key value pairs (without the authorization header) -Request body | []byte | Raw request body - - -#### Plugin -> Daemon - -Name | Type | Description ---------|--------|---------------------------------------------------------------------------------- -Allow | bool | Boolean value indicating whether the request is allowed or denied -Msg | string | Authorization message (will be returned to the client in case the access is denied) -Err | string | Error message (will be returned to the client in case the plugin encounter an error. The string value supplied may appear in logs, so should not include confidential information) - -### Response authorization - -The plugin must support two authorization messages formats, one from the daemon to the plugin and then from the plugin to the daemon. The tables below detail the content expected in each message. - -#### Daemon -> Plugin - - -Name | Type | Description ------------------------ |------------------ |---------------------------------------------------- -User | string | The user identification -Authentication method | string | The authentication method used -Request method | string | The HTTP method (GET/DELETE/POST) -Request URI | string | The HTTP request URI including API version (e.g., v.1.17/containers/json) -Request headers | map[string]string | Request headers as key value pairs (without the authorization header) -Request body | []byte | Raw request body -Response status code | int | Status code from the docker daemon -Response headers | map[string]string | Response headers as key value pairs -Response body | []byte | Raw docker daemon response body - - -#### Plugin -> Daemon - -Name | Type | Description ---------|--------|---------------------------------------------------------------------------------- -Allow | bool | Boolean value indicating whether the response is allowed or denied -Msg | string | Authorization message (will be returned to the client in case the access is denied) -Err | string | Error message (will be returned to the client in case the plugin encounter an error. The string value supplied may appear in logs, so should not include confidential information) diff --git a/engine/extend/plugins_network.md b/engine/extend/plugins_network.md deleted file mode 100644 index f3e048c7cf..0000000000 --- a/engine/extend/plugins_network.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -description: Network driver plugins. -keywords: -- Examples, Usage, plugins, docker, documentation, user guide -title: Use network plugins ---- - -This document describes Docker Engine network driver plugins generally -available in Docker Engine. To view information on plugins -managed by Docker Engine, refer to [Docker Engine plugin system](index.md). - -Docker Engine network plugins enable Engine deployments to be extended to -support a wide range of networking technologies, such as VXLAN, IPVLAN, MACVLAN -or something completely different. Network driver plugins are supported via the -LibNetwork project. Each plugin is implemented as a "remote driver" for -LibNetwork, which shares plugin infrastructure with Engine. Effectively, network -driver plugins are activated in the same way as other plugins, and use the same -kind of protocol. - -## Network driver plugins and swarm mode - -Docker 1.12 adds support for cluster management and orchestration called -[swarm mode](../swarm/index.md). Docker Engine running in swarm mode currently -only supports the built-in overlay driver for networking. Therefore existing -networking plugins will not work in swarm mode. - -When you run Docker Engine outside of swarm mode, all networking plugins that -worked in Docker 1.11 will continue to function normally. They do not require -any modification. - -## Using network driver plugins - -The means of installing and running a network driver plugin depend on the -particular plugin. So, be sure to install your plugin according to the -instructions obtained from the plugin developer. - -Once running however, network driver plugins are used just like the built-in -network drivers: by being mentioned as a driver in network-oriented Docker -commands. For example, - - $ docker network create --driver weave mynet - -Some network driver plugins are listed in [plugins](legacy_plugins.md) - -The `mynet` network is now owned by `weave`, so subsequent commands -referring to that network will be sent to the plugin, - - $ docker run --network=mynet busybox top - - -## Write a network plugin - -Network plugins implement the [Docker plugin -API](/extend/plugin_api/) and the network plugin protocol - -## Network plugin protocol - -The network driver protocol, in addition to the plugin activation call, is -documented as part of libnetwork: -[https://github.com/docker/libnetwork/blob/master/docs/remote.md](https://github.com/docker/libnetwork/blob/master/docs/remote.md). - -# Related Information - -To interact with the Docker maintainers and other interested users, see the IRC channel `#docker-network`. - -- [Docker networks feature overview](../userguide/networking/index.md) -- The [LibNetwork](https://github.com/docker/libnetwork) project diff --git a/engine/extend/plugins_volume.md b/engine/extend/plugins_volume.md deleted file mode 100644 index f0bf6b6f08..0000000000 --- a/engine/extend/plugins_volume.md +++ /dev/null @@ -1,262 +0,0 @@ ---- -description: How to manage data with external volume plugins -keywords: -- Examples, Usage, volume, docker, data, volumes, plugin, api -title: Write a volume plugin ---- - -Docker Engine volume plugins enable Engine deployments to be integrated with -external storage systems, such as Amazon EBS, and enable data volumes to persist -beyond the lifetime of a single Engine host. See the -[plugin documentation](legacy_plugins.md) for more information. - -## Changelog - -### 1.12.0 - -- Add `Status` field to `VolumeDriver.Get` response ([#21006](https://github.com/docker/docker/pull/21006#)) -- Add `VolumeDriver.Capabilities` to get capabilities of the volume driver([#22077](https://github.com/docker/docker/pull/22077)) - -### 1.10.0 - -- Add `VolumeDriver.Get` which gets the details about the volume ([#16534](https://github.com/docker/docker/pull/16534)) -- Add `VolumeDriver.List` which lists all volumes owned by the driver ([#16534](https://github.com/docker/docker/pull/16534)) - -### 1.8.0 - -- Initial support for volume driver plugins ([#14659](https://github.com/docker/docker/pull/14659)) - -## Command-line changes - -A volume plugin makes use of the `-v` and `--volume-driver` flag on the `docker run` command. The `-v` flag accepts a volume name and the `--volume-driver` flag a driver type, for example: - - $ docker run -ti -v volumename:/data --volume-driver=flocker busybox sh - -This command passes the `volumename` through to the volume plugin as a -user-given name for the volume. The `volumename` must not begin with a `/`. - -By having the user specify a `volumename`, a plugin can associate the volume -with an external volume beyond the lifetime of a single container or container -host. This can be used, for example, to move a stateful container from one -server to another. - -By specifying a `volumedriver` in conjunction with a `volumename`, users can use plugins such as [Flocker](https://clusterhq.com/docker-plugin/) to manage volumes external to a single host, such as those on EBS. - - -## Create a VolumeDriver - -The container creation endpoint (`/containers/create`) accepts a `VolumeDriver` -field of type `string` allowing to specify the name of the driver. It's default -value of `"local"` (the default driver for local volumes). - -## Volume plugin protocol - -If a plugin registers itself as a `VolumeDriver` when activated, then it is -expected to provide writeable paths on the host filesystem for the Docker -daemon to provide to containers to consume. - -The Docker daemon handles bind-mounting the provided paths into user -containers. - -> **Note**: Volume plugins should *not* write data to the `/var/lib/docker/` -> directory, including `/var/lib/docker/volumes`. The `/var/lib/docker/` -> directory is reserved for Docker. - -### /VolumeDriver.Create - -**Request**: -```json -{ - "Name": "volume_name", - "Opts": {} -} -``` - -Instruct the plugin that the user wants to create a volume, given a user -specified volume name. The plugin does not need to actually manifest the -volume on the filesystem yet (until Mount is called). -Opts is a map of driver specific options passed through from the user request. - -**Response**: -```json -{ - "Err": "" -} -``` - -Respond with a string error if an error occurred. - -### /VolumeDriver.Remove - -**Request**: -```json -{ - "Name": "volume_name" -} -``` - -Delete the specified volume from disk. This request is issued when a user invokes `docker rm -v` to remove volumes associated with a container. - -**Response**: -```json -{ - "Err": "" -} -``` - -Respond with a string error if an error occurred. - -### /VolumeDriver.Mount - -**Request**: -```json -{ - "Name": "volume_name", - "ID": "b87d7442095999a92b65b3d9691e697b61713829cc0ffd1bb72e4ccd51aa4d6c" -} -``` - -Docker requires the plugin to provide a volume, given a user specified volume -name. This is called once per container start. If the same volume_name is requested -more than once, the plugin may need to keep track of each new mount request and provision -at the first mount request and deprovision at the last corresponding unmount request. - -`ID` is a unique ID for the caller that is requesting the mount. - -**Response**: -```json -{ - "Mountpoint": "/path/to/directory/on/host", - "Err": "" -} -``` - -Respond with the path on the host filesystem where the volume has been made -available, and/or a string error if an error occurred. - -### /VolumeDriver.Path - -**Request**: -```json -{ - "Name": "volume_name" -} -``` - -Docker needs reminding of the path to the volume on the host. - -**Response**: -```json -{ - "Mountpoint": "/path/to/directory/on/host", - "Err": "" -} -``` - -Respond with the path on the host filesystem where the volume has been made -available, and/or a string error if an error occurred. `Mountpoint` is optional, -however the plugin may be queried again later if one is not provided. - -### /VolumeDriver.Unmount - -**Request**: -```json -{ - "Name": "volume_name", - "ID": "b87d7442095999a92b65b3d9691e697b61713829cc0ffd1bb72e4ccd51aa4d6c" -} -``` - -Indication that Docker no longer is using the named volume. This is called once -per container stop. Plugin may deduce that it is safe to deprovision it at -this point. - -`ID` is a unique ID for the caller that is requesting the mount. - -**Response**: -```json -{ - "Err": "" -} -``` - -Respond with a string error if an error occurred. - - -### /VolumeDriver.Get - -**Request**: -```json -{ - "Name": "volume_name" -} -``` - -Get the volume info. - - -**Response**: -```json -{ - "Volume": { - "Name": "volume_name", - "Mountpoint": "/path/to/directory/on/host", - "Status": {} - }, - "Err": "" -} -``` - -Respond with a string error if an error occurred. `Mountpoint` and `Status` are -optional. - - -### /VolumeDriver.List - -**Request**: -```json -{} -``` - -Get the list of volumes registered with the plugin. - -**Response**: -```json -{ - "Volumes": [ - { - "Name": "volume_name", - "Mountpoint": "/path/to/directory/on/host" - } - ], - "Err": "" -} -``` - -Respond with a string error if an error occurred. `Mountpoint` is optional. - -### /VolumeDriver.Capabilities - -**Request**: -```json -{} -``` - -Get the list of capabilities the driver supports. -The driver is not required to implement this endpoint, however in such cases -the default values will be taken. - -**Response**: -```json -{ - "Capabilities": { - "Scope": "global" - } -} -``` - -Supported scopes are `global` and `local`. Any other value in `Scope` will be -ignored and assumed to be `local`. Scope allows cluster managers to handle the -volume differently, for instance with a scope of `global`, the cluster manager -knows it only needs to create the volume once instead of on every engine. More -capabilities may be added in the future. diff --git a/engine/reference/api/README.md b/engine/reference/api/README.md deleted file mode 100644 index 9c2c1b7407..0000000000 --- a/engine/reference/api/README.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -published: false ---- - -This directory holds the authoritative specifications of APIs defined and implemented by Docker. Currently this includes: - - * The remote API by which a docker node can be queried over HTTP - * The registry API by which a docker node can download and upload - images for storage and sharing - * The index search API by which a docker node can search the public - index for images to download - * The docker.io OAuth and accounts API which 3rd party services can - use to access account information diff --git a/engine/reference/api/_static/io_oauth_authorization_page.png b/engine/reference/api/_static/io_oauth_authorization_page.png deleted file mode 100644 index 455d631e178921fd513e05b5418fd9f588c6e6a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39458 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 z 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 diff --git a/engine/reference/api/docker-io_api.md b/engine/reference/api/docker-io_api.md deleted file mode 100644 index a459fe83c1..0000000000 --- a/engine/reference/api/docker-io_api.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -redirect_from: - - /reference/api/docker-io_api/ -description: API Documentation for the Docker Hub API -published: false -keywords: -- API, Docker, index, REST, documentation, Docker Hub, registry -title: Docker Hub API ---- - -This API is deprecated as of 1.7. To view the old version, see the [Docker Hub -API](/v1.7/docker/reference/api/docker-io_api/) in the 1.7 documentation. diff --git a/engine/reference/api/docker_io_accounts_api.md b/engine/reference/api/docker_io_accounts_api.md deleted file mode 100644 index 881f14ade7..0000000000 --- a/engine/reference/api/docker_io_accounts_api.md +++ /dev/null @@ -1,273 +0,0 @@ ---- -redirect_from: - - /reference/api/docker_io_accounts_api/ -description: API Documentation for docker.io accounts. -keywords: -- API, Docker, accounts, REST, documentation -title: Accounts API for docker.io ---- - -## Get a single user - -`GET /api/v1.1/users/:username/` - -Get profile info for the specified user. - -Parameters: - -- **username** – username of the user whose profile info is being - requested. - -Request Headers: - -- **Authorization** – required authentication credentials of - either type HTTP Basic or OAuth Bearer Token. - -Status Codes: - -- **200** – success, user data returned. -- **401** – authentication error. -- **403** – permission error, authenticated user must be the user - whose data is being requested, OAuth access tokens must have - `profile_read` scope. -- **404** – the specified username does not exist. - -**Example request**: - - GET /api/v1.1/users/janedoe/ HTTP/1.1 - Host: www.docker.io - Accept: application/json - Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "id": 2, - "username": "janedoe", - "url": "https://www.docker.io/api/v1.1/users/janedoe/", - "date_joined": "2014-02-12T17:58:01.431312Z", - "type": "User", - "full_name": "Jane Doe", - "location": "San Francisco, CA", - "company": "Success, Inc.", - "profile_url": "https://docker.io/", - "gravatar_url": "https://secure.gravatar.com/avatar/0212b397124be4acd4e7dea9aa357.jpg?s=80&r=g&d=mm" - "email": "jane.doe@example.com", - "is_active": true - } - -## Update a single user - -`PATCH /api/v1.1/users/:username/` - -Update profile info for the specified user. - -Parameters: - -- **username** – username of the user whose profile info is being - updated. - -Json Parameters: - -- **full_name** (*string*) – (optional) the new name of the user. -- **location** (*string*) – (optional) the new location. -- **company** (*string*) – (optional) the new company of the user. -- **profile_url** (*string*) – (optional) the new profile url. -- **gravatar_email** (*string*) – (optional) the new Gravatar - email address. - -Request Headers: - -- **Authorization** – required authentication credentials of - either type HTTP Basic or OAuth Bearer Token. -- **Content-Type** – MIME Type of post data. JSON, url-encoded - form data, etc. - -Status Codes: - -- **200** – success, user data updated. -- **400** – post data validation error. -- **401** – authentication error. -- **403** – permission error, authenticated user must be the user - whose data is being updated, OAuth access tokens must have - `profile_write` scope. -- **404** – the specified username does not exist. - -**Example request**: - - PATCH /api/v1.1/users/janedoe/ HTTP/1.1 - Host: www.docker.io - Accept: application/json - Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= - - { - "location": "Private Island", - "profile_url": "http://janedoe.com/", - "company": "Retired", - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "id": 2, - "username": "janedoe", - "url": "https://www.docker.io/api/v1.1/users/janedoe/", - "date_joined": "2014-02-12T17:58:01.431312Z", - "type": "User", - "full_name": "Jane Doe", - "location": "Private Island", - "company": "Retired", - "profile_url": "http://janedoe.com/", - "gravatar_url": "https://secure.gravatar.com/avatar/0212b397124be4acd4e7dea9aa357.jpg?s=80&r=g&d=mm" - "email": "jane.doe@example.com", - "is_active": true - } - -## List email addresses for a user - -`GET /api/v1.1/users/:username/emails/` - -List email info for the specified user. - -Parameters: - -- **username** – username of the user whose profile info is being - updated. - -Request Headers: - -- **Authorization** – required authentication credentials of - either type HTTP Basic or OAuth Bearer Token - -Status Codes: - -- **200** – success, user data updated. -- **401** – authentication error. -- **403** – permission error, authenticated user must be the user - whose data is being requested, OAuth access tokens must have - `email_read` scope. -- **404** – the specified username does not exist. - -**Example request**: - - GET /api/v1.1/users/janedoe/emails/ HTTP/1.1 - Host: www.docker.io - Accept: application/json - Authorization: Bearer zAy0BxC1wDv2EuF3tGs4HrI6qJp6KoL7nM - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "email": "jane.doe@example.com", - "verified": true, - "primary": true - } - ] - -## Add email address for a user - -`POST /api/v1.1/users/:username/emails/` - -Add a new email address to the specified user's account. The email -address must be verified separately, a confirmation email is not -automatically sent. - -Json Parameters: - -- **email** (*string*) – email address to be added. - -Request Headers: - -- **Authorization** – required authentication credentials of - either type HTTP Basic or OAuth Bearer Token. -- **Content-Type** – MIME Type of post data. JSON, url-encoded - form data, etc. - -Status Codes: - -- **201** – success, new email added. -- **400** – data validation error. -- **401** – authentication error. -- **403** – permission error, authenticated user must be the user - whose data is being requested, OAuth access tokens must have - `email_write` scope. -- **404** – the specified username does not exist. - -**Example request**: - - POST /api/v1.1/users/janedoe/emails/ HTTP/1.1 - Host: www.docker.io - Accept: application/json - Content-Type: application/json - Authorization: Bearer zAy0BxC1wDv2EuF3tGs4HrI6qJp6KoL7nM - - { - "email": "jane.doe+other@example.com" - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "email": "jane.doe+other@example.com", - "verified": false, - "primary": false - } - -## Delete email address for a user - -`DELETE /api/v1.1/users/:username/emails/` - -Delete an email address from the specified user's account. You -cannot delete a user's primary email address. - -Json Parameters: - -- **email** (*string*) – email address to be deleted. - -Request Headers: - -- **Authorization** – required authentication credentials of - either type HTTP Basic or OAuth Bearer Token. -- **Content-Type** – MIME Type of post data. JSON, url-encoded - form data, etc. - -Status Codes: - -- **204** – success, email address removed. -- **400** – validation error. -- **401** – authentication error. -- **403** – permission error, authenticated user must be the user - whose data is being requested, OAuth access tokens must have - `email_write` scope. -- **404** – the specified username or email address does not - exist. - -**Example request**: - - DELETE /api/v1.1/users/janedoe/emails/ HTTP/1.1 - Host: www.docker.io - Accept: application/json - Content-Type: application/json - Authorization: Bearer zAy0BxC1wDv2EuF3tGs4HrI6qJp6KoL7nM - - { - "email": "jane.doe+other@example.com" - } - -**Example response**: - - HTTP/1.1 204 NO CONTENT - Content-Length: 0 diff --git a/engine/reference/api/docker_remote_api.md b/engine/reference/api/docker_remote_api.md deleted file mode 100644 index 2b3c7265cf..0000000000 --- a/engine/reference/api/docker_remote_api.md +++ /dev/null @@ -1,271 +0,0 @@ ---- -redirect_from: - - /reference/api/docker_remote_api/ -description: API Documentation for Docker -keywords: -- API, Docker, rcli, REST, documentation -title: Docker Remote API ---- - -Docker's Remote API uses an open schema model. In this model, unknown -properties in incoming messages are ignored. Client applications need to take -this behavior into account to ensure they do not break when talking to newer -Docker daemons. - -The API tends to be REST, but for some complex commands, like attach or pull, -the HTTP connection is hijacked to transport STDOUT, STDIN, and STDERR. - -By default the Docker daemon listens on `unix:///var/run/docker.sock` and the -client must have `root` access to interact with the daemon. If a group named -`docker` exists on your system, `docker` applies ownership of the socket to the -group. - -To connect to the Docker daemon with cURL you need to use cURL 7.40 or -later, as these versions have the `--unix-socket` flag available. To -run `curl` against the daemon on the default socket, use the -following: - - curl --unix-socket /var/run/docker.sock http:/containers/json - -If you have bound the Docker daemon to a different socket path or TCP -port, you would reference that in your cURL rather than the -default. - -The current version of the API is v1.24 which means calling `/info` is the same -as calling `/v1.24/info`. To call an older version of the API use -`/v1.23/info`. If a newer daemon is installed, new properties may be returned -even when calling older versions of the API. - -Use the table below to find the API version for a Docker version: - -Docker version | API version | Changes -----------------|------------------------------------|------------------------------------------------------ -1.12.x | [1.24](docker_remote_api_v1.24.md) | [API changes](docker_remote_api.md#v1-24-api-changes) -1.11.x | [1.23](docker_remote_api_v1.23.md) | [API changes](docker_remote_api.md#v1-23-api-changes) -1.10.x | [1.22](docker_remote_api_v1.22.md) | [API changes](docker_remote_api.md#v1-22-api-changes) -1.9.x | [1.21](docker_remote_api_v1.21.md) | [API changes](docker_remote_api.md#v1-21-api-changes) -1.8.x | [1.20](docker_remote_api_v1.20.md) | [API changes](docker_remote_api.md#v1-20-api-changes) -1.7.x | [1.19](docker_remote_api_v1.19.md) | [API changes](docker_remote_api.md#v1-19-api-changes) -1.6.x | [1.18](docker_remote_api_v1.18.md) | [API changes](docker_remote_api.md#v1-18-api-changes) - -Refer to the [GitHub repository]( -https://github.com/docker/docker/tree/master/docs/reference/api) for -older releases. - -## Authentication - -Authentication configuration is handled client side, so the -client has to send the `authConfig` as a `POST` in `/images/(name)/push`. The -`authConfig`, set as the `X-Registry-Auth` header, is currently a Base64 encoded -(JSON) string with the following structure: - -```JSON -{"username": "string", "password": "string", "email": "string", - "serveraddress" : "string", "auth": ""} -``` - -Callers should leave the `auth` empty. The `serveraddress` is a domain/ip -without protocol. Throughout this structure, double quotes are required. - -## Using Docker Machine with the API - -If you are using `docker-machine`, the Docker daemon is on a host that -uses an encrypted TCP socket using TLS. This means, for Docker Machine users, -you need to add extra parameters to `curl` or `wget` when making test -API requests, for example: - -``` -curl --insecure \ - --cert $DOCKER_CERT_PATH/cert.pem \ - --key $DOCKER_CERT_PATH/key.pem \ - https://YOUR_VM_IP:2376/images/json - -wget --no-check-certificate --certificate=$DOCKER_CERT_PATH/cert.pem \ - --private-key=$DOCKER_CERT_PATH/key.pem \ - https://YOUR_VM_IP:2376/images/json -O - -q -``` - -## Docker Events - -The following diagram depicts the container states accessible through the API. - -![States](images/event_state.png) - -Some container-related events are not affected by container state, so they are not included in this diagram. These events are: - -* **export** emitted by `docker export` -* **exec_create** emitted by `docker exec` -* **exec_start** emitted by `docker exec` after **exec_create** -* **detach** emitted when client is detached from container process -* **exec_detach** emitted when client is detached from exec process - -Running `docker rmi` emits an **untag** event when removing an image name. The `rmi` command may also emit **delete** events when images are deleted by ID directly or by deleting the last tag referring to the image. - -> **Acknowledgment**: This diagram and the accompanying text were used with the permission of Matt Good and Gilder Labs. See Matt's original blog post [Docker Events Explained](https://gliderlabs.com/blog/2015/04/14/docker-events-explained/). - -## Version history - -This section lists each version from latest to oldest. Each listing includes a link to the full documentation set and the changes relevant in that release. - -### v1.24 API changes - -[Docker Remote API v1.24](docker_remote_api_v1.24.md) documentation - -* `POST /containers/create` now takes `StorageOpt` field. -* `GET /info` now returns `SecurityOptions` field, showing if `apparmor`, `seccomp`, or `selinux` is supported. -* `GET /info` no longer returns the `ExecutionDriver` property. This property was no longer used after integration - with ContainerD in Docker 1.11. -* `GET /networks` now supports filtering by `label` and `driver`. -* `GET /containers/json` now supports filtering containers by `network` name or id. -* `POST /containers/create` now takes `IOMaximumBandwidth` and `IOMaximumIOps` fields. Windows daemon only. -* `POST /containers/create` now returns an HTTP 400 "bad parameter" message - if no command is specified (instead of an HTTP 500 "server error") -* `GET /images/search` now takes a `filters` query parameter. -* `GET /events` now supports a `reload` event that is emitted when the daemon configuration is reloaded. -* `GET /events` now supports filtering by daemon name or ID. -* `GET /events` now supports a `detach` event that is emitted on detaching from container process. -* `GET /events` now supports an `exec_detach ` event that is emitted on detaching from exec process. -* `GET /images/json` now supports filters `since` and `before`. -* `POST /containers/(id or name)/start` no longer accepts a `HostConfig`. -* `POST /images/(name)/tag` no longer has a `force` query parameter. -* `GET /images/search` now supports maximum returned search results `limit`. -* `POST /containers/{name:.*}/copy` is now removed and errors out starting from this API version. -* API errors are now returned as JSON instead of plain text. -* `POST /containers/create` and `POST /containers/(id)/start` allow you to configure kernel parameters (sysctls) for use in the container. -* `POST /containers//exec` and `POST /exec//start` - no longer expects a "Container" field to be present. This property was not used - and is no longer sent by the docker client. -* `POST /containers/create/` now validates the hostname (should be a valid RFC 1123 hostname). -* `POST /containers/create/` `HostConfig.PidMode` field now accepts `container:`, - to have the container join the PID namespace of an existing container. - -### v1.23 API changes - -[Docker Remote API v1.23](docker_remote_api_v1.23.md) documentation - -* `GET /containers/json` returns the state of the container, one of `created`, `restarting`, `running`, `paused`, `exited` or `dead`. -* `GET /containers/json` returns the mount points for the container. -* `GET /networks/(name)` now returns an `Internal` field showing whether the network is internal or not. -* `GET /networks/(name)` now returns an `EnableIPv6` field showing whether the network has ipv6 enabled or not. -* `POST /containers/(name)/update` now supports updating container's restart policy. -* `POST /networks/create` now supports enabling ipv6 on the network by setting the `EnableIPv6` field (doing this with a label will no longer work). -* `GET /info` now returns `CgroupDriver` field showing what cgroup driver the daemon is using; `cgroupfs` or `systemd`. -* `GET /info` now returns `KernelMemory` field, showing if "kernel memory limit" is supported. -* `POST /containers/create` now takes `PidsLimit` field, if the kernel is >= 4.3 and the pids cgroup is supported. -* `GET /containers/(id or name)/stats` now returns `pids_stats`, if the kernel is >= 4.3 and the pids cgroup is supported. -* `POST /containers/create` now allows you to override usernamespaces remapping and use privileged options for the container. -* `POST /containers/create` now allows specifying `nocopy` for named volumes, which disables automatic copying from the container path to the volume. -* `POST /auth` now returns an `IdentityToken` when supported by a registry. -* `POST /containers/create` with both `Hostname` and `Domainname` fields specified will result in the container's hostname being set to `Hostname`, rather than `Hostname.Domainname`. -* `GET /volumes` now supports more filters, new added filters are `name` and `driver`. -* `GET /containers/(id or name)/logs` now accepts a `details` query parameter to stream the extra attributes that were provided to the containers `LogOpts`, such as environment variables and labels, with the logs. -* `POST /images/load` now returns progress information as a JSON stream, and has a `quiet` query parameter to suppress progress details. - -### v1.22 API changes - -[Docker Remote API v1.22](docker_remote_api_v1.22.md) documentation - -* `POST /container/(name)/update` updates the resources of a container. -* `GET /containers/json` supports filter `isolation` on Windows. -* `GET /containers/json` now returns the list of networks of containers. -* `GET /info` Now returns `Architecture` and `OSType` fields, providing information - about the host architecture and operating system type that the daemon runs on. -* `GET /networks/(name)` now returns a `Name` field for each container attached to the network. -* `GET /version` now returns the `BuildTime` field in RFC3339Nano format to make it - consistent with other date/time values returned by the API. -* `AuthConfig` now supports a `registrytoken` for token based authentication -* `POST /containers/create` now has a 4M minimum value limit for `HostConfig.KernelMemory` -* Pushes initiated with `POST /images/(name)/push` and pulls initiated with `POST /images/create` - will be cancelled if the HTTP connection making the API request is closed before - the push or pull completes. -* `POST /containers/create` now allows you to set a read/write rate limit for a - device (in bytes per second or IO per second). -* `GET /networks` now supports filtering by `name`, `id` and `type`. -* `POST /containers/create` now allows you to set the static IPv4 and/or IPv6 address for the container. -* `POST /networks/(id)/connect` now allows you to set the static IPv4 and/or IPv6 address for the container. -* `GET /info` now includes the number of containers running, stopped, and paused. -* `POST /networks/create` now supports restricting external access to the network by setting the `Internal` field. -* `POST /networks/(id)/disconnect` now includes a `Force` option to forcefully disconnect a container from network -* `GET /containers/(id)/json` now returns the `NetworkID` of containers. -* `POST /networks/create` Now supports an options field in the IPAM config that provides options - for custom IPAM plugins. -* `GET /networks/{network-id}` Now returns IPAM config options for custom IPAM plugins if any - are available. -* `GET /networks/` now returns subnets info for user-defined networks. -* `GET /info` can now return a `SystemStatus` field useful for returning additional information about applications - that are built on top of engine. - -### v1.21 API changes - -[Docker Remote API v1.21](docker_remote_api_v1.21.md) documentation - -* `GET /volumes` lists volumes from all volume drivers. -* `POST /volumes/create` to create a volume. -* `GET /volumes/(name)` get low-level information about a volume. -* `DELETE /volumes/(name)` remove a volume with the specified name. -* `VolumeDriver` was moved from `config` to `HostConfig` to make the configuration portable. -* `GET /images/(name)/json` now returns information about an image's `RepoTags` and `RepoDigests`. -* The `config` option now accepts the field `StopSignal`, which specifies the signal to use to kill a container. -* `GET /containers/(id)/stats` will return networking information respectively for each interface. -* The `HostConfig` option now includes the `DnsOptions` field to configure the container's DNS options. -* `POST /build` now optionally takes a serialized map of build-time variables. -* `GET /events` now includes a `timenano` field, in addition to the existing `time` field. -* `GET /events` now supports filtering by image and container labels. -* `GET /info` now lists engine version information and return the information of `CPUShares` and `Cpuset`. -* `GET /containers/json` will return `ImageID` of the image used by container. -* `POST /exec/(name)/start` will now return an HTTP 409 when the container is either stopped or paused. -* `GET /containers/(name)/json` now accepts a `size` parameter. Setting this parameter to '1' returns container size information in the `SizeRw` and `SizeRootFs` fields. -* `GET /containers/(name)/json` now returns a `NetworkSettings.Networks` field, - detailing network settings per network. This field deprecates the - `NetworkSettings.Gateway`, `NetworkSettings.IPAddress`, - `NetworkSettings.IPPrefixLen`, and `NetworkSettings.MacAddress` fields, which - are still returned for backward-compatibility, but will be removed in a future version. -* `GET /exec/(id)/json` now returns a `NetworkSettings.Networks` field, - detailing networksettings per network. This field deprecates the - `NetworkSettings.Gateway`, `NetworkSettings.IPAddress`, - `NetworkSettings.IPPrefixLen`, and `NetworkSettings.MacAddress` fields, which - are still returned for backward-compatibility, but will be removed in a future version. -* The `HostConfig` option now includes the `OomScoreAdj` field for adjusting the - badness heuristic. This heuristic selects which processes the OOM killer kills - under out-of-memory conditions. - -### v1.20 API changes - -[Docker Remote API v1.20](docker_remote_api_v1.20.md) documentation - -* `GET /containers/(id)/archive` get an archive of filesystem content from a container. -* `PUT /containers/(id)/archive` upload an archive of content to be extracted to -an existing directory inside a container's filesystem. -* `POST /containers/(id)/copy` is deprecated in favor of the above `archive` -endpoint which can be used to download files and directories from a container. -* The `hostConfig` option now accepts the field `GroupAdd`, which specifies a -list of additional groups that the container process will run as. - -### v1.19 API changes - -[Docker Remote API v1.19](docker_remote_api_v1.19.md) documentation - -* When the daemon detects a version mismatch with the client, usually when -the client is newer than the daemon, an HTTP 400 is now returned instead -of a 404. -* `GET /containers/(id)/stats` now accepts `stream` bool to get only one set of stats and disconnect. -* `GET /containers/(id)/logs` now accepts a `since` timestamp parameter. -* `GET /info` The fields `Debug`, `IPv4Forwarding`, `MemoryLimit`, and -`SwapLimit` are now returned as boolean instead of as an int. In addition, the -end point now returns the new boolean fields `CpuCfsPeriod`, `CpuCfsQuota`, and -`OomKillDisable`. -* The `hostConfig` option now accepts the fields `CpuPeriod` and `CpuQuota` -* `POST /build` accepts `cpuperiod` and `cpuquota` options - -### v1.18 API changes - -[Docker Remote API v1.18](docker_remote_api_v1.18.md) documentation - -* `GET /version` now returns `Os`, `Arch` and `KernelVersion`. -* `POST /containers/create` and `POST /containers/(id)/start`allow you to set ulimit settings for use in the container. -* `GET /info` now returns `SystemTime`, `HttpProxy`,`HttpsProxy` and `NoProxy`. -* `GET /images/json` added a `RepoDigests` field to include image digest information. -* `POST /build` can now set resource constraints for all containers created for the build. -* `CgroupParent` can be passed in the host config to setup container cgroups under a specific cgroup. -* `POST /build` closing the HTTP request cancels the build -* `POST /containers/(id)/exec` includes `Warnings` field to response. diff --git a/engine/reference/api/docker_remote_api_v1.18.md b/engine/reference/api/docker_remote_api_v1.18.md deleted file mode 100644 index 91d6e32eb9..0000000000 --- a/engine/reference/api/docker_remote_api_v1.18.md +++ /dev/null @@ -1,2145 +0,0 @@ ---- -redirect_from: - - /reference/api/docker_remote_api_v1.18/ -description: API Documentation for Docker -keywords: -- API, Docker, rcli, REST, documentation -title: Docker Remote API v1.18 ---- - -## 1. Brief introduction - - - The Remote API has replaced `rcli`. - - The daemon listens on `unix:///var/run/docker.sock` but you can - [Bind Docker to another host/port or a Unix socket](../commandline/dockerd.md#bind-docker-to-another-host-port-or-a-unix-socket). - - The API tends to be REST, but for some complex commands, like `attach` - or `pull`, the HTTP connection is hijacked to transport `STDOUT`, - `STDIN` and `STDERR`. - - When the client API version is newer than the daemon's, these calls return an HTTP - `400 Bad Request` error message. - -# 2. Endpoints - -## 2.1 Containers - -### List containers - -`GET /containers/json` - -List containers - -**Example request**: - - GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Id": "8dfafdbc3a40", - "Names":["/boring_feynman"], - "Image": "ubuntu:latest", - "Command": "echo 1", - "Created": 1367854155, - "Status": "Exit 0", - "Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}], - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "SizeRw": 12288, - "SizeRootFs": 0 - }, - { - "Id": "9cd87474be90", - "Names":["/coolName"], - "Image": "ubuntu:latest", - "Command": "echo 222222", - "Created": 1367854155, - "Status": "Exit 0", - "Ports": [], - "Labels": {}, - "SizeRw": 12288, - "SizeRootFs": 0 - }, - { - "Id": "3176a2479c92", - "Names":["/sleepy_dog"], - "Image": "ubuntu:latest", - "Command": "echo 3333333333333333", - "Created": 1367854154, - "Status": "Exit 0", - "Ports":[], - "Labels": {}, - "SizeRw":12288, - "SizeRootFs":0 - }, - { - "Id": "4cb07b47f9fb", - "Names":["/running_cat"], - "Image": "ubuntu:latest", - "Command": "echo 444444444444444444444444444444444", - "Created": 1367854152, - "Status": "Exit 0", - "Ports": [], - "Labels": {}, - "SizeRw": 12288, - "SizeRootFs": 0 - } - ] - -**Query parameters**: - -- **all** – 1/True/true or 0/False/false, Show all containers. - Only running containers are shown by default (i.e., this defaults to false) -- **limit** – Show `limit` last created - containers, include non-running ones. -- **since** – Show only containers created since Id, include - non-running ones. -- **before** – Show only containers created before Id, include - non-running ones. -- **size** – 1/True/true or 0/False/false, Show the containers - sizes -- **filters** - a JSON encoded value of the filters (a `map[string][]string`) to process on the containers list. Available filters: - - `exited=`; -- containers with exit code of `` ; - - `status=`(`restarting`|`running`|`paused`|`exited`) - - `label=key` or `label="key=value"` of a container label - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **500** – server error - -### Create a container - -`POST /containers/create` - -Create a container - -**Example request**: - - POST /containers/create HTTP/1.1 - Content-Type: application/json - - { - "Hostname": "", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": true, - "AttachStderr": true, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": [ - "FOO=bar", - "BAZ=quux" - ], - "Cmd": [ - "date" - ], - "Entrypoint": null, - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "Volumes": { - "/volumes/data": {} - }, - "WorkingDir": "", - "NetworkDisabled": false, - "MacAddress": "12:34:56:78:9a:bc", - "ExposedPorts": { - "22/tcp": {} - }, - "HostConfig": { - "Binds": ["/tmp:/tmp"], - "Links": ["redis3:redis"], - "LxcConf": {"lxc.utsname":"docker"}, - "Memory": 0, - "MemorySwap": 0, - "CpuShares": 512, - "CpusetCpus": "0,1", - "PidMode": "", - "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] }, - "PublishAllPorts": false, - "Privileged": false, - "ReadonlyRootfs": false, - "Dns": ["8.8.8.8"], - "DnsSearch": [""], - "ExtraHosts": null, - "VolumesFrom": ["parent", "other:ro"], - "CapAdd": ["NET_ADMIN"], - "CapDrop": ["MKNOD"], - "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 }, - "NetworkMode": "bridge", - "Devices": [], - "Ulimits": [{}], - "LogConfig": { "Type": "json-file", "Config": {} }, - "SecurityOpt": [], - "CgroupParent": "" - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Id":"e90e34656806", - "Warnings":[] - } - -**JSON parameters**: - -- **Hostname** - A string value containing the hostname to use for the - container. -- **Domainname** - A string value containing the domain name to use - for the container. -- **User** - A string value specifying the user inside the container. -- **AttachStdin** - Boolean value, attaches to `stdin`. -- **AttachStdout** - Boolean value, attaches to `stdout`. -- **AttachStderr** - Boolean value, attaches to `stderr`. -- **Tty** - Boolean value, Attach standard streams to a `tty`, including `stdin` if it is not closed. -- **OpenStdin** - Boolean value, opens `stdin`, -- **StdinOnce** - Boolean value, close `stdin` after the 1 attached client disconnects. -- **Env** - A list of environment variables in the form of `["VAR=value"[,"VAR2=value2"]]` -- **Labels** - Adds a map of labels to a container. To specify a map: `{"key":"value"[,"key2":"value2"]}` -- **Cmd** - Command to run specified as a string or an array of strings. -- **Entrypoint** - Set the entry point for the container as a string or an array - of strings. -- **Image** - A string specifying the image name to use for the container. -- **Volumes** - An object mapping mount point paths (strings) inside the - container to empty objects. -- **WorkingDir** - A string specifying the working directory for commands to - run in. -- **NetworkDisabled** - Boolean value, when true disables networking for the - container -- **ExposedPorts** - An object mapping ports to an empty object in the form of: - `"ExposedPorts": { "/: {}" }` -- **HostConfig** - - **Binds** – A list of bind-mounts for this container. Each item is a string in one of these forms: - + `host-src:container-dest` to bind-mount a host path into the - container. Both `host-src`, and `container-dest` must be an - _absolute_ path. - + `host-src:container-dest:ro` to make the bind-mount read-only - inside the container. Both `host-src`, and `container-dest` must be - an _absolute_ path. - - **Links** - A list of links for the container. Each link entry should be - in the form of `container_name:alias`. - - **LxcConf** - LXC specific configurations. These configurations only - work when using the `lxc` execution driver. - - **Memory** - Memory limit in bytes. - - **MemorySwap** - Total memory limit (memory + swap); set `-1` to enable unlimited swap. - You must use this with `memory` and make the swap value larger than `memory`. - - **CpuShares** - An integer value containing the container's CPU Shares - (ie. the relative weight vs other containers). - - **CpusetCpus** - String value containing the `cgroups CpusetCpus` to use. - - **PidMode** - Set the PID (Process) Namespace mode for the container; - `"container:"`: joins another container's PID namespace - `"host"`: use the host's PID namespace inside the container - - **PortBindings** - A map of exposed container ports and the host port they - should map to. A JSON object in the form - `{ /: [{ "HostPort": "" }] }` - Take note that `port` is specified as a string and not an integer value. - - **PublishAllPorts** - Allocates a random host port for all of a container's - exposed ports. Specified as a boolean value. - - **Privileged** - Gives the container full access to the host. Specified as - a boolean value. - - **ReadonlyRootfs** - Mount the container's root filesystem as read only. - Specified as a boolean value. - - **Dns** - A list of DNS servers for the container to use. - - **DnsSearch** - A list of DNS search domains - - **ExtraHosts** - A list of hostnames/IP mappings to add to the - container's `/etc/hosts` file. Specified in the form `["hostname:IP"]`. - - **VolumesFrom** - A list of volumes to inherit from another container. - Specified in the form `[:]` - - **CapAdd** - A list of kernel capabilities to add to the container. - - **Capdrop** - A list of kernel capabilities to drop from the container. - - **RestartPolicy** – The behavior to apply when the container exits. The - value is an object with a `Name` property of either `"always"` to - always restart or `"on-failure"` to restart only when the container - exit code is non-zero. If `on-failure` is used, `MaximumRetryCount` - controls the number of times to retry before giving up. - The default is not to restart. (optional) - An ever increasing delay (double the previous delay, starting at 100mS) - is added before each restart to prevent flooding the server. - - **NetworkMode** - Sets the networking mode for the container. Supported - values are: `bridge`, `host`, `none`, and `container:` - - **Devices** - A list of devices to add to the container specified as a JSON object in the - form - `{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}` - - **Ulimits** - A list of ulimits to set in the container, specified as - `{ "Name": , "Soft": , "Hard": }`, for example: - `Ulimits: { "Name": "nofile", "Soft": 1024, "Hard": 2048 }` - - **SecurityOpt**: A list of string values to customize labels for MLS - systems, such as SELinux. - - **LogConfig** - Log configuration for the container, specified as a JSON object in the form - `{ "Type": "", "Config": {"key1": "val1"}}`. - Available types: `json-file`, `syslog`, `journald`, `none`. - `json-file` logging driver. - - **CgroupParent** - Path to `cgroups` under which the container's `cgroup` is created. If the path is not absolute, the path is considered to be relative to the `cgroups` path of the init process. Cgroups are created if they do not already exist. - -**Query parameters**: - -- **name** – Assign the specified name to the container. Must - match `/?[a-zA-Z0-9_-]+`. - -**Status codes**: - -- **201** – no error -- **400** – bad parameter -- **404** – no such container -- **406** – impossible to attach (container not running) -- **409** – conflict -- **500** – server error - -### Inspect a container - -`GET /containers/(id or name)/json` - -Return low-level information on the container `id` - -**Example request**: - - GET /containers/4fa6e0f0c678/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "AppArmorProfile": "", - "Args": [ - "-c", - "exit 9" - ], - "Config": { - "AttachStderr": true, - "AttachStdin": false, - "AttachStdout": true, - "Cmd": [ - "/bin/sh", - "-c", - "exit 9" - ], - "Domainname": "", - "Entrypoint": null, - "Env": [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "ExposedPorts": null, - "Hostname": "ba033ac44011", - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "MacAddress": "", - "NetworkDisabled": false, - "OnBuild": null, - "OpenStdin": false, - "PortSpecs": null, - "StdinOnce": false, - "Tty": false, - "User": "", - "Volumes": null, - "WorkingDir": "" - }, - "Created": "2015-01-06T15:47:31.485331387Z", - "Driver": "devicemapper", - "ExecDriver": "native-0.2", - "ExecIDs": null, - "HostConfig": { - "Binds": null, - "CapAdd": null, - "CapDrop": null, - "ContainerIDFile": "", - "CpusetCpus": "", - "CpuShares": 0, - "Devices": [], - "Dns": null, - "DnsSearch": null, - "ExtraHosts": null, - "IpcMode": "", - "Links": null, - "LxcConf": [], - "Memory": 0, - "MemorySwap": 0, - "NetworkMode": "bridge", - "PidMode": "", - "PortBindings": {}, - "Privileged": false, - "ReadonlyRootfs": false, - "PublishAllPorts": false, - "RestartPolicy": { - "MaximumRetryCount": 2, - "Name": "on-failure" - }, - "LogConfig": { - "Config": null, - "Type": "json-file" - }, - "SecurityOpt": null, - "VolumesFrom": null, - "Ulimits": [{}] - }, - "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", - "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", - "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", - "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", - "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", - "MountLabel": "", - "Name": "/boring_euclid", - "NetworkSettings": { - "Bridge": "", - "Gateway": "", - "IPAddress": "", - "IPPrefixLen": 0, - "MacAddress": "", - "PortMapping": null, - "Ports": null - }, - "Path": "/bin/sh", - "ProcessLabel": "", - "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", - "RestartCount": 1, - "State": { - "Error": "", - "ExitCode": 9, - "FinishedAt": "2015-01-06T15:47:32.080254511Z", - "OOMKilled": false, - "Paused": false, - "Pid": 0, - "Restarting": false, - "Running": true, - "StartedAt": "2015-01-06T15:47:32.072697474Z" - }, - "Volumes": {}, - "VolumesRW": {} - } - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### List processes running inside a container - -`GET /containers/(id or name)/top` - -List processes running inside the container `id`. On Unix systems this -is done by running the `ps` command. This endpoint is not -supported on Windows. - -**Example request**: - - GET /containers/4fa6e0f0c678/top HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Titles" : [ - "UID", "PID", "PPID", "C", "STIME", "TTY", "TIME", "CMD" - ], - "Processes" : [ - [ - "root", "13642", "882", "0", "17:03", "pts/0", "00:00:00", "/bin/bash" - ], - [ - "root", "13735", "13642", "0", "17:06", "pts/0", "00:00:00", "sleep 10" - ] - ] - } - -**Example request**: - - GET /containers/4fa6e0f0c678/top?ps_args=aux HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Titles" : [ - "USER","PID","%CPU","%MEM","VSZ","RSS","TTY","STAT","START","TIME","COMMAND" - ] - "Processes" : [ - [ - "root","13642","0.0","0.1","18172","3184","pts/0","Ss","17:03","0:00","/bin/bash" - ], - [ - "root","13895","0.0","0.0","4348","692","pts/0","S+","17:15","0:00","sleep 10" - ] - ], - } - -**Query parameters**: - -- **ps_args** – `ps` arguments to use (e.g., `aux`), defaults to `-ef` - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Get container logs - -`GET /containers/(id or name)/logs` - -Get `stdout` and `stderr` logs from the container ``id`` - -> **Note**: -> This endpoint works only for containers with the `json-file` or `journald` logging drivers. - -**Example request**: - - GET /containers/4fa6e0f0c678/logs?stderr=1&stdout=1×tamps=1&follow=1&tail=10 HTTP/1.1 - -**Example response**: - - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **follow** – 1/True/true or 0/False/false, return stream. Default `false`. -- **stdout** – 1/True/true or 0/False/false, show `stdout` log. Default `false`. -- **stderr** – 1/True/true or 0/False/false, show `stderr` log. Default `false`. -- **timestamps** – 1/True/true or 0/False/false, print timestamps for - every log line. Default `false`. -- **tail** – Output specified number of lines at the end of logs: `all` or ``. Default all. - -**Status codes**: - -- **101** – no error, hints proxy about hijacking -- **200** – no error, no upgrade header found -- **404** – no such container -- **500** – server error - -### Inspect changes on a container's filesystem - -`GET /containers/(id or name)/changes` - -Inspect changes on container `id`'s filesystem - -**Example request**: - - GET /containers/4fa6e0f0c678/changes HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Path": "/dev", - "Kind": 0 - }, - { - "Path": "/dev/kmsg", - "Kind": 1 - }, - { - "Path": "/test", - "Kind": 1 - } - ] - -Values for `Kind`: - -- `0`: Modify -- `1`: Add -- `2`: Delete - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Export a container - -`GET /containers/(id or name)/export` - -Export the contents of container `id` - -**Example request**: - - GET /containers/4fa6e0f0c678/export HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/octet-stream - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Get container stats based on resource usage - -`GET /containers/(id or name)/stats` - -This endpoint returns a live stream of a container's resource usage statistics. - -**Example request**: - - GET /containers/redis1/stats HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "read" : "2015-01-08T22:57:31.547920715Z", - "network" : { - "rx_dropped" : 0, - "rx_bytes" : 648, - "rx_errors" : 0, - "tx_packets" : 8, - "tx_dropped" : 0, - "rx_packets" : 8, - "tx_errors" : 0, - "tx_bytes" : 648 - }, - "memory_stats" : { - "stats" : { - "total_pgmajfault" : 0, - "cache" : 0, - "mapped_file" : 0, - "total_inactive_file" : 0, - "pgpgout" : 414, - "rss" : 6537216, - "total_mapped_file" : 0, - "writeback" : 0, - "unevictable" : 0, - "pgpgin" : 477, - "total_unevictable" : 0, - "pgmajfault" : 0, - "total_rss" : 6537216, - "total_rss_huge" : 6291456, - "total_writeback" : 0, - "total_inactive_anon" : 0, - "rss_huge" : 6291456, - "hierarchical_memory_limit" : 67108864, - "total_pgfault" : 964, - "total_active_file" : 0, - "active_anon" : 6537216, - "total_active_anon" : 6537216, - "total_pgpgout" : 414, - "total_cache" : 0, - "inactive_anon" : 0, - "active_file" : 0, - "pgfault" : 964, - "inactive_file" : 0, - "total_pgpgin" : 477 - }, - "max_usage" : 6651904, - "usage" : 6537216, - "failcnt" : 0, - "limit" : 67108864 - }, - "blkio_stats" : {}, - "cpu_stats" : { - "cpu_usage" : { - "percpu_usage" : [ - 16970827, - 1839451, - 7107380, - 10571290 - ], - "usage_in_usermode" : 10000000, - "total_usage" : 36488948, - "usage_in_kernelmode" : 20000000 - }, - "system_cpu_usage" : 20091722000000000, - "throttling_data" : {} - } - } - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Resize a container TTY - -`POST /containers/(id or name)/resize?h=&w=` - -Resize the TTY for container with `id`. You must restart the container for the resize to take effect. - -**Example request**: - - POST /containers/4fa6e0f0c678/resize?h=40&w=80 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Query parameters**: - -- **h** – height of `tty` session -- **w** – width - -**Status codes**: - -- **200** – no error -- **404** – No such container -- **500** – Cannot resize container - -### Start a container - -`POST /containers/(id or name)/start` - -Start the container `id` - -> **Note**: -> For backwards compatibility, this endpoint accepts a `HostConfig` as JSON-encoded request body. -> See [create a container](docker_remote_api_v1.18.md#create-a-container) for details. - -**Example request**: - - POST /containers/e90e34656806/start HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **304** – container already started -- **404** – no such container -- **500** – server error - -### Stop a container - -`POST /containers/(id or name)/stop` - -Stop the container `id` - -**Example request**: - - POST /containers/e90e34656806/stop?t=5 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **t** – number of seconds to wait before killing the container - -**Status codes**: - -- **204** – no error -- **304** – container already stopped -- **404** – no such container -- **500** – server error - -### Restart a container - -`POST /containers/(id or name)/restart` - -Restart the container `id` - -**Example request**: - - POST /containers/e90e34656806/restart?t=5 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **t** – number of seconds to wait before killing the container - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Kill a container - -`POST /containers/(id or name)/kill` - -Kill the container `id` - -**Example request**: - - POST /containers/e90e34656806/kill HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **signal** - Signal to send to the container: integer or string like `SIGINT`. - When not set, `SIGKILL` is assumed and the call waits for the container to exit. - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Rename a container - -`POST /containers/(id or name)/rename` - -Rename the container `id` to a `new_name` - -**Example request**: - - POST /containers/e90e34656806/rename?name=new_name HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **name** – new name for the container - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **409** - conflict name already assigned -- **500** – server error - -### Pause a container - -`POST /containers/(id or name)/pause` - -Pause the container `id` - -**Example request**: - - POST /containers/e90e34656806/pause HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Unpause a container - -`POST /containers/(id or name)/unpause` - -Unpause the container `id` - -**Example request**: - - POST /containers/e90e34656806/unpause HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Attach to a container - -`POST /containers/(id or name)/attach` - -Attach to the container `id` - -**Example request**: - - POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. -- **stream** – 1/True/true or 0/False/false, return stream. - Default `false`. -- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach - to `stdin`. Default `false`. -- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return - `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. -- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return - `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. - -**Status codes**: - -- **101** – no error, hints proxy about hijacking -- **200** – no error, no upgrade header found -- **400** – bad parameter -- **404** – no such container -- **500** – server error - -**Stream details**: - -When using the TTY setting is enabled in -[`POST /containers/create` -](docker_remote_api_v1.18.md#create-a-container), -the stream is the raw data from the process PTY and client's `stdin`. -When the TTY is disabled, then the stream is multiplexed to separate -`stdout` and `stderr`. - -The format is a **Header** and a **Payload** (frame). - -**HEADER** - -The header contains the information which the stream writes (`stdout` or -`stderr`). It also contains the size of the associated frame encoded in the -last four bytes (`uint32`). - -It is encoded on the first eight bytes like this: - - header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} - -`STREAM_TYPE` can be: - -- 0: `stdin` (is written on `stdout`) -- 1: `stdout` -- 2: `stderr` - -`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of -the `uint32` size encoded as big endian. - -**PAYLOAD** - -The payload is the raw stream. - -**IMPLEMENTATION** - -The simplest way to implement the Attach protocol is the following: - - 1. Read eight bytes. - 2. Choose `stdout` or `stderr` depending on the first byte. - 3. Extract the frame size from the last four bytes. - 4. Read the extracted size and output it on the correct output. - 5. Goto 1. - -### Attach to a container (websocket) - -`GET /containers/(id or name)/attach/ws` - -Attach to the container `id` via websocket - -Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455) - -**Example request** - - GET /containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1 - -**Example response** - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. -- **stream** – 1/True/true or 0/False/false, return stream. - Default `false`. -- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach - to `stdin`. Default `false`. -- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return - `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. -- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return - `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **404** – no such container -- **500** – server error - -### Wait a container - -`POST /containers/(id or name)/wait` - -Block until container `id` stops, then returns the exit code - -**Example request**: - - POST /containers/16253994b7c4/wait HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"StatusCode": 0} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Remove a container - -`DELETE /containers/(id or name)` - -Remove the container `id` from the filesystem - -**Example request**: - - DELETE /containers/16253994b7c4?v=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **v** – 1/True/true or 0/False/false, Remove the volumes - associated to the container. Default `false`. -- **force** - 1/True/true or 0/False/false, Kill then remove the container. - Default `false`. - -**Status codes**: - -- **204** – no error -- **400** – bad parameter -- **404** – no such container -- **409** – conflict -- **500** – server error - -### Copy files or folders from a container - -`POST /containers/(id or name)/copy` - -Copy files or folders of container `id` - -**Example request**: - - POST /containers/4fa6e0f0c678/copy HTTP/1.1 - Content-Type: application/json - - { - "Resource": "test.txt" - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -## 2.2 Images - -### List Images - -`GET /images/json` - -**Example request**: - - GET /images/json?all=0 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "RepoTags": [ - "ubuntu:12.04", - "ubuntu:precise", - "ubuntu:latest" - ], - "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c", - "Created": 1365714795, - "Size": 131506275, - "VirtualSize": 131506275 - }, - { - "RepoTags": [ - "ubuntu:12.10", - "ubuntu:quantal" - ], - "ParentId": "27cf784147099545", - "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", - "Created": 1364102658, - "Size": 24653, - "VirtualSize": 180116135 - } - ] - -**Example request, with digest information**: - - GET /images/json?digests=1 HTTP/1.1 - -**Example response, with digest information**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Created": 1420064636, - "Id": "4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125", - "ParentId": "ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2", - "RepoDigests": [ - "localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" - ], - "RepoTags": [ - "localhost:5000/test/busybox:latest", - "playdate:latest" - ], - "Size": 0, - "VirtualSize": 2429728 - } - ] - -The response shows a single image `Id` associated with two repositories -(`RepoTags`): `localhost:5000/test/busybox`: and `playdate`. A caller can use -either of the `RepoTags` values `localhost:5000/test/busybox:latest` or -`playdate:latest` to reference the image. - -You can also use `RepoDigests` values to reference an image. In this response, -the array has only one reference and that is to the -`localhost:5000/test/busybox` repository; the `playdate` repository has no -digest. You can reference this digest using the value: -`localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d...` - -See the `docker run` and `docker build` commands for examples of digest and tag -references on the command line. - -**Query parameters**: - -- **all** – 1/True/true or 0/False/false, default false -- **filters** – a JSON encoded value of the filters (a map[string][]string) to process on the images list. Available filters: - - `dangling=true` - - `label=key` or `label="key=value"` of an image label -- **filter** - only return images with the specified name - -### Build image from a Dockerfile - -`POST /build` - -Build an image from a Dockerfile - -**Example request**: - - POST /build HTTP/1.1 - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"stream": "Step 1..."} - {"stream": "..."} - {"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}} - -The input stream must be a `tar` archive compressed with one of the -following algorithms: `identity` (no compression), `gzip`, `bzip2`, `xz`. - -The archive must include a build instructions file, typically called -`Dockerfile` at the archive's root. The `dockerfile` parameter may be -used to specify a different build instructions file. To do this, its value must be -the path to the alternate build instructions file to use. - -The archive may include any number of other files, -which are accessible in the build context (See the [*ADD build -command*](../../reference/builder.md#add)). - -The build is canceled if the client drops the connection by quitting -or being killed. - -**Query parameters**: - -- **dockerfile** - Path within the build context to the Dockerfile. This is - ignored if `remote` is specified and points to an individual filename. -- **t** – A name and optional tag to apply to the image in the `name:tag` format. - If you omit the `tag` the default `latest` value is assumed. -- **remote** – A Git repository URI or HTTP/HTTPS context URI. If the - URI points to a single text file, the file's contents are placed into - a file called `Dockerfile` and the image is built from that file. -- **q** – Suppress verbose build output. -- **nocache** – Do not use the cache when building the image. -- **pull** - Attempt to pull the image even if an older image exists locally. -- **rm** - Remove intermediate containers after a successful build (default behavior). -- **forcerm** - Always remove intermediate containers (includes `rm`). -- **memory** - Set memory limit for build. -- **memswap** - Total memory (memory + swap), `-1` to enable unlimited swap. -- **cpushares** - CPU shares (relative weight). -- **cpusetcpus** - CPUs in which to allow execution (e.g., `0-3`, `0,1`). - -**Request Headers**: - -- **Content-type** – Set to `"application/tar"`. -- **X-Registry-Config** – base64-encoded ConfigFile object - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Create an image - -`POST /images/create` - -Create an image either by pulling it from the registry or by importing it - -**Example request**: - - POST /images/create?fromImage=busybox&tag=latest HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "Pulling..."} - {"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}} - {"error": "Invalid..."} - ... - -When using this endpoint to pull an image from the registry, the -`X-Registry-Auth` header can be used to include -a base64-encoded AuthConfig object. - -**Query parameters**: - -- **fromImage** – Name of the image to pull. -- **fromSrc** – Source to import. The value may be a URL from which the image - can be retrieved or `-` to read the image from the request body. -- **repo** – Repository name. -- **tag** – Tag. If empty when pulling an image, this causes all tags - for the given image to be pulled. - -**Request Headers**: - -- **X-Registry-Auth** – base64-encoded AuthConfig object - -**Status codes**: - -- **200** – no error -- **500** – server error - - - -### Inspect an image - -`GET /images/(name)/json` - -Return low-level information on the image `name` - -**Example request**: - - GET /images/ubuntu/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Created": "2013-03-23T22:24:18.818426-07:00", - "Container": "3d67245a8d72ecf13f33dffac9f79dcdf70f75acb84d308770391510e0c23ad0", - "ContainerConfig": { - "Hostname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": false, - "AttachStderr": false, - "Tty": true, - "OpenStdin": true, - "StdinOnce": false, - "Env": null, - "Cmd": ["/bin/bash"], - "Dns": null, - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "Volumes": null, - "VolumesFrom": "", - "WorkingDir": "" - }, - "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", - "Parent": "27cf784147099545", - "Size": 6824592 - } - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Get the history of an image - -`GET /images/(name)/history` - -Return the history of the image `name` - -**Example request**: - - GET /images/ubuntu/history HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Id": "b750fe79269d", - "Created": 1364102658, - "CreatedBy": "/bin/bash" - }, - { - "Id": "27cf78414709", - "Created": 1364068391, - "CreatedBy": "" - } - ] - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Push an image on the registry - -`POST /images/(name)/push` - -Push the image `name` on the registry - -**Example request**: - - POST /images/test/push HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "Pushing..."} - {"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}} - {"error": "Invalid..."} - ... - -If you wish to push an image on to a private registry, that image must already have a tag -into a repository which references that registry `hostname` and `port`. This repository name should -then be used in the URL. This duplicates the command line's flow. - -**Example request**: - - POST /images/registry.acme.com:5000/test/push HTTP/1.1 - - -**Query parameters**: - -- **tag** – The tag to associate with the image on the registry. This is optional. - -**Request Headers**: - -- **X-Registry-Auth** – base64-encoded AuthConfig object. - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Tag an image into a repository - -`POST /images/(name)/tag` - -Tag the image `name` into a repository - -**Example request**: - - POST /images/test/tag?repo=myrepo&force=0&tag=v42 HTTP/1.1 - -**Example response**: - - HTTP/1.1 201 Created - -**Query parameters**: - -- **repo** – The repository to tag in -- **force** – 1/True/true or 0/False/false, default false -- **tag** - The new tag name - -**Status codes**: - -- **201** – no error -- **400** – bad parameter -- **404** – no such image -- **409** – conflict -- **500** – server error - -### Remove an image - -`DELETE /images/(name)` - -Remove the image `name` from the filesystem - -**Example request**: - - DELETE /images/test HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-type: application/json - - [ - {"Untagged": "3e2f21a89f"}, - {"Deleted": "3e2f21a89f"}, - {"Deleted": "53b4f83ac9"} - ] - -**Query parameters**: - -- **force** – 1/True/true or 0/False/false, default false -- **noprune** – 1/True/true or 0/False/false, default false - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **409** – conflict -- **500** – server error - -### Search images - -`GET /images/search` - -Search for an image on [Docker Hub](https://hub.docker.com). - -> **Note**: -> The response keys have changed from API v1.6 to reflect the JSON -> sent by the registry server to the docker daemon's request. - -**Example request**: - - GET /images/search?term=sshd HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "star_count": 12, - "is_official": false, - "name": "wma55/u1210sshd", - "is_automated": false, - "description": "" - }, - { - "star_count": 10, - "is_official": false, - "name": "jdswinbank/sshd", - "is_automated": false, - "description": "" - }, - { - "star_count": 18, - "is_official": false, - "name": "vgauthier/sshd", - "is_automated": false, - "description": "" - } - ... - ] - -**Query parameters**: - -- **term** – term to search - -**Status codes**: - -- **200** – no error -- **500** – server error - -## 2.3 Misc - -### Check auth configuration - -`POST /auth` - -Get the default username and email - -**Example request**: - - POST /auth HTTP/1.1 - Content-Type: application/json - - { - "username": "hannibal", - "password": "xxxx", - "email": "hannibal@a-team.com", - "serveraddress": "https://index.docker.io/v1/" - } - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** – no error -- **204** – no error -- **500** – server error - -### Display system-wide information - -`GET /info` - -Display system-wide information - -**Example request**: - - GET /info HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Containers": 11, - "Debug": 0, - "DockerRootDir": "/var/lib/docker", - "Driver": "btrfs", - "DriverStatus": [[""]], - "ExecutionDriver": "native-0.1", - "HttpProxy": "http://test:test@localhost:8080", - "HttpsProxy": "https://test:test@localhost:8080", - "ID": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS", - "IPv4Forwarding": 1, - "Images": 16, - "IndexServerAddress": "https://index.docker.io/v1/", - "InitPath": "/usr/bin/docker", - "InitSha1": "", - "KernelVersion": "3.12.0-1-amd64", - "Labels": [ - "storage=ssd" - ], - "MemTotal": 2099236864, - "MemoryLimit": 1, - "NCPU": 1, - "NEventsListener": 0, - "NFd": 11, - "NGoroutines": 21, - "Name": "prod-server-42", - "NoProxy": "9.81.1.160", - "OperatingSystem": "Boot2Docker", - "RegistryConfig": { - "IndexConfigs": { - "docker.io": { - "Mirrors": null, - "Name": "docker.io", - "Official": true, - "Secure": true - } - }, - "InsecureRegistryCIDRs": [ - "127.0.0.0/8" - ] - }, - "SwapLimit": 0, - "SystemTime": "2015-03-10T11:11:23.730591467-07:00" - } - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Show the docker version information - -`GET /version` - -Show the docker version information - -**Example request**: - - GET /version HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Version": "1.5.0", - "Os": "linux", - "KernelVersion": "3.18.5-tinycore64", - "GoVersion": "go1.4.1", - "GitCommit": "a8a31ef", - "Arch": "amd64", - "ApiVersion": "1.18" - } - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Ping the docker server - -`GET /_ping` - -Ping the docker server - -**Example request**: - - GET /_ping HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: text/plain - - OK - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Create a new image from a container's changes - -`POST /commit` - -Create a new image from a container's changes - -**Example request**: - - POST /commit?container=44c004db4b17&comment=message&repo=myrepo HTTP/1.1 - Content-Type: application/json - - { - "Hostname": "", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": true, - "AttachStderr": true, - "PortSpecs": null, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": null, - "Cmd": [ - "date" - ], - "Volumes": { - "/tmp": {} - }, - "WorkingDir": "", - "NetworkDisabled": false, - "ExposedPorts": { - "22/tcp": {} - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - {"Id": "596069db4bf5"} - -**JSON parameters**: - -- **config** - the container's configuration - -**Query parameters**: - -- **container** – source container -- **repo** – repository -- **tag** – tag -- **comment** – commit message -- **author** – author (e.g., "John Hannibal Smith - <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>") - -**Status codes**: - -- **201** – no error -- **404** – no such container -- **500** – server error - -### Monitor Docker's events - -`GET /events` - -Get container events from docker, in real time via streaming. - -Docker containers report the following events: - - create, destroy, die, exec_create, exec_start, export, kill, oom, pause, restart, start, stop, unpause - -Docker images report the following events: - - untag, delete - -**Example request**: - - GET /events?since=1374067924 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "create", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924} - {"status": "start", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924} - {"status": "stop", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067966} - {"status": "destroy", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067970} - -**Query parameters**: - -- **since** – Timestamp. Show all events created since timestamp and then stream -- **until** – Timestamp. Show events created until given timestamp and stop streaming -- **filters** – A json encoded value of the filters (a map[string][]string) to process on the event list. Available filters: - - `container=`; -- container to filter - - `event=`; -- event to filter - - `image=`; -- image to filter - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Get a tarball containing all images in a repository - -`GET /images/(name)/get` - -Get a tarball containing all images and metadata for the repository specified -by `name`. - -If `name` is a specific name and tag (e.g. ubuntu:latest), then only that image -(and its parents) are returned. If `name` is an image ID, similarly only that -image (and its parents) are returned, but with the exclusion of the -'repositories' file in the tarball, as there were no image names referenced. - -See the [image tarball format](docker_remote_api_v1.18.md#image-tarball-format) for more details. - -**Example request** - - GET /images/ubuntu/get - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - Binary data stream - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Get a tarball containing all images - -`GET /images/get` - -Get a tarball containing all images and metadata for one or more repositories. - -For each value of the `names` parameter: if it is a specific name and tag (e.g. -`ubuntu:latest`), then only that image (and its parents) are returned; if it is -an image ID, similarly only that image (and its parents) are returned and there -would be no names referenced in the 'repositories' file for this image ID. - -See the [image tarball format](docker_remote_api_v1.18.md#image-tarball-format) for more details. - -**Example request** - - GET /images/get?names=myname%2Fmyapp%3Alatest&names=busybox - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - Binary data stream - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Load a tarball with a set of images and tags into docker - -`POST /images/load` - -Load a set of images and tags into a Docker repository. -See the [image tarball format](docker_remote_api_v1.18.md#image-tarball-format) for more details. - -**Example request** - - POST /images/load - Content-Type: application/x-tar - - Tarball in body - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Image tarball format - -An image tarball contains one directory per image layer (named using its long ID), -each containing these files: - -- `VERSION`: currently `1.0` - the file format version -- `json`: detailed layer information, similar to `docker inspect layer_id` -- `layer.tar`: A tarfile containing the filesystem changes in this layer - -The `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories -for storing attribute changes and deletions. - -If the tarball defines a repository, the tarball should also include a `repositories` file at -the root that contains a list of repository and tag names mapped to layer IDs. - -``` -{"hello-world": - {"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"} -} -``` - -### Exec Create - -`POST /containers/(id or name)/exec` - -Sets up an exec instance in a running container `id` - -**Example request**: - - POST /containers/e90e34656806/exec HTTP/1.1 - Content-Type: application/json - - { - "AttachStdin": true, - "AttachStdout": true, - "AttachStderr": true, - "Cmd": ["sh"], - "Tty": true - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Id": "f90e34656806", - "Warnings":[] - } - -**JSON parameters**: - -- **AttachStdin** - Boolean value, attaches to `stdin` of the `exec` command. -- **AttachStdout** - Boolean value, attaches to `stdout` of the `exec` command. -- **AttachStderr** - Boolean value, attaches to `stderr` of the `exec` command. -- **Tty** - Boolean value to allocate a pseudo-TTY. -- **Cmd** - Command to run specified as a string or an array of strings. - - -**Status codes**: - -- **201** – no error -- **404** – no such container - -### Exec Start - -`POST /exec/(id)/start` - -Starts a previously set up `exec` instance `id`. If `detach` is true, this API -returns after starting the `exec` command. Otherwise, this API sets up an -interactive session with the `exec` command. - -**Example request**: - - POST /exec/e90e34656806/start HTTP/1.1 - Content-Type: application/json - - { - "Detach": false, - "Tty": false - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/vnd.docker.raw-stream - - {% raw %} - {{ STREAM }} - {% endraw %} - -**JSON parameters**: - -- **Detach** - Detach from the `exec` command. -- **Tty** - Boolean value to allocate a pseudo-TTY. - -**Status codes**: - -- **200** – no error -- **404** – no such exec instance - -**Stream details**: - -Similar to the stream behavior of `POST /containers/(id or name)/attach` API - -### Exec Resize - -`POST /exec/(id)/resize` - -Resizes the `tty` session used by the `exec` command `id`. The unit is number of characters. -This API is valid only if `tty` was specified as part of creating and starting the `exec` command. - -**Example request**: - - POST /exec/e90e34656806/resize?h=40&w=80 HTTP/1.1 - Content-Type: text/plain - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: text/plain - -**Query parameters**: - -- **h** – height of `tty` session -- **w** – width - -**Status codes**: - -- **201** – no error -- **404** – no such exec instance - -### Exec Inspect - -`GET /exec/(id)/json` - -Return low-level information about the `exec` command `id`. - -**Example request**: - - GET /exec/11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: plain/text - - { - "ID" : "11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39", - "Running" : false, - "ExitCode" : 2, - "ProcessConfig" : { - "privileged" : false, - "user" : "", - "tty" : false, - "entrypoint" : "sh", - "arguments" : [ - "-c", - "exit 2" - ] - }, - "OpenStdin" : false, - "OpenStderr" : false, - "OpenStdout" : false, - "Container" : { - "State" : { - "Running" : true, - "Paused" : false, - "Restarting" : false, - "OOMKilled" : false, - "Pid" : 3650, - "ExitCode" : 0, - "Error" : "", - "StartedAt" : "2014-11-17T22:26:03.717657531Z", - "FinishedAt" : "0001-01-01T00:00:00Z" - }, - "ID" : "8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c", - "Created" : "2014-11-17T22:26:03.626304998Z", - "Path" : "date", - "Args" : [], - "Config" : { - "Hostname" : "8f177a186b97", - "Domainname" : "", - "User" : "", - "AttachStdin" : false, - "AttachStdout" : false, - "AttachStderr" : false, - "PortSpecs": null, - "ExposedPorts" : null, - "Tty" : false, - "OpenStdin" : false, - "StdinOnce" : false, - "Env" : [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], - "Cmd" : [ - "date" - ], - "Image" : "ubuntu", - "Volumes" : null, - "WorkingDir" : "", - "Entrypoint" : null, - "NetworkDisabled" : false, - "MacAddress" : "", - "OnBuild" : null, - "SecurityOpt" : null - }, - "Image" : "5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5", - "NetworkSettings" : { - "IPAddress" : "172.17.0.2", - "IPPrefixLen" : 16, - "MacAddress" : "02:42:ac:11:00:02", - "Gateway" : "172.17.42.1", - "Bridge" : "docker0", - "PortMapping" : null, - "Ports" : {} - }, - "ResolvConfPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/resolv.conf", - "HostnamePath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hostname", - "HostsPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hosts", - "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", - "Name" : "/test", - "Driver" : "aufs", - "ExecDriver" : "native-0.2", - "MountLabel" : "", - "ProcessLabel" : "", - "AppArmorProfile" : "", - "RestartCount" : 0, - "Volumes" : {}, - "VolumesRW" : {} - } - } - -**Status codes**: - -- **200** – no error -- **404** – no such exec instance -- **500** - server error - -# 3. Going further - -## 3.1 Inside `docker run` - -As an example, the `docker run` command line makes the following API calls: - -- Create the container - -- If the status code is 404, it means the image doesn't exist: - - Try to pull it. - - Then, retry to create the container. - -- Start the container. - -- If you are not in detached mode: -- Attach to the container, using `logs=1` (to have `stdout` and - `stderr` from the container's start) and `stream=1` - -- If in detached mode or only `stdin` is attached, display the container's id. - -## 3.2 Hijacking - -In this version of the API, `/attach`, uses hijacking to transport `stdin`, -`stdout`, and `stderr` on the same socket. - -To hint potential proxies about connection hijacking, Docker client sends -connection upgrade headers similarly to websocket. - - Upgrade: tcp - Connection: Upgrade - -When Docker daemon detects the `Upgrade` header, it switches its status code -from **200 OK** to **101 UPGRADED** and resends the same headers. - -This might change in the future. - -## 3.3 CORS Requests - -To set cross origin requests to the remote api please give values to -`--api-cors-header` when running Docker in daemon mode. Set * (asterisk) allows all, -default or blank means CORS disabled - - $ docker -d -H="192.168.1.9:2375" --api-cors-header="http://foo.bar" diff --git a/engine/reference/api/docker_remote_api_v1.19.md b/engine/reference/api/docker_remote_api_v1.19.md deleted file mode 100644 index e8ca7ee08f..0000000000 --- a/engine/reference/api/docker_remote_api_v1.19.md +++ /dev/null @@ -1,2225 +0,0 @@ ---- -redirect_from: - - /reference/api/docker_remote_api_v1.19/ -description: API Documentation for Docker -keywords: -- API, Docker, rcli, REST, documentation -title: Docker Remote API v1.19 ---- - -## 1. Brief introduction - - - The Remote API has replaced `rcli`. - - The daemon listens on `unix:///var/run/docker.sock` but you can - [Bind Docker to another host/port or a Unix socket](../commandline/dockerd.md#bind-docker-to-another-host-port-or-a-unix-socket). - - The API tends to be REST. However, for some complex commands, like `attach` - or `pull`, the HTTP connection is hijacked to transport `stdout`, - `stdin` and `stderr`. - - When the client API version is newer than the daemon's, these calls return an HTTP - `400 Bad Request` error message. - -# 2. Endpoints - -## 2.1 Containers - -### List containers - -`GET /containers/json` - -List containers - -**Example request**: - - GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Id": "8dfafdbc3a40", - "Names":["/boring_feynman"], - "Image": "ubuntu:latest", - "Command": "echo 1", - "Created": 1367854155, - "Status": "Exit 0", - "Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}], - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "SizeRw": 12288, - "SizeRootFs": 0 - }, - { - "Id": "9cd87474be90", - "Names":["/coolName"], - "Image": "ubuntu:latest", - "Command": "echo 222222", - "Created": 1367854155, - "Status": "Exit 0", - "Ports": [], - "Labels": {}, - "SizeRw": 12288, - "SizeRootFs": 0 - }, - { - "Id": "3176a2479c92", - "Names":["/sleepy_dog"], - "Image": "ubuntu:latest", - "Command": "echo 3333333333333333", - "Created": 1367854154, - "Status": "Exit 0", - "Ports":[], - "Labels": {}, - "SizeRw":12288, - "SizeRootFs":0 - }, - { - "Id": "4cb07b47f9fb", - "Names":["/running_cat"], - "Image": "ubuntu:latest", - "Command": "echo 444444444444444444444444444444444", - "Created": 1367854152, - "Status": "Exit 0", - "Ports": [], - "Labels": {}, - "SizeRw": 12288, - "SizeRootFs": 0 - } - ] - -**Query parameters**: - -- **all** – 1/True/true or 0/False/false, Show all containers. - Only running containers are shown by default (i.e., this defaults to false) -- **limit** – Show `limit` last created - containers, include non-running ones. -- **since** – Show only containers created since Id, include - non-running ones. -- **before** – Show only containers created before Id, include - non-running ones. -- **size** – 1/True/true or 0/False/false, Show the containers - sizes -- **filters** - a JSON encoded value of the filters (a `map[string][]string`) to process on the containers list. Available filters: - - `exited=`; -- containers with exit code of `` ; - - `status=`(`restarting`|`running`|`paused`|`exited`) - - `label=key` or `label="key=value"` of a container label - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **500** – server error - -### Create a container - -`POST /containers/create` - -Create a container - -**Example request**: - - POST /containers/create HTTP/1.1 - Content-Type: application/json - - { - "Hostname": "", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": true, - "AttachStderr": true, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": [ - "FOO=bar", - "BAZ=quux" - ], - "Cmd": [ - "date" - ], - "Entrypoint": null, - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "Volumes": { - "/volumes/data": {} - }, - "WorkingDir": "", - "NetworkDisabled": false, - "MacAddress": "12:34:56:78:9a:bc", - "ExposedPorts": { - "22/tcp": {} - }, - "HostConfig": { - "Binds": ["/tmp:/tmp"], - "Links": ["redis3:redis"], - "LxcConf": {"lxc.utsname":"docker"}, - "Memory": 0, - "MemorySwap": 0, - "CpuShares": 512, - "CpuPeriod": 100000, - "CpuQuota": 50000, - "CpusetCpus": "0,1", - "CpusetMems": "0,1", - "BlkioWeight": 300, - "OomKillDisable": false, - "PidMode": "", - "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] }, - "PublishAllPorts": false, - "Privileged": false, - "ReadonlyRootfs": false, - "Dns": ["8.8.8.8"], - "DnsSearch": [""], - "ExtraHosts": null, - "VolumesFrom": ["parent", "other:ro"], - "CapAdd": ["NET_ADMIN"], - "CapDrop": ["MKNOD"], - "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 }, - "NetworkMode": "bridge", - "Devices": [], - "Ulimits": [{}], - "LogConfig": { "Type": "json-file", "Config": {} }, - "SecurityOpt": [], - "CgroupParent": "" - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Id":"e90e34656806", - "Warnings":[] - } - -**JSON parameters**: - -- **Hostname** - A string value containing the hostname to use for the - container. -- **Domainname** - A string value containing the domain name to use - for the container. -- **User** - A string value specifying the user inside the container. -- **AttachStdin** - Boolean value, attaches to `stdin`. -- **AttachStdout** - Boolean value, attaches to `stdout`. -- **AttachStderr** - Boolean value, attaches to `stderr`. -- **Tty** - Boolean value, Attach standard streams to a `tty`, including `stdin` if it is not closed. -- **OpenStdin** - Boolean value, opens `stdin`, -- **StdinOnce** - Boolean value, close `stdin` after the 1 attached client disconnects. -- **Env** - A list of environment variables in the form of `["VAR=value"[,"VAR2=value2"]]` -- **Labels** - Adds a map of labels to a container. To specify a map: `{"key":"value"[,"key2":"value2"]}` -- **Cmd** - Command to run specified as a string or an array of strings. -- **Entrypoint** - Set the entry point for the container as a string or an array - of strings. -- **Image** - A string specifying the image name to use for the container. -- **Volumes** - An object mapping mount point paths (strings) inside the - container to empty objects. -- **WorkingDir** - A string specifying the working directory for commands to - run in. -- **NetworkDisabled** - Boolean value, when true disables networking for the - container -- **ExposedPorts** - An object mapping ports to an empty object in the form of: - `"ExposedPorts": { "/: {}" }` -- **HostConfig** - - **Binds** – A list of bind-mounts for this container. Each item is a string in one of these forms: - + `host-src:container-dest` to bind-mount a host path into the - container. Both `host-src`, and `container-dest` must be an - _absolute_ path. - + `host-src:container-dest:ro` to make the bind-mount read-only - inside the container. Both `host-src`, and `container-dest` must be - an _absolute_ path. - - **Links** - A list of links for the container. Each link entry should be - in the form of `container_name:alias`. - - **LxcConf** - LXC specific configurations. These configurations only - work when using the `lxc` execution driver. - - **Memory** - Memory limit in bytes. - - **MemorySwap** - Total memory limit (memory + swap); set `-1` to enable unlimited swap. - You must use this with `memory` and make the swap value larger than `memory`. - - **CpuShares** - An integer value containing the container's CPU Shares - (ie. the relative weight vs other containers). - - **CpuPeriod** - The length of a CPU period in microseconds. - - **CpuQuota** - Microseconds of CPU time that the container can get in a CPU period. - - **CpusetCpus** - String value containing the `cgroups CpusetCpus` to use. - - **CpusetMems** - Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. - - **BlkioWeight** - Block IO weight (relative weight) accepts a weight value between 10 and 1000. - - **OomKillDisable** - Boolean value, whether to disable OOM Killer for the container or not. - - **PidMode** - Set the PID (Process) Namespace mode for the container; - `"container:"`: joins another container's PID namespace - `"host"`: use the host's PID namespace inside the container - - **PortBindings** - A map of exposed container ports and the host port they - should map to. A JSON object in the form - `{ /: [{ "HostPort": "" }] }` - Take note that `port` is specified as a string and not an integer value. - - **PublishAllPorts** - Allocates a random host port for all of a container's - exposed ports. Specified as a boolean value. - - **Privileged** - Gives the container full access to the host. Specified as - a boolean value. - - **ReadonlyRootfs** - Mount the container's root filesystem as read only. - Specified as a boolean value. - - **Dns** - A list of DNS servers for the container to use. - - **DnsSearch** - A list of DNS search domains - - **ExtraHosts** - A list of hostnames/IP mappings to add to the - container's `/etc/hosts` file. Specified in the form `["hostname:IP"]`. - - **VolumesFrom** - A list of volumes to inherit from another container. - Specified in the form `[:]` - - **CapAdd** - A list of kernel capabilities to add to the container. - - **Capdrop** - A list of kernel capabilities to drop from the container. - - **RestartPolicy** – The behavior to apply when the container exits. The - value is an object with a `Name` property of either `"always"` to - always restart or `"on-failure"` to restart only when the container - exit code is non-zero. If `on-failure` is used, `MaximumRetryCount` - controls the number of times to retry before giving up. - The default is not to restart. (optional) - An ever increasing delay (double the previous delay, starting at 100mS) - is added before each restart to prevent flooding the server. - - **NetworkMode** - Sets the networking mode for the container. Supported - values are: `bridge`, `host`, `none`, and `container:` - - **Devices** - A list of devices to add to the container specified as a JSON object in the - form - `{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}` - - **Ulimits** - A list of ulimits to set in the container, specified as - `{ "Name": , "Soft": , "Hard": }`, for example: - `Ulimits: { "Name": "nofile", "Soft": 1024, "Hard": 2048 }` - - **SecurityOpt**: A list of string values to customize labels for MLS - systems, such as SELinux. - - **LogConfig** - Log configuration for the container, specified as a JSON object in the form - `{ "Type": "", "Config": {"key1": "val1"}}`. - Available types: `json-file`, `syslog`, `journald`, `none`. - `syslog` available options are: `address`. - - **CgroupParent** - Path to `cgroups` under which the container's `cgroup` is created. If the path is not absolute, the path is considered to be relative to the `cgroups` path of the init process. Cgroups are created if they do not already exist. - -**Query parameters**: - -- **name** – Assign the specified name to the container. Must - match `/?[a-zA-Z0-9_-]+`. - -**Status codes**: - -- **201** – no error -- **400** – bad parameter -- **404** – no such container -- **406** – impossible to attach (container not running) -- **409** – conflict -- **500** – server error - -### Inspect a container - -`GET /containers/(id or name)/json` - -Return low-level information on the container `id` - -**Example request**: - - GET /containers/4fa6e0f0c678/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "AppArmorProfile": "", - "Args": [ - "-c", - "exit 9" - ], - "Config": { - "AttachStderr": true, - "AttachStdin": false, - "AttachStdout": true, - "Cmd": [ - "/bin/sh", - "-c", - "exit 9" - ], - "Domainname": "", - "Entrypoint": null, - "Env": [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "ExposedPorts": null, - "Hostname": "ba033ac44011", - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "MacAddress": "", - "NetworkDisabled": false, - "OnBuild": null, - "OpenStdin": false, - "PortSpecs": null, - "StdinOnce": false, - "Tty": false, - "User": "", - "Volumes": null, - "WorkingDir": "" - }, - "Created": "2015-01-06T15:47:31.485331387Z", - "Driver": "devicemapper", - "ExecDriver": "native-0.2", - "ExecIDs": null, - "HostConfig": { - "Binds": null, - "BlkioWeight": 0, - "CapAdd": null, - "CapDrop": null, - "ContainerIDFile": "", - "CpusetCpus": "", - "CpusetMems": "", - "CpuShares": 0, - "CpuPeriod": 100000, - "Devices": [], - "Dns": null, - "DnsSearch": null, - "ExtraHosts": null, - "IpcMode": "", - "Links": null, - "LxcConf": [], - "Memory": 0, - "MemorySwap": 0, - "OomKillDisable": false, - "NetworkMode": "bridge", - "PidMode": "", - "PortBindings": {}, - "Privileged": false, - "ReadonlyRootfs": false, - "PublishAllPorts": false, - "RestartPolicy": { - "MaximumRetryCount": 2, - "Name": "on-failure" - }, - "LogConfig": { - "Config": null, - "Type": "json-file" - }, - "SecurityOpt": null, - "VolumesFrom": null, - "Ulimits": [{}] - }, - "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", - "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", - "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", - "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", - "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", - "MountLabel": "", - "Name": "/boring_euclid", - "NetworkSettings": { - "Bridge": "", - "Gateway": "", - "IPAddress": "", - "IPPrefixLen": 0, - "MacAddress": "", - "PortMapping": null, - "Ports": null - }, - "Path": "/bin/sh", - "ProcessLabel": "", - "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", - "RestartCount": 1, - "State": { - "Error": "", - "ExitCode": 9, - "FinishedAt": "2015-01-06T15:47:32.080254511Z", - "OOMKilled": false, - "Paused": false, - "Pid": 0, - "Restarting": false, - "Running": true, - "StartedAt": "2015-01-06T15:47:32.072697474Z" - }, - "Volumes": {}, - "VolumesRW": {} - } - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### List processes running inside a container - -`GET /containers/(id or name)/top` - -List processes running inside the container `id`. On Unix systems this -is done by running the `ps` command. This endpoint is not -supported on Windows. - -**Example request**: - - GET /containers/4fa6e0f0c678/top HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Titles" : [ - "UID", "PID", "PPID", "C", "STIME", "TTY", "TIME", "CMD" - ], - "Processes" : [ - [ - "root", "13642", "882", "0", "17:03", "pts/0", "00:00:00", "/bin/bash" - ], - [ - "root", "13735", "13642", "0", "17:06", "pts/0", "00:00:00", "sleep 10" - ] - ] - } - -**Example request**: - - GET /containers/4fa6e0f0c678/top?ps_args=aux HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Titles" : [ - "USER","PID","%CPU","%MEM","VSZ","RSS","TTY","STAT","START","TIME","COMMAND" - ] - "Processes" : [ - [ - "root","13642","0.0","0.1","18172","3184","pts/0","Ss","17:03","0:00","/bin/bash" - ], - [ - "root","13895","0.0","0.0","4348","692","pts/0","S+","17:15","0:00","sleep 10" - ] - ], - } - -**Query parameters**: - -- **ps_args** – `ps` arguments to use (e.g., `aux`), defaults to `-ef` - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Get container logs - -`GET /containers/(id or name)/logs` - -Get `stdout` and `stderr` logs from the container ``id`` - -> **Note**: -> This endpoint works only for containers with the `json-file` or `journald` logging drivers. - -**Example request**: - - GET /containers/4fa6e0f0c678/logs?stderr=1&stdout=1×tamps=1&follow=1&tail=10&since=1428990821 HTTP/1.1 - -**Example response**: - - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **follow** – 1/True/true or 0/False/false, return stream. Default `false`. -- **stdout** – 1/True/true or 0/False/false, show `stdout` log. Default `false`. -- **stderr** – 1/True/true or 0/False/false, show `stderr` log. Default `false`. -- **since** – UNIX timestamp (integer) to filter logs. Specifying a timestamp - will only output log-entries since that timestamp. Default: 0 (unfiltered) -- **timestamps** – 1/True/true or 0/False/false, print timestamps for - every log line. Default `false`. -- **tail** – Output specified number of lines at the end of logs: `all` or ``. Default all. - -**Status codes**: - -- **101** – no error, hints proxy about hijacking -- **200** – no error, no upgrade header found -- **404** – no such container -- **500** – server error - -### Inspect changes on a container's filesystem - -`GET /containers/(id or name)/changes` - -Inspect changes on container `id`'s filesystem - -**Example request**: - - GET /containers/4fa6e0f0c678/changes HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Path": "/dev", - "Kind": 0 - }, - { - "Path": "/dev/kmsg", - "Kind": 1 - }, - { - "Path": "/test", - "Kind": 1 - } - ] - -Values for `Kind`: - -- `0`: Modify -- `1`: Add -- `2`: Delete - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Export a container - -`GET /containers/(id or name)/export` - -Export the contents of container `id` - -**Example request**: - - GET /containers/4fa6e0f0c678/export HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/octet-stream - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Get container stats based on resource usage - -`GET /containers/(id or name)/stats` - -This endpoint returns a live stream of a container's resource usage statistics. - -**Example request**: - - GET /containers/redis1/stats HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "read" : "2015-01-08T22:57:31.547920715Z", - "network" : { - "rx_dropped" : 0, - "rx_bytes" : 648, - "rx_errors" : 0, - "tx_packets" : 8, - "tx_dropped" : 0, - "rx_packets" : 8, - "tx_errors" : 0, - "tx_bytes" : 648 - }, - "memory_stats" : { - "stats" : { - "total_pgmajfault" : 0, - "cache" : 0, - "mapped_file" : 0, - "total_inactive_file" : 0, - "pgpgout" : 414, - "rss" : 6537216, - "total_mapped_file" : 0, - "writeback" : 0, - "unevictable" : 0, - "pgpgin" : 477, - "total_unevictable" : 0, - "pgmajfault" : 0, - "total_rss" : 6537216, - "total_rss_huge" : 6291456, - "total_writeback" : 0, - "total_inactive_anon" : 0, - "rss_huge" : 6291456, - "hierarchical_memory_limit" : 67108864, - "total_pgfault" : 964, - "total_active_file" : 0, - "active_anon" : 6537216, - "total_active_anon" : 6537216, - "total_pgpgout" : 414, - "total_cache" : 0, - "inactive_anon" : 0, - "active_file" : 0, - "pgfault" : 964, - "inactive_file" : 0, - "total_pgpgin" : 477 - }, - "max_usage" : 6651904, - "usage" : 6537216, - "failcnt" : 0, - "limit" : 67108864 - }, - "blkio_stats" : {}, - "cpu_stats" : { - "cpu_usage" : { - "percpu_usage" : [ - 8646879, - 24472255, - 36438778, - 30657443 - ], - "usage_in_usermode" : 50000000, - "total_usage" : 100215355, - "usage_in_kernelmode" : 30000000 - }, - "system_cpu_usage" : 739306590000000, - "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0} - }, - "precpu_stats" : { - "cpu_usage" : { - "percpu_usage" : [ - 8646879, - 24350896, - 36438778, - 30657443 - ], - "usage_in_usermode" : 50000000, - "total_usage" : 100093996, - "usage_in_kernelmode" : 30000000 - }, - "system_cpu_usage" : 9492140000000, - "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0} - } - } - -The precpu_stats is the cpu statistic of last read, which is used for calculating the cpu usage percent. It is not the exact copy of the “cpu_stats” field. - -**Query parameters**: - -- **stream** – 1/True/true or 0/False/false, pull stats once then disconnect. Default `true`. - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Resize a container TTY - -`POST /containers/(id or name)/resize?h=&w=` - -Resize the TTY for container with `id`. You must restart the container for the resize to take effect. - -**Example request**: - - POST /containers/4fa6e0f0c678/resize?h=40&w=80 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Query parameters**: - -- **h** – height of `tty` session -- **w** – width - -**Status codes**: - -- **200** – no error -- **404** – No such container -- **500** – Cannot resize container - -### Start a container - -`POST /containers/(id or name)/start` - -Start the container `id` - -> **Note**: -> For backwards compatibility, this endpoint accepts a `HostConfig` as JSON-encoded request body. -> See [create a container](docker_remote_api_v1.19.md#create-a-container) for details. - -**Example request**: - - POST /containers/e90e34656806/start HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **304** – container already started -- **404** – no such container -- **500** – server error - -### Stop a container - -`POST /containers/(id or name)/stop` - -Stop the container `id` - -**Example request**: - - POST /containers/e90e34656806/stop?t=5 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **t** – number of seconds to wait before killing the container - -**Status codes**: - -- **204** – no error -- **304** – container already stopped -- **404** – no such container -- **500** – server error - -### Restart a container - -`POST /containers/(id or name)/restart` - -Restart the container `id` - -**Example request**: - - POST /containers/e90e34656806/restart?t=5 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **t** – number of seconds to wait before killing the container - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Kill a container - -`POST /containers/(id or name)/kill` - -Kill the container `id` - -**Example request**: - - POST /containers/e90e34656806/kill HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **signal** - Signal to send to the container: integer or string like `SIGINT`. - When not set, `SIGKILL` is assumed and the call waits for the container to exit. - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Rename a container - -`POST /containers/(id or name)/rename` - -Rename the container `id` to a `new_name` - -**Example request**: - - POST /containers/e90e34656806/rename?name=new_name HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **name** – new name for the container - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **409** - conflict name already assigned -- **500** – server error - -### Pause a container - -`POST /containers/(id or name)/pause` - -Pause the container `id` - -**Example request**: - - POST /containers/e90e34656806/pause HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Unpause a container - -`POST /containers/(id or name)/unpause` - -Unpause the container `id` - -**Example request**: - - POST /containers/e90e34656806/unpause HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Attach to a container - -`POST /containers/(id or name)/attach` - -Attach to the container `id` - -**Example request**: - - POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. -- **stream** – 1/True/true or 0/False/false, return stream. - Default `false`. -- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach - to `stdin`. Default `false`. -- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return - `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. -- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return - `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. - -**Status codes**: - -- **101** – no error, hints proxy about hijacking -- **200** – no error, no upgrade header found -- **400** – bad parameter -- **404** – no such container -- **500** – server error - -**Stream details**: - -When using the TTY setting is enabled in -[`POST /containers/create` -](docker_remote_api_v1.19.md#create-a-container), -the stream is the raw data from the process PTY and client's `stdin`. -When the TTY is disabled, then the stream is multiplexed to separate -`stdout` and `stderr`. - -The format is a **Header** and a **Payload** (frame). - -**HEADER** - -The header contains the information which the stream writes (`stdout` or -`stderr`). It also contains the size of the associated frame encoded in the -last four bytes (`uint32`). - -It is encoded on the first eight bytes like this: - - header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} - -`STREAM_TYPE` can be: - -- 0: `stdin` (is written on `stdout`) -- 1: `stdout` -- 2: `stderr` - -`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of -the `uint32` size encoded as big endian. - -**PAYLOAD** - -The payload is the raw stream. - -**IMPLEMENTATION** - -The simplest way to implement the Attach protocol is the following: - - 1. Read eight bytes. - 2. Choose `stdout` or `stderr` depending on the first byte. - 3. Extract the frame size from the last four bytes. - 4. Read the extracted size and output it on the correct output. - 5. Goto 1. - -### Attach to a container (websocket) - -`GET /containers/(id or name)/attach/ws` - -Attach to the container `id` via websocket - -Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455) - -**Example request** - - GET /containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1 - -**Example response** - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. -- **stream** – 1/True/true or 0/False/false, return stream. - Default `false`. -- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach - to `stdin`. Default `false`. -- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return - `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. -- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return - `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **404** – no such container -- **500** – server error - -### Wait a container - -`POST /containers/(id or name)/wait` - -Block until container `id` stops, then returns the exit code - -**Example request**: - - POST /containers/16253994b7c4/wait HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"StatusCode": 0} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Remove a container - -`DELETE /containers/(id or name)` - -Remove the container `id` from the filesystem - -**Example request**: - - DELETE /containers/16253994b7c4?v=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **v** – 1/True/true or 0/False/false, Remove the volumes - associated to the container. Default `false`. -- **force** - 1/True/true or 0/False/false, Kill then remove the container. - Default `false`. - -**Status codes**: - -- **204** – no error -- **400** – bad parameter -- **404** – no such container -- **409** – conflict -- **500** – server error - -### Copy files or folders from a container - -`POST /containers/(id or name)/copy` - -Copy files or folders of container `id` - -**Example request**: - - POST /containers/4fa6e0f0c678/copy HTTP/1.1 - Content-Type: application/json - - { - "Resource": "test.txt" - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -## 2.2 Images - -### List Images - -`GET /images/json` - -**Example request**: - - GET /images/json?all=0 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "RepoTags": [ - "ubuntu:12.04", - "ubuntu:precise", - "ubuntu:latest" - ], - "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c", - "Created": 1365714795, - "Size": 131506275, - "VirtualSize": 131506275, - "Labels": {} - }, - { - "RepoTags": [ - "ubuntu:12.10", - "ubuntu:quantal" - ], - "ParentId": "27cf784147099545", - "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", - "Created": 1364102658, - "Size": 24653, - "VirtualSize": 180116135, - "Labels": { - "com.example.version": "v1" - } - } - ] - -**Example request, with digest information**: - - GET /images/json?digests=1 HTTP/1.1 - -**Example response, with digest information**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Created": 1420064636, - "Id": "4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125", - "ParentId": "ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2", - "RepoDigests": [ - "localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" - ], - "RepoTags": [ - "localhost:5000/test/busybox:latest", - "playdate:latest" - ], - "Size": 0, - "VirtualSize": 2429728, - "Labels": {} - } - ] - -The response shows a single image `Id` associated with two repositories -(`RepoTags`): `localhost:5000/test/busybox`: and `playdate`. A caller can use -either of the `RepoTags` values `localhost:5000/test/busybox:latest` or -`playdate:latest` to reference the image. - -You can also use `RepoDigests` values to reference an image. In this response, -the array has only one reference and that is to the -`localhost:5000/test/busybox` repository; the `playdate` repository has no -digest. You can reference this digest using the value: -`localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d...` - -See the `docker run` and `docker build` commands for examples of digest and tag -references on the command line. - -**Query parameters**: - -- **all** – 1/True/true or 0/False/false, default false -- **filters** – a JSON encoded value of the filters (a map[string][]string) to process on the images list. Available filters: - - `dangling=true` - - `label=key` or `label="key=value"` of an image label -- **filter** - only return images with the specified name - -### Build image from a Dockerfile - -`POST /build` - -Build an image from a Dockerfile - -**Example request**: - - POST /build HTTP/1.1 - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"stream": "Step 1..."} - {"stream": "..."} - {"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}} - -The input stream must be a `tar` archive compressed with one of the -following algorithms: `identity` (no compression), `gzip`, `bzip2`, `xz`. - -The archive must include a build instructions file, typically called -`Dockerfile` at the archive's root. The `dockerfile` parameter may be -used to specify a different build instructions file. To do this, its value must be -the path to the alternate build instructions file to use. - -The archive may include any number of other files, -which are accessible in the build context (See the [*ADD build -command*](../../reference/builder.md#add)). - -The build is canceled if the client drops the connection by quitting -or being killed. - -**Query parameters**: - -- **dockerfile** - Path within the build context to the Dockerfile. This is - ignored if `remote` is specified and points to an individual filename. -- **t** – A name and optional tag to apply to the image in the `name:tag` format. - If you omit the `tag` the default `latest` value is assumed. -- **remote** – A Git repository URI or HTTP/HTTPS URI build source. If the - URI specifies a filename, the file's contents are placed into a file - called `Dockerfile`. -- **q** – Suppress verbose build output. -- **nocache** – Do not use the cache when building the image. -- **pull** - Attempt to pull the image even if an older image exists locally. -- **rm** - Remove intermediate containers after a successful build (default behavior). -- **forcerm** - Always remove intermediate containers (includes `rm`). -- **memory** - Set memory limit for build. -- **memswap** - Total memory (memory + swap), `-1` to enable unlimited swap. -- **cpushares** - CPU shares (relative weight). -- **cpusetcpus** - CPUs in which to allow execution (e.g., `0-3`, `0,1`). -- **cpuperiod** - The length of a CPU period in microseconds. -- **cpuquota** - Microseconds of CPU time that the container can get in a CPU period. - -**Request Headers**: - -- **Content-type** – Set to `"application/tar"`. -- **X-Registry-Config** – base64-encoded ConfigFile object - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Create an image - -`POST /images/create` - -Create an image either by pulling it from the registry or by importing it - -**Example request**: - - POST /images/create?fromImage=busybox&tag=latest HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "Pulling..."} - {"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}} - {"error": "Invalid..."} - ... - -When using this endpoint to pull an image from the registry, the -`X-Registry-Auth` header can be used to include -a base64-encoded AuthConfig object. - -**Query parameters**: - -- **fromImage** – Name of the image to pull. -- **fromSrc** – Source to import. The value may be a URL from which the image - can be retrieved or `-` to read the image from the request body. -- **repo** – Repository name. -- **tag** – Tag. If empty when pulling an image, this causes all tags - for the given image to be pulled. - -**Request Headers**: - -- **X-Registry-Auth** – base64-encoded AuthConfig object - -**Status codes**: - -- **200** – no error -- **500** – server error - - - -### Inspect an image - -`GET /images/(name)/json` - -Return low-level information on the image `name` - -**Example request**: - - GET /images/ubuntu/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Created": "2013-03-23T22:24:18.818426-07:00", - "Container": "3d67245a8d72ecf13f33dffac9f79dcdf70f75acb84d308770391510e0c23ad0", - "ContainerConfig": { - "Hostname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": false, - "AttachStderr": false, - "Tty": true, - "OpenStdin": true, - "StdinOnce": false, - "Env": null, - "Cmd": ["/bin/bash"], - "Dns": null, - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "Volumes": null, - "VolumesFrom": "", - "WorkingDir": "" - }, - "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", - "Parent": "27cf784147099545", - "Size": 6824592 - } - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Get the history of an image - -`GET /images/(name)/history` - -Return the history of the image `name` - -**Example request**: - - GET /images/ubuntu/history HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", - "Created": 1398108230, - "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", - "Tags": [ - "ubuntu:lucid", - "ubuntu:10.04" - ], - "Size": 182964289, - "Comment": "" - }, - { - "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", - "Created": 1398108222, - "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", - "Tags": null, - "Size": 0, - "Comment": "" - }, - { - "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", - "Created": 1371157430, - "CreatedBy": "", - "Tags": [ - "scratch12:latest", - "scratch:latest" - ], - "Size": 0, - "Comment": "Imported from -" - } - ] - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Push an image on the registry - -`POST /images/(name)/push` - -Push the image `name` on the registry - -**Example request**: - - POST /images/test/push HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "Pushing..."} - {"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}} - {"error": "Invalid..."} - ... - -If you wish to push an image on to a private registry, that image must already have a tag -into a repository which references that registry `hostname` and `port`. This repository name should -then be used in the URL. This duplicates the command line's flow. - -**Example request**: - - POST /images/registry.acme.com:5000/test/push HTTP/1.1 - - -**Query parameters**: - -- **tag** – The tag to associate with the image on the registry. This is optional. - -**Request Headers**: - -- **X-Registry-Auth** – base64-encoded AuthConfig object. - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Tag an image into a repository - -`POST /images/(name)/tag` - -Tag the image `name` into a repository - -**Example request**: - - POST /images/test/tag?repo=myrepo&force=0&tag=v42 HTTP/1.1 - -**Example response**: - - HTTP/1.1 201 Created - -**Query parameters**: - -- **repo** – The repository to tag in -- **force** – 1/True/true or 0/False/false, default false -- **tag** - The new tag name - -**Status codes**: - -- **201** – no error -- **400** – bad parameter -- **404** – no such image -- **409** – conflict -- **500** – server error - -### Remove an image - -`DELETE /images/(name)` - -Remove the image `name` from the filesystem - -**Example request**: - - DELETE /images/test HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-type: application/json - - [ - {"Untagged": "3e2f21a89f"}, - {"Deleted": "3e2f21a89f"}, - {"Deleted": "53b4f83ac9"} - ] - -**Query parameters**: - -- **force** – 1/True/true or 0/False/false, default false -- **noprune** – 1/True/true or 0/False/false, default false - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **409** – conflict -- **500** – server error - -### Search images - -`GET /images/search` - -Search for an image on [Docker Hub](https://hub.docker.com). This API -returns both `is_trusted` and `is_automated` images. Currently, they -are considered identical. In the future, the `is_trusted` property will -be deprecated and replaced by the `is_automated` property. - -> **Note**: -> The response keys have changed from API v1.6 to reflect the JSON -> sent by the registry server to the docker daemon's request. - -**Example request**: - - GET /images/search?term=sshd HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "star_count": 12, - "is_official": false, - "name": "wma55/u1210sshd", - "is_trusted": false, - "is_automated": false, - "description": "" - }, - { - "star_count": 10, - "is_official": false, - "name": "jdswinbank/sshd", - "is_trusted": false, - "is_automated": false, - "description": "" - }, - { - "star_count": 18, - "is_official": false, - "name": "vgauthier/sshd", - "is_trusted": false, - "is_automated": false, - "description": "" - } - ... - ] - -**Query parameters**: - -- **term** – term to search - -**Status codes**: - -- **200** – no error -- **500** – server error - -## 2.3 Misc - -### Check auth configuration - -`POST /auth` - -Get the default username and email - -**Example request**: - - POST /auth HTTP/1.1 - Content-Type: application/json - - { - "username": "hannibal", - "password": "xxxx", - "email": "hannibal@a-team.com", - "serveraddress": "https://index.docker.io/v1/" - } - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** – no error -- **204** – no error -- **500** – server error - -### Display system-wide information - -`GET /info` - -Display system-wide information - -**Example request**: - - GET /info HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Containers": 11, - "CpuCfsPeriod": true, - "CpuCfsQuota": true, - "Debug": false, - "DockerRootDir": "/var/lib/docker", - "Driver": "btrfs", - "DriverStatus": [[""]], - "ExecutionDriver": "native-0.1", - "ExperimentalBuild": false, - "HttpProxy": "http://test:test@localhost:8080", - "HttpsProxy": "https://test:test@localhost:8080", - "ID": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS", - "IPv4Forwarding": true, - "Images": 16, - "IndexServerAddress": "https://index.docker.io/v1/", - "InitPath": "/usr/bin/docker", - "InitSha1": "", - "KernelVersion": "3.12.0-1-amd64", - "Labels": [ - "storage=ssd" - ], - "MemTotal": 2099236864, - "MemoryLimit": true, - "NCPU": 1, - "NEventsListener": 0, - "NFd": 11, - "NGoroutines": 21, - "Name": "prod-server-42", - "NoProxy": "9.81.1.160", - "OomKillDisable": true, - "OperatingSystem": "Boot2Docker", - "RegistryConfig": { - "IndexConfigs": { - "docker.io": { - "Mirrors": null, - "Name": "docker.io", - "Official": true, - "Secure": true - } - }, - "InsecureRegistryCIDRs": [ - "127.0.0.0/8" - ] - }, - "SwapLimit": false, - "SystemTime": "2015-03-10T11:11:23.730591467-07:00" - } - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Show the docker version information - -`GET /version` - -Show the docker version information - -**Example request**: - - GET /version HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Version": "1.5.0", - "Os": "linux", - "KernelVersion": "3.18.5-tinycore64", - "GoVersion": "go1.4.1", - "GitCommit": "a8a31ef", - "Arch": "amd64", - "ApiVersion": "1.19" - } - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Ping the docker server - -`GET /_ping` - -Ping the docker server - -**Example request**: - - GET /_ping HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: text/plain - - OK - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Create a new image from a container's changes - -`POST /commit` - -Create a new image from a container's changes - -**Example request**: - - POST /commit?container=44c004db4b17&comment=message&repo=myrepo HTTP/1.1 - Content-Type: application/json - - { - "Hostname": "", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": true, - "AttachStderr": true, - "PortSpecs": null, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": null, - "Cmd": [ - "date" - ], - "Volumes": { - "/tmp": {} - }, - "Labels": { - "key1": "value1", - "key2": "value2" - }, - "WorkingDir": "", - "NetworkDisabled": false, - "ExposedPorts": { - "22/tcp": {} - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - {"Id": "596069db4bf5"} - -**JSON parameters**: - -- **config** - the container's configuration - -**Query parameters**: - -- **container** – source container -- **repo** – repository -- **tag** – tag -- **comment** – commit message -- **author** – author (e.g., "John Hannibal Smith - <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>") - -**Status codes**: - -- **201** – no error -- **404** – no such container -- **500** – server error - -### Monitor Docker's events - -`GET /events` - -Get container events from docker, in real time via streaming. - -Docker containers report the following events: - - attach, commit, copy, create, destroy, die, exec_create, exec_start, export, kill, oom, pause, rename, resize, restart, start, stop, top, unpause - -Docker images report the following events: - - untag, delete - -**Example request**: - - GET /events?since=1374067924 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "create", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924} - {"status": "start", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924} - {"status": "stop", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067966} - {"status": "destroy", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067970} - -**Query parameters**: - -- **since** – Timestamp. Show all events created since timestamp and then stream -- **until** – Timestamp. Show events created until given timestamp and stop streaming -- **filters** – A json encoded value of the filters (a map[string][]string) to process on the event list. Available filters: - - `container=`; -- container to filter - - `event=`; -- event to filter - - `image=`; -- image to filter - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Get a tarball containing all images in a repository - -`GET /images/(name)/get` - -Get a tarball containing all images and metadata for the repository specified -by `name`. - -If `name` is a specific name and tag (e.g. ubuntu:latest), then only that image -(and its parents) are returned. If `name` is an image ID, similarly only that -image (and its parents) are returned, but with the exclusion of the -'repositories' file in the tarball, as there were no image names referenced. - -See the [image tarball format](docker_remote_api_v1.19.md#image-tarball-format) for more details. - -**Example request** - - GET /images/ubuntu/get - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - Binary data stream - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Get a tarball containing all images - -`GET /images/get` - -Get a tarball containing all images and metadata for one or more repositories. - -For each value of the `names` parameter: if it is a specific name and tag (e.g. -`ubuntu:latest`), then only that image (and its parents) are returned; if it is -an image ID, similarly only that image (and its parents) are returned and there -would be no names referenced in the 'repositories' file for this image ID. - -See the [image tarball format](docker_remote_api_v1.19.md#image-tarball-format) for more details. - -**Example request** - - GET /images/get?names=myname%2Fmyapp%3Alatest&names=busybox - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - Binary data stream - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Load a tarball with a set of images and tags into docker - -`POST /images/load` - -Load a set of images and tags into a Docker repository. -See the [image tarball format](docker_remote_api_v1.19.md#image-tarball-format) for more details. - -**Example request** - - POST /images/load - Content-Type: application/x-tar - - Tarball in body - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Image tarball format - -An image tarball contains one directory per image layer (named using its long ID), -each containing these files: - -- `VERSION`: currently `1.0` - the file format version -- `json`: detailed layer information, similar to `docker inspect layer_id` -- `layer.tar`: A tarfile containing the filesystem changes in this layer - -The `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories -for storing attribute changes and deletions. - -If the tarball defines a repository, the tarball should also include a `repositories` file at -the root that contains a list of repository and tag names mapped to layer IDs. - -``` -{"hello-world": - {"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"} -} -``` - -### Exec Create - -`POST /containers/(id or name)/exec` - -Sets up an exec instance in a running container `id` - -**Example request**: - - POST /containers/e90e34656806/exec HTTP/1.1 - Content-Type: application/json - - { - "AttachStdin": true, - "AttachStdout": true, - "AttachStderr": true, - "Cmd": ["sh"], - "Tty": true, - "User": "123:456" - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Id": "f90e34656806", - "Warnings":[] - } - -**JSON parameters**: - -- **AttachStdin** - Boolean value, attaches to `stdin` of the `exec` command. -- **AttachStdout** - Boolean value, attaches to `stdout` of the `exec` command. -- **AttachStderr** - Boolean value, attaches to `stderr` of the `exec` command. -- **Tty** - Boolean value to allocate a pseudo-TTY. -- **Cmd** - Command to run specified as a string or an array of strings. -- **User** - A string value specifying the user, and optionally, group to run - the exec process inside the container. Format is one of: `"user"`, - `"user:group"`, `"uid"`, or `"uid:gid"`. - -**Status codes**: - -- **201** – no error -- **404** – no such container - -### Exec Start - -`POST /exec/(id)/start` - -Starts a previously set up `exec` instance `id`. If `detach` is true, this API -returns after starting the `exec` command. Otherwise, this API sets up an -interactive session with the `exec` command. - -**Example request**: - - POST /exec/e90e34656806/start HTTP/1.1 - Content-Type: application/json - - { - "Detach": false, - "Tty": false - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/vnd.docker.raw-stream - - {% raw %} - {{ STREAM }} - {% endraw %} - -**JSON parameters**: - -- **Detach** - Detach from the `exec` command. -- **Tty** - Boolean value to allocate a pseudo-TTY. - -**Status codes**: - -- **200** – no error -- **404** – no such exec instance - -**Stream details**: - -Similar to the stream behavior of `POST /containers/(id or name)/attach` API - -### Exec Resize - -`POST /exec/(id)/resize` - -Resizes the `tty` session used by the `exec` command `id`. The unit is number of characters. -This API is valid only if `tty` was specified as part of creating and starting the `exec` command. - -**Example request**: - - POST /exec/e90e34656806/resize?h=40&w=80 HTTP/1.1 - Content-Type: text/plain - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: text/plain - -**Query parameters**: - -- **h** – height of `tty` session -- **w** – width - -**Status codes**: - -- **201** – no error -- **404** – no such exec instance - -### Exec Inspect - -`GET /exec/(id)/json` - -Return low-level information about the `exec` command `id`. - -**Example request**: - - GET /exec/11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: plain/text - - { - "ID" : "11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39", - "Running" : false, - "ExitCode" : 2, - "ProcessConfig" : { - "privileged" : false, - "user" : "", - "tty" : false, - "entrypoint" : "sh", - "arguments" : [ - "-c", - "exit 2" - ] - }, - "OpenStdin" : false, - "OpenStderr" : false, - "OpenStdout" : false, - "Container" : { - "State" : { - "Running" : true, - "Paused" : false, - "Restarting" : false, - "OOMKilled" : false, - "Pid" : 3650, - "ExitCode" : 0, - "Error" : "", - "StartedAt" : "2014-11-17T22:26:03.717657531Z", - "FinishedAt" : "0001-01-01T00:00:00Z" - }, - "ID" : "8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c", - "Created" : "2014-11-17T22:26:03.626304998Z", - "Path" : "date", - "Args" : [], - "Config" : { - "Hostname" : "8f177a186b97", - "Domainname" : "", - "User" : "", - "AttachStdin" : false, - "AttachStdout" : false, - "AttachStderr" : false, - "PortSpecs": null, - "ExposedPorts" : null, - "Tty" : false, - "OpenStdin" : false, - "StdinOnce" : false, - "Env" : [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], - "Cmd" : [ - "date" - ], - "Image" : "ubuntu", - "Volumes" : null, - "WorkingDir" : "", - "Entrypoint" : null, - "NetworkDisabled" : false, - "MacAddress" : "", - "OnBuild" : null, - "SecurityOpt" : null - }, - "Image" : "5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5", - "NetworkSettings" : { - "IPAddress" : "172.17.0.2", - "IPPrefixLen" : 16, - "MacAddress" : "02:42:ac:11:00:02", - "Gateway" : "172.17.42.1", - "Bridge" : "docker0", - "PortMapping" : null, - "Ports" : {} - }, - "ResolvConfPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/resolv.conf", - "HostnamePath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hostname", - "HostsPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hosts", - "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", - "Name" : "/test", - "Driver" : "aufs", - "ExecDriver" : "native-0.2", - "MountLabel" : "", - "ProcessLabel" : "", - "AppArmorProfile" : "", - "RestartCount" : 0, - "Volumes" : {}, - "VolumesRW" : {} - } - } - -**Status codes**: - -- **200** – no error -- **404** – no such exec instance -- **500** - server error - -# 3. Going further - -## 3.1 Inside `docker run` - -As an example, the `docker run` command line makes the following API calls: - -- Create the container - -- If the status code is 404, it means the image doesn't exist: - - Try to pull it. - - Then, retry to create the container. - -- Start the container. - -- If you are not in detached mode: -- Attach to the container, using `logs=1` (to have `stdout` and - `stderr` from the container's start) and `stream=1` - -- If in detached mode or only `stdin` is attached, display the container's id. - -## 3.2 Hijacking - -In this version of the API, `/attach`, uses hijacking to transport `stdin`, -`stdout`, and `stderr` on the same socket. - -To hint potential proxies about connection hijacking, Docker client sends -connection upgrade headers similarly to websocket. - - Upgrade: tcp - Connection: Upgrade - -When Docker daemon detects the `Upgrade` header, it switches its status code -from **200 OK** to **101 UPGRADED** and resends the same headers. - - -## 3.3 CORS Requests - -To set cross origin requests to the remote api please give values to -`--api-cors-header` when running Docker in daemon mode. Set * (asterisk) allows all, -default or blank means CORS disabled - - $ docker -d -H="192.168.1.9:2375" --api-cors-header="http://foo.bar" diff --git a/engine/reference/api/docker_remote_api_v1.20.md b/engine/reference/api/docker_remote_api_v1.20.md deleted file mode 100644 index df0fe685c1..0000000000 --- a/engine/reference/api/docker_remote_api_v1.20.md +++ /dev/null @@ -1,2380 +0,0 @@ ---- -redirect_from: - - /reference/api/docker_remote_api_v1.20/ -description: API Documentation for Docker -keywords: -- API, Docker, rcli, REST, documentation -title: Docker Remote API v1.20 ---- - -## 1. Brief introduction - - - The Remote API has replaced `rcli`. - - The daemon listens on `unix:///var/run/docker.sock` but you can - [Bind Docker to another host/port or a Unix socket](../commandline/dockerd.md#bind-docker-to-another-host-port-or-a-unix-socket). - - The API tends to be REST. However, for some complex commands, like `attach` - or `pull`, the HTTP connection is hijacked to transport `stdout`, - `stdin` and `stderr`. - - When the client API version is newer than the daemon's, these calls return an HTTP - `400 Bad Request` error message. - -# 2. Endpoints - -## 2.1 Containers - -### List containers - -`GET /containers/json` - -List containers - -**Example request**: - - GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Id": "8dfafdbc3a40", - "Names":["/boring_feynman"], - "Image": "ubuntu:latest", - "Command": "echo 1", - "Created": 1367854155, - "Status": "Exit 0", - "Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}], - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "SizeRw": 12288, - "SizeRootFs": 0 - }, - { - "Id": "9cd87474be90", - "Names":["/coolName"], - "Image": "ubuntu:latest", - "Command": "echo 222222", - "Created": 1367854155, - "Status": "Exit 0", - "Ports": [], - "Labels": {}, - "SizeRw": 12288, - "SizeRootFs": 0 - }, - { - "Id": "3176a2479c92", - "Names":["/sleepy_dog"], - "Image": "ubuntu:latest", - "Command": "echo 3333333333333333", - "Created": 1367854154, - "Status": "Exit 0", - "Ports":[], - "Labels": {}, - "SizeRw":12288, - "SizeRootFs":0 - }, - { - "Id": "4cb07b47f9fb", - "Names":["/running_cat"], - "Image": "ubuntu:latest", - "Command": "echo 444444444444444444444444444444444", - "Created": 1367854152, - "Status": "Exit 0", - "Ports": [], - "Labels": {}, - "SizeRw": 12288, - "SizeRootFs": 0 - } - ] - -**Query parameters**: - -- **all** – 1/True/true or 0/False/false, Show all containers. - Only running containers are shown by default (i.e., this defaults to false) -- **limit** – Show `limit` last created - containers, include non-running ones. -- **since** – Show only containers created since Id, include - non-running ones. -- **before** – Show only containers created before Id, include - non-running ones. -- **size** – 1/True/true or 0/False/false, Show the containers - sizes -- **filters** - a JSON encoded value of the filters (a `map[string][]string`) to process on the containers list. Available filters: - - `exited=`; -- containers with exit code of `` ; - - `status=`(`created`|`restarting`|`running`|`paused`|`exited`) - - `label=key` or `label="key=value"` of a container label - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **500** – server error - -### Create a container - -`POST /containers/create` - -Create a container - -**Example request**: - - POST /containers/create HTTP/1.1 - Content-Type: application/json - - { - "Hostname": "", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": true, - "AttachStderr": true, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": [ - "FOO=bar", - "BAZ=quux" - ], - "Cmd": [ - "date" - ], - "Entrypoint": null, - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "Volumes": { - "/volumes/data": {} - }, - "WorkingDir": "", - "NetworkDisabled": false, - "MacAddress": "12:34:56:78:9a:bc", - "ExposedPorts": { - "22/tcp": {} - }, - "HostConfig": { - "Binds": ["/tmp:/tmp"], - "Links": ["redis3:redis"], - "LxcConf": {"lxc.utsname":"docker"}, - "Memory": 0, - "MemorySwap": 0, - "CpuShares": 512, - "CpuPeriod": 100000, - "CpuQuota": 50000, - "CpusetCpus": "0,1", - "CpusetMems": "0,1", - "BlkioWeight": 300, - "MemorySwappiness": 60, - "OomKillDisable": false, - "PidMode": "", - "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] }, - "PublishAllPorts": false, - "Privileged": false, - "ReadonlyRootfs": false, - "Dns": ["8.8.8.8"], - "DnsSearch": [""], - "ExtraHosts": null, - "VolumesFrom": ["parent", "other:ro"], - "CapAdd": ["NET_ADMIN"], - "CapDrop": ["MKNOD"], - "GroupAdd": ["newgroup"], - "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 }, - "NetworkMode": "bridge", - "Devices": [], - "Ulimits": [{}], - "LogConfig": { "Type": "json-file", "Config": {} }, - "SecurityOpt": [], - "CgroupParent": "" - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Id":"e90e34656806", - "Warnings":[] - } - -**JSON parameters**: - -- **Hostname** - A string value containing the hostname to use for the - container. -- **Domainname** - A string value containing the domain name to use - for the container. -- **User** - A string value specifying the user inside the container. -- **AttachStdin** - Boolean value, attaches to `stdin`. -- **AttachStdout** - Boolean value, attaches to `stdout`. -- **AttachStderr** - Boolean value, attaches to `stderr`. -- **Tty** - Boolean value, Attach standard streams to a `tty`, including `stdin` if it is not closed. -- **OpenStdin** - Boolean value, opens `stdin`, -- **StdinOnce** - Boolean value, close `stdin` after the 1 attached client disconnects. -- **Env** - A list of environment variables in the form of `["VAR=value"[,"VAR2=value2"]]` -- **Labels** - Adds a map of labels to a container. To specify a map: `{"key":"value"[,"key2":"value2"]}` -- **Cmd** - Command to run specified as a string or an array of strings. -- **Entrypoint** - Set the entry point for the container as a string or an array - of strings. -- **Image** - A string specifying the image name to use for the container. -- **Volumes** - An object mapping mount point paths (strings) inside the - container to empty objects. -- **WorkingDir** - A string specifying the working directory for commands to - run in. -- **NetworkDisabled** - Boolean value, when true disables networking for the - container -- **ExposedPorts** - An object mapping ports to an empty object in the form of: - `"ExposedPorts": { "/: {}" }` -- **HostConfig** - - **Binds** – A list of bind-mounts for this container. Each item is a string in one of these forms: - + `host-src:container-dest` to bind-mount a host path into the - container. Both `host-src`, and `container-dest` must be an - _absolute_ path. - + `host-src:container-dest:ro` to make the bind-mount read-only - inside the container. Both `host-src`, and `container-dest` must be - an _absolute_ path. - - **Links** - A list of links for the container. Each link entry should be - in the form of `container_name:alias`. - - **LxcConf** - LXC specific configurations. These configurations only - work when using the `lxc` execution driver. - - **Memory** - Memory limit in bytes. - - **MemorySwap** - Total memory limit (memory + swap); set `-1` to enable unlimited swap. - You must use this with `memory` and make the swap value larger than `memory`. - - **CpuShares** - An integer value containing the container's CPU Shares - (ie. the relative weight vs other containers). - - **CpuPeriod** - The length of a CPU period in microseconds. - - **CpuQuota** - Microseconds of CPU time that the container can get in a CPU period. - - **CpusetCpus** - String value containing the `cgroups CpusetCpus` to use. - - **CpusetMems** - Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. - - **BlkioWeight** - Block IO weight (relative weight) accepts a weight value between 10 and 1000. - - **MemorySwappiness** - Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. - - **OomKillDisable** - Boolean value, whether to disable OOM Killer for the container or not. - - **PidMode** - Set the PID (Process) Namespace mode for the container; - `"container:"`: joins another container's PID namespace - `"host"`: use the host's PID namespace inside the container - - **PortBindings** - A map of exposed container ports and the host port they - should map to. A JSON object in the form - `{ /: [{ "HostPort": "" }] }` - Take note that `port` is specified as a string and not an integer value. - - **PublishAllPorts** - Allocates a random host port for all of a container's - exposed ports. Specified as a boolean value. - - **Privileged** - Gives the container full access to the host. Specified as - a boolean value. - - **ReadonlyRootfs** - Mount the container's root filesystem as read only. - Specified as a boolean value. - - **Dns** - A list of DNS servers for the container to use. - - **DnsSearch** - A list of DNS search domains - - **ExtraHosts** - A list of hostnames/IP mappings to add to the - container's `/etc/hosts` file. Specified in the form `["hostname:IP"]`. - - **VolumesFrom** - A list of volumes to inherit from another container. - Specified in the form `[:]` - - **CapAdd** - A list of kernel capabilities to add to the container. - - **Capdrop** - A list of kernel capabilities to drop from the container. - - **GroupAdd** - A list of additional groups that the container process will run as - - **RestartPolicy** – The behavior to apply when the container exits. The - value is an object with a `Name` property of either `"always"` to - always restart or `"on-failure"` to restart only when the container - exit code is non-zero. If `on-failure` is used, `MaximumRetryCount` - controls the number of times to retry before giving up. - The default is not to restart. (optional) - An ever increasing delay (double the previous delay, starting at 100mS) - is added before each restart to prevent flooding the server. - - **NetworkMode** - Sets the networking mode for the container. Supported - values are: `bridge`, `host`, `none`, and `container:` - - **Devices** - A list of devices to add to the container specified as a JSON object in the - form - `{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}` - - **Ulimits** - A list of ulimits to set in the container, specified as - `{ "Name": , "Soft": , "Hard": }`, for example: - `Ulimits: { "Name": "nofile", "Soft": 1024, "Hard": 2048 }` - - **SecurityOpt**: A list of string values to customize labels for MLS - systems, such as SELinux. - - **LogConfig** - Log configuration for the container, specified as a JSON object in the form - `{ "Type": "", "Config": {"key1": "val1"}}`. - Available types: `json-file`, `syslog`, `journald`, `gelf`, `none`. - `json-file` logging driver. - - **CgroupParent** - Path to `cgroups` under which the container's `cgroup` is created. If the path is not absolute, the path is considered to be relative to the `cgroups` path of the init process. Cgroups are created if they do not already exist. - -**Query parameters**: - -- **name** – Assign the specified name to the container. Must - match `/?[a-zA-Z0-9_-]+`. - -**Status codes**: - -- **201** – no error -- **400** – bad parameter -- **404** – no such container -- **406** – impossible to attach (container not running) -- **409** – conflict -- **500** – server error - -### Inspect a container - -`GET /containers/(id or name)/json` - -Return low-level information on the container `id` - -**Example request**: - - GET /containers/4fa6e0f0c678/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "AppArmorProfile": "", - "Args": [ - "-c", - "exit 9" - ], - "Config": { - "AttachStderr": true, - "AttachStdin": false, - "AttachStdout": true, - "Cmd": [ - "/bin/sh", - "-c", - "exit 9" - ], - "Domainname": "", - "Entrypoint": null, - "Env": [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "ExposedPorts": null, - "Hostname": "ba033ac44011", - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "MacAddress": "", - "NetworkDisabled": false, - "OnBuild": null, - "OpenStdin": false, - "StdinOnce": false, - "Tty": false, - "User": "", - "Volumes": null, - "WorkingDir": "" - }, - "Created": "2015-01-06T15:47:31.485331387Z", - "Driver": "devicemapper", - "ExecDriver": "native-0.2", - "ExecIDs": null, - "HostConfig": { - "Binds": null, - "BlkioWeight": 0, - "CapAdd": null, - "CapDrop": null, - "ContainerIDFile": "", - "CpusetCpus": "", - "CpusetMems": "", - "CpuShares": 0, - "CpuPeriod": 100000, - "Devices": [], - "Dns": null, - "DnsSearch": null, - "ExtraHosts": null, - "IpcMode": "", - "Links": null, - "LxcConf": [], - "Memory": 0, - "MemorySwap": 0, - "OomKillDisable": false, - "NetworkMode": "bridge", - "PidMode": "", - "PortBindings": {}, - "Privileged": false, - "ReadonlyRootfs": false, - "PublishAllPorts": false, - "RestartPolicy": { - "MaximumRetryCount": 2, - "Name": "on-failure" - }, - "LogConfig": { - "Config": null, - "Type": "json-file" - }, - "SecurityOpt": null, - "VolumesFrom": null, - "Ulimits": [{}] - }, - "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", - "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", - "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", - "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", - "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", - "MountLabel": "", - "Name": "/boring_euclid", - "NetworkSettings": { - "Bridge": "", - "Gateway": "", - "IPAddress": "", - "IPPrefixLen": 0, - "MacAddress": "", - "PortMapping": null, - "Ports": null - }, - "Path": "/bin/sh", - "ProcessLabel": "", - "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", - "RestartCount": 1, - "State": { - "Error": "", - "ExitCode": 9, - "FinishedAt": "2015-01-06T15:47:32.080254511Z", - "OOMKilled": false, - "Paused": false, - "Pid": 0, - "Restarting": false, - "Running": true, - "StartedAt": "2015-01-06T15:47:32.072697474Z" - }, - "Mounts": [ - { - "Source": "/data", - "Destination": "/data", - "Mode": "ro,Z", - "RW": false - } - ] - } - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### List processes running inside a container - -`GET /containers/(id or name)/top` - -List processes running inside the container `id`. On Unix systems this -is done by running the `ps` command. This endpoint is not -supported on Windows. - -**Example request**: - - GET /containers/4fa6e0f0c678/top HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Titles" : [ - "UID", "PID", "PPID", "C", "STIME", "TTY", "TIME", "CMD" - ], - "Processes" : [ - [ - "root", "13642", "882", "0", "17:03", "pts/0", "00:00:00", "/bin/bash" - ], - [ - "root", "13735", "13642", "0", "17:06", "pts/0", "00:00:00", "sleep 10" - ] - ] - } - -**Example request**: - - GET /containers/4fa6e0f0c678/top?ps_args=aux HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Titles" : [ - "USER","PID","%CPU","%MEM","VSZ","RSS","TTY","STAT","START","TIME","COMMAND" - ] - "Processes" : [ - [ - "root","13642","0.0","0.1","18172","3184","pts/0","Ss","17:03","0:00","/bin/bash" - ], - [ - "root","13895","0.0","0.0","4348","692","pts/0","S+","17:15","0:00","sleep 10" - ] - ], - } - -**Query parameters**: - -- **ps_args** – `ps` arguments to use (e.g., `aux`), defaults to `-ef` - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Get container logs - -`GET /containers/(id or name)/logs` - -Get `stdout` and `stderr` logs from the container ``id`` - -> **Note**: -> This endpoint works only for containers with the `json-file` or `journald` logging drivers. - -**Example request**: - - GET /containers/4fa6e0f0c678/logs?stderr=1&stdout=1×tamps=1&follow=1&tail=10&since=1428990821 HTTP/1.1 - -**Example response**: - - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **follow** – 1/True/true or 0/False/false, return stream. Default `false`. -- **stdout** – 1/True/true or 0/False/false, show `stdout` log. Default `false`. -- **stderr** – 1/True/true or 0/False/false, show `stderr` log. Default `false`. -- **since** – UNIX timestamp (integer) to filter logs. Specifying a timestamp - will only output log-entries since that timestamp. Default: 0 (unfiltered) -- **timestamps** – 1/True/true or 0/False/false, print timestamps for - every log line. Default `false`. -- **tail** – Output specified number of lines at the end of logs: `all` or ``. Default all. - -**Status codes**: - -- **101** – no error, hints proxy about hijacking -- **200** – no error, no upgrade header found -- **404** – no such container -- **500** – server error - -### Inspect changes on a container's filesystem - -`GET /containers/(id or name)/changes` - -Inspect changes on container `id`'s filesystem - -**Example request**: - - GET /containers/4fa6e0f0c678/changes HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Path": "/dev", - "Kind": 0 - }, - { - "Path": "/dev/kmsg", - "Kind": 1 - }, - { - "Path": "/test", - "Kind": 1 - } - ] - -Values for `Kind`: - -- `0`: Modify -- `1`: Add -- `2`: Delete - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Export a container - -`GET /containers/(id or name)/export` - -Export the contents of container `id` - -**Example request**: - - GET /containers/4fa6e0f0c678/export HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/octet-stream - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Get container stats based on resource usage - -`GET /containers/(id or name)/stats` - -This endpoint returns a live stream of a container's resource usage statistics. - -**Example request**: - - GET /containers/redis1/stats HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "read" : "2015-01-08T22:57:31.547920715Z", - "network" : { - "rx_dropped" : 0, - "rx_bytes" : 648, - "rx_errors" : 0, - "tx_packets" : 8, - "tx_dropped" : 0, - "rx_packets" : 8, - "tx_errors" : 0, - "tx_bytes" : 648 - }, - "memory_stats" : { - "stats" : { - "total_pgmajfault" : 0, - "cache" : 0, - "mapped_file" : 0, - "total_inactive_file" : 0, - "pgpgout" : 414, - "rss" : 6537216, - "total_mapped_file" : 0, - "writeback" : 0, - "unevictable" : 0, - "pgpgin" : 477, - "total_unevictable" : 0, - "pgmajfault" : 0, - "total_rss" : 6537216, - "total_rss_huge" : 6291456, - "total_writeback" : 0, - "total_inactive_anon" : 0, - "rss_huge" : 6291456, - "hierarchical_memory_limit" : 67108864, - "total_pgfault" : 964, - "total_active_file" : 0, - "active_anon" : 6537216, - "total_active_anon" : 6537216, - "total_pgpgout" : 414, - "total_cache" : 0, - "inactive_anon" : 0, - "active_file" : 0, - "pgfault" : 964, - "inactive_file" : 0, - "total_pgpgin" : 477 - }, - "max_usage" : 6651904, - "usage" : 6537216, - "failcnt" : 0, - "limit" : 67108864 - }, - "blkio_stats" : {}, - "cpu_stats" : { - "cpu_usage" : { - "percpu_usage" : [ - 8646879, - 24472255, - 36438778, - 30657443 - ], - "usage_in_usermode" : 50000000, - "total_usage" : 100215355, - "usage_in_kernelmode" : 30000000 - }, - "system_cpu_usage" : 739306590000000, - "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0} - }, - "precpu_stats" : { - "cpu_usage" : { - "percpu_usage" : [ - 8646879, - 24350896, - 36438778, - 30657443 - ], - "usage_in_usermode" : 50000000, - "total_usage" : 100093996, - "usage_in_kernelmode" : 30000000 - }, - "system_cpu_usage" : 9492140000000, - "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0} - } - } - -The precpu_stats is the cpu statistic of last read, which is used for calculating the cpu usage percent. It is not the exact copy of the “cpu_stats” field. - -**Query parameters**: - -- **stream** – 1/True/true or 0/False/false, pull stats once then disconnect. Default `true`. - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Resize a container TTY - -`POST /containers/(id or name)/resize?h=&w=` - -Resize the TTY for container with `id`. You must restart the container for the resize to take effect. - -**Example request**: - - POST /containers/4fa6e0f0c678/resize?h=40&w=80 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Query parameters**: - -- **h** – height of `tty` session -- **w** – width - -**Status codes**: - -- **200** – no error -- **404** – No such container -- **500** – Cannot resize container - -### Start a container - -`POST /containers/(id or name)/start` - -Start the container `id` - -> **Note**: -> For backwards compatibility, this endpoint accepts a `HostConfig` as JSON-encoded request body. -> See [create a container](docker_remote_api_v1.20.md#create-a-container) for details. - -**Example request**: - - POST /containers/e90e34656806/start HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **304** – container already started -- **404** – no such container -- **500** – server error - -### Stop a container - -`POST /containers/(id or name)/stop` - -Stop the container `id` - -**Example request**: - - POST /containers/e90e34656806/stop?t=5 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **t** – number of seconds to wait before killing the container - -**Status codes**: - -- **204** – no error -- **304** – container already stopped -- **404** – no such container -- **500** – server error - -### Restart a container - -`POST /containers/(id or name)/restart` - -Restart the container `id` - -**Example request**: - - POST /containers/e90e34656806/restart?t=5 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **t** – number of seconds to wait before killing the container - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Kill a container - -`POST /containers/(id or name)/kill` - -Kill the container `id` - -**Example request**: - - POST /containers/e90e34656806/kill HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **signal** - Signal to send to the container: integer or string like `SIGINT`. - When not set, `SIGKILL` is assumed and the call waits for the container to exit. - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Rename a container - -`POST /containers/(id or name)/rename` - -Rename the container `id` to a `new_name` - -**Example request**: - - POST /containers/e90e34656806/rename?name=new_name HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **name** – new name for the container - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **409** - conflict name already assigned -- **500** – server error - -### Pause a container - -`POST /containers/(id or name)/pause` - -Pause the container `id` - -**Example request**: - - POST /containers/e90e34656806/pause HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Unpause a container - -`POST /containers/(id or name)/unpause` - -Unpause the container `id` - -**Example request**: - - POST /containers/e90e34656806/unpause HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Attach to a container - -`POST /containers/(id or name)/attach` - -Attach to the container `id` - -**Example request**: - - POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. -- **stream** – 1/True/true or 0/False/false, return stream. - Default `false`. -- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach - to `stdin`. Default `false`. -- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return - `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. -- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return - `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. - -**Status codes**: - -- **101** – no error, hints proxy about hijacking -- **200** – no error, no upgrade header found -- **400** – bad parameter -- **404** – no such container -- **500** – server error - -**Stream details**: - -When using the TTY setting is enabled in -[`POST /containers/create` -](docker_remote_api_v1.20.md#create-a-container), -the stream is the raw data from the process PTY and client's `stdin`. -When the TTY is disabled, then the stream is multiplexed to separate -`stdout` and `stderr`. - -The format is a **Header** and a **Payload** (frame). - -**HEADER** - -The header contains the information which the stream writes (`stdout` or -`stderr`). It also contains the size of the associated frame encoded in the -last four bytes (`uint32`). - -It is encoded on the first eight bytes like this: - - header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} - -`STREAM_TYPE` can be: - -- 0: `stdin` (is written on `stdout`) -- 1: `stdout` -- 2: `stderr` - -`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of -the `uint32` size encoded as big endian. - -**PAYLOAD** - -The payload is the raw stream. - -**IMPLEMENTATION** - -The simplest way to implement the Attach protocol is the following: - - 1. Read eight bytes. - 2. Choose `stdout` or `stderr` depending on the first byte. - 3. Extract the frame size from the last four bytes. - 4. Read the extracted size and output it on the correct output. - 5. Goto 1. - -### Attach to a container (websocket) - -`GET /containers/(id or name)/attach/ws` - -Attach to the container `id` via websocket - -Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455) - -**Example request** - - GET /containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1 - -**Example response** - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. -- **stream** – 1/True/true or 0/False/false, return stream. - Default `false`. -- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach - to `stdin`. Default `false`. -- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return - `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. -- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return - `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **404** – no such container -- **500** – server error - -### Wait a container - -`POST /containers/(id or name)/wait` - -Block until container `id` stops, then returns the exit code - -**Example request**: - - POST /containers/16253994b7c4/wait HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"StatusCode": 0} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Remove a container - -`DELETE /containers/(id or name)` - -Remove the container `id` from the filesystem - -**Example request**: - - DELETE /containers/16253994b7c4?v=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **v** – 1/True/true or 0/False/false, Remove the volumes - associated to the container. Default `false`. -- **force** - 1/True/true or 0/False/false, Kill then remove the container. - Default `false`. - -**Status codes**: - -- **204** – no error -- **400** – bad parameter -- **404** – no such container -- **409** – conflict -- **500** – server error - -### Copy files or folders from a container - -`POST /containers/(id or name)/copy` - -Copy files or folders of container `id` - -**Deprecated** in favor of the `archive` endpoint below. - -**Example request**: - - POST /containers/4fa6e0f0c678/copy HTTP/1.1 - Content-Type: application/json - - { - "Resource": "test.txt" - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Retrieving information about files and folders in a container - -`HEAD /containers/(id or name)/archive` - -See the description of the `X-Docker-Container-Path-Stat` header in the -following section. - -### Get an archive of a filesystem resource in a container - -`GET /containers/(id or name)/archive` - -Get a tar archive of a resource in the filesystem of container `id`. - -**Query parameters**: - -- **path** - resource in the container's filesystem to archive. Required. - - If not an absolute path, it is relative to the container's root directory. - The resource specified by **path** must exist. To assert that the resource - is expected to be a directory, **path** should end in `/` or `/.` - (assuming a path separator of `/`). If **path** ends in `/.` then this - indicates that only the contents of the **path** directory should be - copied. A symlink is always resolved to its target. - - > **Note**: It is not possible to copy certain system files such as resources - > under `/proc`, `/sys`, `/dev`, and mounts created by the user in the - > container. - -**Example request**: - - GET /containers/8cce319429b2/archive?path=/root HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - X-Docker-Container-Path-Stat: eyJuYW1lIjoicm9vdCIsInNpemUiOjQwOTYsIm1vZGUiOjIxNDc0ODQwOTYsIm10aW1lIjoiMjAxNC0wMi0yN1QyMDo1MToyM1oiLCJsaW5rVGFyZ2V0IjoiIn0= - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -On success, a response header `X-Docker-Container-Path-Stat` will be set to a -base64-encoded JSON object containing some filesystem header information about -the archived resource. The above example value would decode to the following -JSON object (whitespace added for readability): - -```json -{ - "name": "root", - "size": 4096, - "mode": 2147484096, - "mtime": "2014-02-27T20:51:23Z", - "linkTarget": "" -} -``` - -A `HEAD` request can also be made to this endpoint if only this information is -desired. - -**Status codes**: - -- **200** - success, returns archive of copied resource -- **400** - client error, bad parameter, details in JSON response body, one of: - - must specify path parameter (**path** cannot be empty) - - not a directory (**path** was asserted to be a directory but exists as a - file) -- **404** - client error, resource not found, one of: - – no such container (container `id` does not exist) - - no such file or directory (**path** does not exist) -- **500** - server error - -### Extract an archive of files or folders to a directory in a container - -`PUT /containers/(id or name)/archive` - -Upload a tar archive to be extracted to a path in the filesystem of container -`id`. - -**Query parameters**: - -- **path** - path to a directory in the container - to extract the archive's contents into. Required. - - If not an absolute path, it is relative to the container's root directory. - The **path** resource must exist. -- **noOverwriteDirNonDir** - If "1", "true", or "True" then it will be an error - if unpacking the given content would cause an existing directory to be - replaced with a non-directory and vice versa. - -**Example request**: - - PUT /containers/8cce319429b2/archive?path=/vol1 HTTP/1.1 - Content-Type: application/x-tar - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** – the content was extracted successfully -- **400** - client error, bad parameter, details in JSON response body, one of: - - must specify path parameter (**path** cannot be empty) - - not a directory (**path** should be a directory but exists as a file) - - unable to overwrite existing directory with non-directory - (if **noOverwriteDirNonDir**) - - unable to overwrite existing non-directory with directory - (if **noOverwriteDirNonDir**) -- **403** - client error, permission denied, the volume - or container rootfs is marked as read-only. -- **404** - client error, resource not found, one of: - – no such container (container `id` does not exist) - - no such file or directory (**path** resource does not exist) -- **500** – server error - -## 2.2 Images - -### List Images - -`GET /images/json` - -**Example request**: - - GET /images/json?all=0 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "RepoTags": [ - "ubuntu:12.04", - "ubuntu:precise", - "ubuntu:latest" - ], - "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c", - "Created": 1365714795, - "Size": 131506275, - "VirtualSize": 131506275, - "Labels": {} - }, - { - "RepoTags": [ - "ubuntu:12.10", - "ubuntu:quantal" - ], - "ParentId": "27cf784147099545", - "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", - "Created": 1364102658, - "Size": 24653, - "VirtualSize": 180116135, - "Labels": { - "com.example.version": "v1" - } - } - ] - -**Example request, with digest information**: - - GET /images/json?digests=1 HTTP/1.1 - -**Example response, with digest information**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Created": 1420064636, - "Id": "4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125", - "ParentId": "ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2", - "RepoDigests": [ - "localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" - ], - "RepoTags": [ - "localhost:5000/test/busybox:latest", - "playdate:latest" - ], - "Size": 0, - "VirtualSize": 2429728, - "Labels": {} - } - ] - -The response shows a single image `Id` associated with two repositories -(`RepoTags`): `localhost:5000/test/busybox`: and `playdate`. A caller can use -either of the `RepoTags` values `localhost:5000/test/busybox:latest` or -`playdate:latest` to reference the image. - -You can also use `RepoDigests` values to reference an image. In this response, -the array has only one reference and that is to the -`localhost:5000/test/busybox` repository; the `playdate` repository has no -digest. You can reference this digest using the value: -`localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d...` - -See the `docker run` and `docker build` commands for examples of digest and tag -references on the command line. - -**Query parameters**: - -- **all** – 1/True/true or 0/False/false, default false -- **filters** – a JSON encoded value of the filters (a map[string][]string) to process on the images list. Available filters: - - `dangling=true` - - `label=key` or `label="key=value"` of an image label -- **filter** - only return images with the specified name - -### Build image from a Dockerfile - -`POST /build` - -Build an image from a Dockerfile - -**Example request**: - - POST /build HTTP/1.1 - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"stream": "Step 1..."} - {"stream": "..."} - {"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}} - -The input stream must be a `tar` archive compressed with one of the -following algorithms: `identity` (no compression), `gzip`, `bzip2`, `xz`. - -The archive must include a build instructions file, typically called -`Dockerfile` at the archive's root. The `dockerfile` parameter may be -used to specify a different build instructions file. To do this, its value must be -the path to the alternate build instructions file to use. - -The archive may include any number of other files, -which are accessible in the build context (See the [*ADD build -command*](../../reference/builder.md#add)). - -The build is canceled if the client drops the connection by quitting -or being killed. - -**Query parameters**: - -- **dockerfile** - Path within the build context to the `Dockerfile`. This is - ignored if `remote` is specified and points to an external `Dockerfile`. -- **t** – A name and optional tag to apply to the image in the `name:tag` format. - If you omit the `tag` the default `latest` value is assumed. -- **remote** – A Git repository URI or HTTP/HTTPS context URI. If the - URI points to a single text file, the file's contents are placed into - a file called `Dockerfile` and the image is built from that file. If - the URI points to a tarball, the file is downloaded by the daemon and - the contents therein used as the context for the build. If the URI - points to a tarball and the `dockerfile` parameter is also specified, - there must be a file with the corresponding path inside the tarball. -- **q** – Suppress verbose build output. -- **nocache** – Do not use the cache when building the image. -- **pull** - Attempt to pull the image even if an older image exists locally. -- **rm** - Remove intermediate containers after a successful build (default behavior). -- **forcerm** - Always remove intermediate containers (includes `rm`). -- **memory** - Set memory limit for build. -- **memswap** - Total memory (memory + swap), `-1` to enable unlimited swap. -- **cpushares** - CPU shares (relative weight). -- **cpusetcpus** - CPUs in which to allow execution (e.g., `0-3`, `0,1`). -- **cpuperiod** - The length of a CPU period in microseconds. -- **cpuquota** - Microseconds of CPU time that the container can get in a CPU period. - -**Request Headers**: - -- **Content-type** – Set to `"application/tar"`. -- **X-Registry-Config** – A base64-url-safe-encoded Registry Auth Config JSON - object with the following structure: - - { - "docker.example.com": { - "username": "janedoe", - "password": "hunter2" - }, - "https://index.docker.io/v1/": { - "username": "mobydock", - "password": "conta1n3rize14" - } - } - - This object maps the hostname of a registry to an object containing the - "username" and "password" for that registry. Multiple registries may - be specified as the build may be based on an image requiring - authentication to pull from any arbitrary registry. Only the registry - domain name (and port if not the default "443") are required. However - (for legacy reasons) the "official" Docker, Inc. hosted registry must - be specified with both a "https://" prefix and a "/v1/" suffix even - though Docker will prefer to use the v2 registry API. - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Create an image - -`POST /images/create` - -Create an image either by pulling it from the registry or by importing it - -**Example request**: - - POST /images/create?fromImage=busybox&tag=latest HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "Pulling..."} - {"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}} - {"error": "Invalid..."} - ... - -When using this endpoint to pull an image from the registry, the -`X-Registry-Auth` header can be used to include -a base64-encoded AuthConfig object. - -**Query parameters**: - -- **fromImage** – Name of the image to pull. -- **fromSrc** – Source to import. The value may be a URL from which the image - can be retrieved or `-` to read the image from the request body. -- **repo** – Repository name. -- **tag** – Tag. If empty when pulling an image, this causes all tags - for the given image to be pulled. - -**Request Headers**: - -- **X-Registry-Auth** – base64-encoded AuthConfig object - -**Status codes**: - -- **200** – no error -- **500** – server error - - - -### Inspect an image - -`GET /images/(name)/json` - -Return low-level information on the image `name` - -**Example request**: - - GET /images/ubuntu/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Created": "2013-03-23T22:24:18.818426-07:00", - "Container": "3d67245a8d72ecf13f33dffac9f79dcdf70f75acb84d308770391510e0c23ad0", - "ContainerConfig": { - "Hostname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": false, - "AttachStderr": false, - "Tty": true, - "OpenStdin": true, - "StdinOnce": false, - "Env": null, - "Cmd": ["/bin/bash"], - "Dns": null, - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "Volumes": null, - "VolumesFrom": "", - "WorkingDir": "" - }, - "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", - "Parent": "27cf784147099545", - "Size": 6824592 - } - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Get the history of an image - -`GET /images/(name)/history` - -Return the history of the image `name` - -**Example request**: - - GET /images/ubuntu/history HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", - "Created": 1398108230, - "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", - "Tags": [ - "ubuntu:lucid", - "ubuntu:10.04" - ], - "Size": 182964289, - "Comment": "" - }, - { - "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", - "Created": 1398108222, - "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", - "Tags": null, - "Size": 0, - "Comment": "" - }, - { - "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", - "Created": 1371157430, - "CreatedBy": "", - "Tags": [ - "scratch12:latest", - "scratch:latest" - ], - "Size": 0, - "Comment": "Imported from -" - } - ] - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Push an image on the registry - -`POST /images/(name)/push` - -Push the image `name` on the registry - -**Example request**: - - POST /images/test/push HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "Pushing..."} - {"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}} - {"error": "Invalid..."} - ... - -If you wish to push an image on to a private registry, that image must already have a tag -into a repository which references that registry `hostname` and `port`. This repository name should -then be used in the URL. This duplicates the command line's flow. - -**Example request**: - - POST /images/registry.acme.com:5000/test/push HTTP/1.1 - - -**Query parameters**: - -- **tag** – The tag to associate with the image on the registry. This is optional. - -**Request Headers**: - -- **X-Registry-Auth** – base64-encoded AuthConfig object. - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Tag an image into a repository - -`POST /images/(name)/tag` - -Tag the image `name` into a repository - -**Example request**: - - POST /images/test/tag?repo=myrepo&force=0&tag=v42 HTTP/1.1 - -**Example response**: - - HTTP/1.1 201 Created - -**Query parameters**: - -- **repo** – The repository to tag in -- **force** – 1/True/true or 0/False/false, default false -- **tag** - The new tag name - -**Status codes**: - -- **201** – no error -- **400** – bad parameter -- **404** – no such image -- **409** – conflict -- **500** – server error - -### Remove an image - -`DELETE /images/(name)` - -Remove the image `name` from the filesystem - -**Example request**: - - DELETE /images/test HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-type: application/json - - [ - {"Untagged": "3e2f21a89f"}, - {"Deleted": "3e2f21a89f"}, - {"Deleted": "53b4f83ac9"} - ] - -**Query parameters**: - -- **force** – 1/True/true or 0/False/false, default false -- **noprune** – 1/True/true or 0/False/false, default false - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **409** – conflict -- **500** – server error - -### Search images - -`GET /images/search` - -Search for an image on [Docker Hub](https://hub.docker.com). - -> **Note**: -> The response keys have changed from API v1.6 to reflect the JSON -> sent by the registry server to the docker daemon's request. - -**Example request**: - - GET /images/search?term=sshd HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "wma55/u1210sshd", - "star_count": 0 - }, - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "jdswinbank/sshd", - "star_count": 0 - }, - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "vgauthier/sshd", - "star_count": 0 - } - ... - ] - -**Query parameters**: - -- **term** – term to search - -**Status codes**: - -- **200** – no error -- **500** – server error - -## 2.3 Misc - -### Check auth configuration - -`POST /auth` - -Get the default username and email - -**Example request**: - - POST /auth HTTP/1.1 - Content-Type: application/json - - { - "username": "hannibal", - "password": "xxxx", - "email": "hannibal@a-team.com", - "serveraddress": "https://index.docker.io/v1/" - } - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** – no error -- **204** – no error -- **500** – server error - -### Display system-wide information - -`GET /info` - -Display system-wide information - -**Example request**: - - GET /info HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Containers": 11, - "CpuCfsPeriod": true, - "CpuCfsQuota": true, - "Debug": false, - "DockerRootDir": "/var/lib/docker", - "Driver": "btrfs", - "DriverStatus": [[""]], - "ExecutionDriver": "native-0.1", - "ExperimentalBuild": false, - "HttpProxy": "http://test:test@localhost:8080", - "HttpsProxy": "https://test:test@localhost:8080", - "ID": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS", - "IPv4Forwarding": true, - "Images": 16, - "IndexServerAddress": "https://index.docker.io/v1/", - "InitPath": "/usr/bin/docker", - "InitSha1": "", - "KernelVersion": "3.12.0-1-amd64", - "Labels": [ - "storage=ssd" - ], - "MemTotal": 2099236864, - "MemoryLimit": true, - "NCPU": 1, - "NEventsListener": 0, - "NFd": 11, - "NGoroutines": 21, - "Name": "prod-server-42", - "NoProxy": "9.81.1.160", - "OomKillDisable": true, - "OperatingSystem": "Boot2Docker", - "RegistryConfig": { - "IndexConfigs": { - "docker.io": { - "Mirrors": null, - "Name": "docker.io", - "Official": true, - "Secure": true - } - }, - "InsecureRegistryCIDRs": [ - "127.0.0.0/8" - ] - }, - "SwapLimit": false, - "SystemTime": "2015-03-10T11:11:23.730591467-07:00" - } - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Show the docker version information - -`GET /version` - -Show the docker version information - -**Example request**: - - GET /version HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Version": "1.5.0", - "Os": "linux", - "KernelVersion": "3.18.5-tinycore64", - "GoVersion": "go1.4.1", - "GitCommit": "a8a31ef", - "Arch": "amd64", - "ApiVersion": "1.20", - "Experimental": false - } - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Ping the docker server - -`GET /_ping` - -Ping the docker server - -**Example request**: - - GET /_ping HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: text/plain - - OK - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Create a new image from a container's changes - -`POST /commit` - -Create a new image from a container's changes - -**Example request**: - - POST /commit?container=44c004db4b17&comment=message&repo=myrepo HTTP/1.1 - Content-Type: application/json - - { - "Hostname": "", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": true, - "AttachStderr": true, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": null, - "Cmd": [ - "date" - ], - "Mounts": [ - { - "Source": "/data", - "Destination": "/data", - "Mode": "ro,Z", - "RW": false - } - ], - "Labels": { - "key1": "value1", - "key2": "value2" - }, - "WorkingDir": "", - "NetworkDisabled": false, - "ExposedPorts": { - "22/tcp": {} - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - {"Id": "596069db4bf5"} - -**JSON parameters**: - -- **config** - the container's configuration - -**Query parameters**: - -- **container** – source container -- **repo** – repository -- **tag** – tag -- **comment** – commit message -- **author** – author (e.g., "John Hannibal Smith - <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>") -- **pause** – 1/True/true or 0/False/false, whether to pause the container before committing -- **changes** – Dockerfile instructions to apply while committing - -**Status codes**: - -- **201** – no error -- **404** – no such container -- **500** – server error - -### Monitor Docker's events - -`GET /events` - -Get container events from docker, in real time via streaming. - -Docker containers report the following events: - - attach, commit, copy, create, destroy, die, exec_create, exec_start, export, kill, oom, pause, rename, resize, restart, start, stop, top, unpause - -Docker images report the following events: - - delete, import, pull, push, tag, untag - -**Example request**: - - GET /events?since=1374067924 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "create", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924} - {"status": "start", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924} - {"status": "stop", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067966} - {"status": "destroy", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067970} - -**Query parameters**: - -- **since** – Timestamp. Show all events created since timestamp and then stream -- **until** – Timestamp. Show events created until given timestamp and stop streaming -- **filters** – A json encoded value of the filters (a map[string][]string) to process on the event list. Available filters: - - `container=`; -- container to filter - - `event=`; -- event to filter - - `image=`; -- image to filter - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Get a tarball containing all images in a repository - -`GET /images/(name)/get` - -Get a tarball containing all images and metadata for the repository specified -by `name`. - -If `name` is a specific name and tag (e.g. ubuntu:latest), then only that image -(and its parents) are returned. If `name` is an image ID, similarly only that -image (and its parents) are returned, but with the exclusion of the -'repositories' file in the tarball, as there were no image names referenced. - -See the [image tarball format](docker_remote_api_v1.20.md#image-tarball-format) for more details. - -**Example request** - - GET /images/ubuntu/get - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - Binary data stream - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Get a tarball containing all images - -`GET /images/get` - -Get a tarball containing all images and metadata for one or more repositories. - -For each value of the `names` parameter: if it is a specific name and tag (e.g. -`ubuntu:latest`), then only that image (and its parents) are returned; if it is -an image ID, similarly only that image (and its parents) are returned and there -would be no names referenced in the 'repositories' file for this image ID. - -See the [image tarball format](docker_remote_api_v1.20.md#image-tarball-format) for more details. - -**Example request** - - GET /images/get?names=myname%2Fmyapp%3Alatest&names=busybox - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - Binary data stream - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Load a tarball with a set of images and tags into docker - -`POST /images/load` - -Load a set of images and tags into a Docker repository. -See the [image tarball format](docker_remote_api_v1.20.md#image-tarball-format) for more details. - -**Example request** - - POST /images/load - Content-Type: application/x-tar - - Tarball in body - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Image tarball format - -An image tarball contains one directory per image layer (named using its long ID), -each containing these files: - -- `VERSION`: currently `1.0` - the file format version -- `json`: detailed layer information, similar to `docker inspect layer_id` -- `layer.tar`: A tarfile containing the filesystem changes in this layer - -The `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories -for storing attribute changes and deletions. - -If the tarball defines a repository, the tarball should also include a `repositories` file at -the root that contains a list of repository and tag names mapped to layer IDs. - -``` -{"hello-world": - {"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"} -} -``` - -### Exec Create - -`POST /containers/(id or name)/exec` - -Sets up an exec instance in a running container `id` - -**Example request**: - - POST /containers/e90e34656806/exec HTTP/1.1 - Content-Type: application/json - - { - "AttachStdin": true, - "AttachStdout": true, - "AttachStderr": true, - "Cmd": ["sh"], - "Tty": true, - "User": "123:456" - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Id": "f90e34656806", - "Warnings":[] - } - -**JSON parameters**: - -- **AttachStdin** - Boolean value, attaches to `stdin` of the `exec` command. -- **AttachStdout** - Boolean value, attaches to `stdout` of the `exec` command. -- **AttachStderr** - Boolean value, attaches to `stderr` of the `exec` command. -- **Tty** - Boolean value to allocate a pseudo-TTY. -- **Cmd** - Command to run specified as a string or an array of strings. -- **User** - A string value specifying the user, and optionally, group to run - the exec process inside the container. Format is one of: `"user"`, - `"user:group"`, `"uid"`, or `"uid:gid"`. - -**Status codes**: - -- **201** – no error -- **404** – no such container - -### Exec Start - -`POST /exec/(id)/start` - -Starts a previously set up `exec` instance `id`. If `detach` is true, this API -returns after starting the `exec` command. Otherwise, this API sets up an -interactive session with the `exec` command. - -**Example request**: - - POST /exec/e90e34656806/start HTTP/1.1 - Content-Type: application/json - - { - "Detach": false, - "Tty": false - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/vnd.docker.raw-stream - - {% raw %} - {{ STREAM }} - {% endraw %} - -**JSON parameters**: - -- **Detach** - Detach from the `exec` command. -- **Tty** - Boolean value to allocate a pseudo-TTY. - -**Status codes**: - -- **200** – no error -- **404** – no such exec instance - -**Stream details**: - -Similar to the stream behavior of `POST /containers/(id or name)/attach` API - -### Exec Resize - -`POST /exec/(id)/resize` - -Resizes the `tty` session used by the `exec` command `id`. The unit is number of characters. -This API is valid only if `tty` was specified as part of creating and starting the `exec` command. - -**Example request**: - - POST /exec/e90e34656806/resize?h=40&w=80 HTTP/1.1 - Content-Type: text/plain - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: text/plain - -**Query parameters**: - -- **h** – height of `tty` session -- **w** – width - -**Status codes**: - -- **201** – no error -- **404** – no such exec instance - -### Exec Inspect - -`GET /exec/(id)/json` - -Return low-level information about the `exec` command `id`. - -**Example request**: - - GET /exec/11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: plain/text - - { - "ID" : "11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39", - "Running" : false, - "ExitCode" : 2, - "ProcessConfig" : { - "privileged" : false, - "user" : "", - "tty" : false, - "entrypoint" : "sh", - "arguments" : [ - "-c", - "exit 2" - ] - }, - "OpenStdin" : false, - "OpenStderr" : false, - "OpenStdout" : false, - "Container" : { - "State" : { - "Running" : true, - "Paused" : false, - "Restarting" : false, - "OOMKilled" : false, - "Pid" : 3650, - "ExitCode" : 0, - "Error" : "", - "StartedAt" : "2014-11-17T22:26:03.717657531Z", - "FinishedAt" : "0001-01-01T00:00:00Z" - }, - "ID" : "8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c", - "Created" : "2014-11-17T22:26:03.626304998Z", - "Path" : "date", - "Args" : [], - "Config" : { - "Hostname" : "8f177a186b97", - "Domainname" : "", - "User" : "", - "AttachStdin" : false, - "AttachStdout" : false, - "AttachStderr" : false, - "ExposedPorts" : null, - "Tty" : false, - "OpenStdin" : false, - "StdinOnce" : false, - "Env" : [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], - "Cmd" : [ - "date" - ], - "Image" : "ubuntu", - "Volumes" : null, - "WorkingDir" : "", - "Entrypoint" : null, - "NetworkDisabled" : false, - "MacAddress" : "", - "OnBuild" : null, - "SecurityOpt" : null - }, - "Image" : "5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5", - "NetworkSettings" : { - "IPAddress" : "172.17.0.2", - "IPPrefixLen" : 16, - "MacAddress" : "02:42:ac:11:00:02", - "Gateway" : "172.17.42.1", - "Bridge" : "docker0", - "PortMapping" : null, - "Ports" : {} - }, - "ResolvConfPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/resolv.conf", - "HostnamePath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hostname", - "HostsPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hosts", - "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", - "Name" : "/test", - "Driver" : "aufs", - "ExecDriver" : "native-0.2", - "MountLabel" : "", - "ProcessLabel" : "", - "AppArmorProfile" : "", - "RestartCount" : 0, - "Mounts" : [] - } - } - -**Status codes**: - -- **200** – no error -- **404** – no such exec instance -- **500** - server error - -# 3. Going further - -## 3.1 Inside `docker run` - -As an example, the `docker run` command line makes the following API calls: - -- Create the container - -- If the status code is 404, it means the image doesn't exist: - - Try to pull it. - - Then, retry to create the container. - -- Start the container. - -- If you are not in detached mode: -- Attach to the container, using `logs=1` (to have `stdout` and - `stderr` from the container's start) and `stream=1` - -- If in detached mode or only `stdin` is attached, display the container's id. - -## 3.2 Hijacking - -In this version of the API, `/attach`, uses hijacking to transport `stdin`, -`stdout`, and `stderr` on the same socket. - -To hint potential proxies about connection hijacking, Docker client sends -connection upgrade headers similarly to websocket. - - Upgrade: tcp - Connection: Upgrade - -When Docker daemon detects the `Upgrade` header, it switches its status code -from **200 OK** to **101 UPGRADED** and resends the same headers. - - -## 3.3 CORS Requests - -To set cross origin requests to the remote api please give values to -`--api-cors-header` when running Docker in daemon mode. Set * (asterisk) allows all, -default or blank means CORS disabled - - $ dockerd -H="192.168.1.9:2375" --api-cors-header="http://foo.bar" diff --git a/engine/reference/api/docker_remote_api_v1.21.md b/engine/reference/api/docker_remote_api_v1.21.md deleted file mode 100644 index 96efd0d520..0000000000 --- a/engine/reference/api/docker_remote_api_v1.21.md +++ /dev/null @@ -1,2951 +0,0 @@ ---- -redirect_from: - - /reference/api/docker_remote_api_v1.21/ -description: API Documentation for Docker -keywords: -- API, Docker, rcli, REST, documentation -title: Docker Remote API v1.21 ---- - -## 1. Brief introduction - - - The Remote API has replaced `rcli`. - - The daemon listens on `unix:///var/run/docker.sock` but you can - [Bind Docker to another host/port or a Unix socket](../commandline/dockerd.md#bind-docker-to-another-host-port-or-a-unix-socket). - - The API tends to be REST. However, for some complex commands, like `attach` - or `pull`, the HTTP connection is hijacked to transport `stdout`, - `stdin` and `stderr`. - - When the client API version is newer than the daemon's, these calls return an HTTP - `400 Bad Request` error message. - -# 2. Endpoints - -## 2.1 Containers - -### List containers - -`GET /containers/json` - -List containers - -**Example request**: - - GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Id": "8dfafdbc3a40", - "Names":["/boring_feynman"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 1", - "Created": 1367854155, - "Status": "Exit 0", - "Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}], - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "SizeRw": 12288, - "SizeRootFs": 0 - }, - { - "Id": "9cd87474be90", - "Names":["/coolName"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 222222", - "Created": 1367854155, - "Status": "Exit 0", - "Ports": [], - "Labels": {}, - "SizeRw": 12288, - "SizeRootFs": 0 - }, - { - "Id": "3176a2479c92", - "Names":["/sleepy_dog"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 3333333333333333", - "Created": 1367854154, - "Status": "Exit 0", - "Ports":[], - "Labels": {}, - "SizeRw":12288, - "SizeRootFs":0 - }, - { - "Id": "4cb07b47f9fb", - "Names":["/running_cat"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 444444444444444444444444444444444", - "Created": 1367854152, - "Status": "Exit 0", - "Ports": [], - "Labels": {}, - "SizeRw": 12288, - "SizeRootFs": 0 - } - ] - -**Query parameters**: - -- **all** – 1/True/true or 0/False/false, Show all containers. - Only running containers are shown by default (i.e., this defaults to false) -- **limit** – Show `limit` last created - containers, include non-running ones. -- **since** – Show only containers created since Id, include - non-running ones. -- **before** – Show only containers created before Id, include - non-running ones. -- **size** – 1/True/true or 0/False/false, Show the containers - sizes -- **filters** - a JSON encoded value of the filters (a `map[string][]string`) to process on the containers list. Available filters: - - `exited=`; -- containers with exit code of `` ; - - `status=`(`created`|`restarting`|`running`|`paused`|`exited`) - - `label=key` or `label="key=value"` of a container label - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **500** – server error - -### Create a container - -`POST /containers/create` - -Create a container - -**Example request**: - - POST /containers/create HTTP/1.1 - Content-Type: application/json - - { - "Hostname": "", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": true, - "AttachStderr": true, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": [ - "FOO=bar", - "BAZ=quux" - ], - "Cmd": [ - "date" - ], - "Entrypoint": null, - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "Volumes": { - "/volumes/data": {} - }, - "WorkingDir": "", - "NetworkDisabled": false, - "MacAddress": "12:34:56:78:9a:bc", - "ExposedPorts": { - "22/tcp": {} - }, - "StopSignal": "SIGTERM", - "HostConfig": { - "Binds": ["/tmp:/tmp"], - "Links": ["redis3:redis"], - "LxcConf": {"lxc.utsname":"docker"}, - "Memory": 0, - "MemorySwap": 0, - "MemoryReservation": 0, - "KernelMemory": 0, - "CpuShares": 512, - "CpuPeriod": 100000, - "CpuQuota": 50000, - "CpusetCpus": "0,1", - "CpusetMems": "0,1", - "BlkioWeight": 300, - "MemorySwappiness": 60, - "OomKillDisable": false, - "PidMode": "", - "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] }, - "PublishAllPorts": false, - "Privileged": false, - "ReadonlyRootfs": false, - "Dns": ["8.8.8.8"], - "DnsOptions": [""], - "DnsSearch": [""], - "ExtraHosts": null, - "VolumesFrom": ["parent", "other:ro"], - "CapAdd": ["NET_ADMIN"], - "CapDrop": ["MKNOD"], - "GroupAdd": ["newgroup"], - "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 }, - "NetworkMode": "bridge", - "Devices": [], - "Ulimits": [{}], - "LogConfig": { "Type": "json-file", "Config": {} }, - "SecurityOpt": [], - "CgroupParent": "", - "VolumeDriver": "" - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Id":"e90e34656806", - "Warnings":[] - } - -**JSON parameters**: - -- **Hostname** - A string value containing the hostname to use for the - container. -- **Domainname** - A string value containing the domain name to use - for the container. -- **User** - A string value specifying the user inside the container. -- **AttachStdin** - Boolean value, attaches to `stdin`. -- **AttachStdout** - Boolean value, attaches to `stdout`. -- **AttachStderr** - Boolean value, attaches to `stderr`. -- **Tty** - Boolean value, Attach standard streams to a `tty`, including `stdin` if it is not closed. -- **OpenStdin** - Boolean value, opens `stdin`, -- **StdinOnce** - Boolean value, close `stdin` after the 1 attached client disconnects. -- **Env** - A list of environment variables in the form of `["VAR=value"[,"VAR2=value2"]]` -- **Labels** - Adds a map of labels to a container. To specify a map: `{"key":"value"[,"key2":"value2"]}` -- **Cmd** - Command to run specified as a string or an array of strings. -- **Entrypoint** - Set the entry point for the container as a string or an array - of strings. -- **Image** - A string specifying the image name to use for the container. -- **Volumes** - An object mapping mount point paths (strings) inside the - container to empty objects. -- **WorkingDir** - A string specifying the working directory for commands to - run in. -- **NetworkDisabled** - Boolean value, when true disables networking for the - container -- **ExposedPorts** - An object mapping ports to an empty object in the form of: - `"ExposedPorts": { "/: {}" }` -- **StopSignal** - Signal to stop a container as a string or unsigned integer. `SIGTERM` by default. -- **HostConfig** - - **Binds** – A list of volume bindings for this container. Each volume binding is a string in one of these forms: - + `host-src:container-dest` to bind-mount a host path into the - container. Both `host-src`, and `container-dest` must be an - _absolute_ path. - + `host-src:container-dest:ro` to make the bind-mount read-only - inside the container. Both `host-src`, and `container-dest` must be - an _absolute_ path. - + `volume-name:container-dest` to bind-mount a volume managed by a - volume driver into the container. `container-dest` must be an - _absolute_ path. - + `volume-name:container-dest:ro` to mount the volume read-only - inside the container. `container-dest` must be an _absolute_ path. - - **Links** - A list of links for the container. Each link entry should be - in the form of `container_name:alias`. - - **LxcConf** - LXC specific configurations. These configurations only - work when using the `lxc` execution driver. - - **Memory** - Memory limit in bytes. - - **MemorySwap** - Total memory limit (memory + swap); set `-1` to enable unlimited swap. - You must use this with `memory` and make the swap value larger than `memory`. - - **MemoryReservation** - Memory soft limit in bytes. - - **KernelMemory** - Kernel memory limit in bytes. - - **CpuShares** - An integer value containing the container's CPU Shares - (ie. the relative weight vs other containers). - - **CpuPeriod** - The length of a CPU period in microseconds. - - **CpuQuota** - Microseconds of CPU time that the container can get in a CPU period. - - **CpusetCpus** - String value containing the `cgroups CpusetCpus` to use. - - **CpusetMems** - Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. - - **BlkioWeight** - Block IO weight (relative weight) accepts a weight value between 10 and 1000. - - **MemorySwappiness** - Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. - - **OomKillDisable** - Boolean value, whether to disable OOM Killer for the container or not. - - **PidMode** - Set the PID (Process) Namespace mode for the container; - `"container:"`: joins another container's PID namespace - `"host"`: use the host's PID namespace inside the container - - **PortBindings** - A map of exposed container ports and the host port they - should map to. A JSON object in the form - `{ /: [{ "HostPort": "" }] }` - Take note that `port` is specified as a string and not an integer value. - - **PublishAllPorts** - Allocates a random host port for all of a container's - exposed ports. Specified as a boolean value. - - **Privileged** - Gives the container full access to the host. Specified as - a boolean value. - - **ReadonlyRootfs** - Mount the container's root filesystem as read only. - Specified as a boolean value. - - **Dns** - A list of DNS servers for the container to use. - - **DnsOptions** - A list of DNS options - - **DnsSearch** - A list of DNS search domains - - **ExtraHosts** - A list of hostnames/IP mappings to add to the - container's `/etc/hosts` file. Specified in the form `["hostname:IP"]`. - - **VolumesFrom** - A list of volumes to inherit from another container. - Specified in the form `[:]` - - **CapAdd** - A list of kernel capabilities to add to the container. - - **Capdrop** - A list of kernel capabilities to drop from the container. - - **GroupAdd** - A list of additional groups that the container process will run as - - **RestartPolicy** – The behavior to apply when the container exits. The - value is an object with a `Name` property of either `"always"` to - always restart, `"unless-stopped"` to restart always except when - user has manually stopped the container or `"on-failure"` to restart only when the container - exit code is non-zero. If `on-failure` is used, `MaximumRetryCount` - controls the number of times to retry before giving up. - The default is not to restart. (optional) - An ever increasing delay (double the previous delay, starting at 100mS) - is added before each restart to prevent flooding the server. - - **NetworkMode** - Sets the networking mode for the container. Supported - standard values are: `bridge`, `host`, `none`, and `container:`. Any other value is taken - as a custom network's name to which this container should connect to. - - **Devices** - A list of devices to add to the container specified as a JSON object in the - form - `{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}` - - **Ulimits** - A list of ulimits to set in the container, specified as - `{ "Name": , "Soft": , "Hard": }`, for example: - `Ulimits: { "Name": "nofile", "Soft": 1024, "Hard": 2048 }` - - **SecurityOpt**: A list of string values to customize labels for MLS - systems, such as SELinux. - - **LogConfig** - Log configuration for the container, specified as a JSON object in the form - `{ "Type": "", "Config": {"key1": "val1"}}`. - Available types: `json-file`, `syslog`, `journald`, `gelf`, `awslogs`, `none`. - `json-file` logging driver. - - **CgroupParent** - Path to `cgroups` under which the container's `cgroup` is created. If the path is not absolute, the path is considered to be relative to the `cgroups` path of the init process. Cgroups are created if they do not already exist. - - **VolumeDriver** - Driver that this container users to mount volumes. - -**Query parameters**: - -- **name** – Assign the specified name to the container. Must - match `/?[a-zA-Z0-9_-]+`. - -**Status codes**: - -- **201** – no error -- **400** – bad parameter -- **404** – no such container -- **406** – impossible to attach (container not running) -- **409** – conflict -- **500** – server error - -### Inspect a container - -`GET /containers/(id or name)/json` - -Return low-level information on the container `id` - -**Example request**: - - GET /containers/4fa6e0f0c678/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "AppArmorProfile": "", - "Args": [ - "-c", - "exit 9" - ], - "Config": { - "AttachStderr": true, - "AttachStdin": false, - "AttachStdout": true, - "Cmd": [ - "/bin/sh", - "-c", - "exit 9" - ], - "Domainname": "", - "Entrypoint": null, - "Env": [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "ExposedPorts": null, - "Hostname": "ba033ac44011", - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "MacAddress": "", - "NetworkDisabled": false, - "OnBuild": null, - "OpenStdin": false, - "StdinOnce": false, - "Tty": false, - "User": "", - "Volumes": null, - "WorkingDir": "", - "StopSignal": "SIGTERM" - }, - "Created": "2015-01-06T15:47:31.485331387Z", - "Driver": "devicemapper", - "ExecDriver": "native-0.2", - "ExecIDs": null, - "HostConfig": { - "Binds": null, - "BlkioWeight": 0, - "CapAdd": null, - "CapDrop": null, - "ContainerIDFile": "", - "CpusetCpus": "", - "CpusetMems": "", - "CpuShares": 0, - "CpuPeriod": 100000, - "Devices": [], - "Dns": null, - "DnsOptions": null, - "DnsSearch": null, - "ExtraHosts": null, - "IpcMode": "", - "Links": null, - "LxcConf": [], - "Memory": 0, - "MemorySwap": 0, - "MemoryReservation": 0, - "KernelMemory": 0, - "OomKillDisable": false, - "NetworkMode": "bridge", - "PidMode": "", - "PortBindings": {}, - "Privileged": false, - "ReadonlyRootfs": false, - "PublishAllPorts": false, - "RestartPolicy": { - "MaximumRetryCount": 2, - "Name": "on-failure" - }, - "LogConfig": { - "Config": null, - "Type": "json-file" - }, - "SecurityOpt": null, - "VolumesFrom": null, - "Ulimits": [{}], - "VolumeDriver": "" - }, - "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", - "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", - "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", - "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", - "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", - "MountLabel": "", - "Name": "/boring_euclid", - "NetworkSettings": { - "Bridge": "", - "SandboxID": "", - "HairpinMode": false, - "LinkLocalIPv6Address": "", - "LinkLocalIPv6PrefixLen": 0, - "Ports": null, - "SandboxKey": "", - "SecondaryIPAddresses": null, - "SecondaryIPv6Addresses": null, - "EndpointID": "", - "Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "IPAddress": "", - "IPPrefixLen": 0, - "IPv6Gateway": "", - "MacAddress": "", - "Networks": { - "bridge": { - "EndpointID": "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.2", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:12:00:02" - } - } - }, - "Path": "/bin/sh", - "ProcessLabel": "", - "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", - "RestartCount": 1, - "State": { - "Error": "", - "ExitCode": 9, - "FinishedAt": "2015-01-06T15:47:32.080254511Z", - "OOMKilled": false, - "Paused": false, - "Pid": 0, - "Restarting": false, - "Running": true, - "StartedAt": "2015-01-06T15:47:32.072697474Z", - "Status": "running" - }, - "Mounts": [ - { - "Source": "/data", - "Destination": "/data", - "Mode": "ro,Z", - "RW": false - } - ] - } - -**Example request, with size information**: - - GET /containers/4fa6e0f0c678/json?size=1 HTTP/1.1 - -**Example response, with size information**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - .... - "SizeRw": 0, - "SizeRootFs": 972, - .... - } - -**Query parameters**: - -- **size** – 1/True/true or 0/False/false, return container size information. Default is `false`. - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### List processes running inside a container - -`GET /containers/(id or name)/top` - -List processes running inside the container `id`. On Unix systems this -is done by running the `ps` command. This endpoint is not -supported on Windows. - -**Example request**: - - GET /containers/4fa6e0f0c678/top HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Titles" : [ - "UID", "PID", "PPID", "C", "STIME", "TTY", "TIME", "CMD" - ], - "Processes" : [ - [ - "root", "13642", "882", "0", "17:03", "pts/0", "00:00:00", "/bin/bash" - ], - [ - "root", "13735", "13642", "0", "17:06", "pts/0", "00:00:00", "sleep 10" - ] - ] - } - -**Example request**: - - GET /containers/4fa6e0f0c678/top?ps_args=aux HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Titles" : [ - "USER","PID","%CPU","%MEM","VSZ","RSS","TTY","STAT","START","TIME","COMMAND" - ] - "Processes" : [ - [ - "root","13642","0.0","0.1","18172","3184","pts/0","Ss","17:03","0:00","/bin/bash" - ], - [ - "root","13895","0.0","0.0","4348","692","pts/0","S+","17:15","0:00","sleep 10" - ] - ], - } - -**Query parameters**: - -- **ps_args** – `ps` arguments to use (e.g., `aux`), defaults to `-ef` - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Get container logs - -`GET /containers/(id or name)/logs` - -Get `stdout` and `stderr` logs from the container ``id`` - -> **Note**: -> This endpoint works only for containers with the `json-file` or `journald` logging drivers. - -**Example request**: - - GET /containers/4fa6e0f0c678/logs?stderr=1&stdout=1×tamps=1&follow=1&tail=10&since=1428990821 HTTP/1.1 - -**Example response**: - - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **follow** – 1/True/true or 0/False/false, return stream. Default `false`. -- **stdout** – 1/True/true or 0/False/false, show `stdout` log. Default `false`. -- **stderr** – 1/True/true or 0/False/false, show `stderr` log. Default `false`. -- **since** – UNIX timestamp (integer) to filter logs. Specifying a timestamp - will only output log-entries since that timestamp. Default: 0 (unfiltered) -- **timestamps** – 1/True/true or 0/False/false, print timestamps for - every log line. Default `false`. -- **tail** – Output specified number of lines at the end of logs: `all` or ``. Default all. - -**Status codes**: - -- **101** – no error, hints proxy about hijacking -- **200** – no error, no upgrade header found -- **404** – no such container -- **500** – server error - -### Inspect changes on a container's filesystem - -`GET /containers/(id or name)/changes` - -Inspect changes on container `id`'s filesystem - -**Example request**: - - GET /containers/4fa6e0f0c678/changes HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Path": "/dev", - "Kind": 0 - }, - { - "Path": "/dev/kmsg", - "Kind": 1 - }, - { - "Path": "/test", - "Kind": 1 - } - ] - -Values for `Kind`: - -- `0`: Modify -- `1`: Add -- `2`: Delete - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Export a container - -`GET /containers/(id or name)/export` - -Export the contents of container `id` - -**Example request**: - - GET /containers/4fa6e0f0c678/export HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/octet-stream - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Get container stats based on resource usage - -`GET /containers/(id or name)/stats` - -This endpoint returns a live stream of a container's resource usage statistics. - -**Example request**: - - GET /containers/redis1/stats HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "read" : "2015-01-08T22:57:31.547920715Z", - "networks": { - "eth0": { - "rx_bytes": 5338, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 36, - "tx_bytes": 648, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 8 - }, - "eth5": { - "rx_bytes": 4641, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 26, - "tx_bytes": 690, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 9 - } - }, - "memory_stats" : { - "stats" : { - "total_pgmajfault" : 0, - "cache" : 0, - "mapped_file" : 0, - "total_inactive_file" : 0, - "pgpgout" : 414, - "rss" : 6537216, - "total_mapped_file" : 0, - "writeback" : 0, - "unevictable" : 0, - "pgpgin" : 477, - "total_unevictable" : 0, - "pgmajfault" : 0, - "total_rss" : 6537216, - "total_rss_huge" : 6291456, - "total_writeback" : 0, - "total_inactive_anon" : 0, - "rss_huge" : 6291456, - "hierarchical_memory_limit" : 67108864, - "total_pgfault" : 964, - "total_active_file" : 0, - "active_anon" : 6537216, - "total_active_anon" : 6537216, - "total_pgpgout" : 414, - "total_cache" : 0, - "inactive_anon" : 0, - "active_file" : 0, - "pgfault" : 964, - "inactive_file" : 0, - "total_pgpgin" : 477 - }, - "max_usage" : 6651904, - "usage" : 6537216, - "failcnt" : 0, - "limit" : 67108864 - }, - "blkio_stats" : {}, - "cpu_stats" : { - "cpu_usage" : { - "percpu_usage" : [ - 8646879, - 24472255, - 36438778, - 30657443 - ], - "usage_in_usermode" : 50000000, - "total_usage" : 100215355, - "usage_in_kernelmode" : 30000000 - }, - "system_cpu_usage" : 739306590000000, - "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0} - }, - "precpu_stats" : { - "cpu_usage" : { - "percpu_usage" : [ - 8646879, - 24350896, - 36438778, - 30657443 - ], - "usage_in_usermode" : 50000000, - "total_usage" : 100093996, - "usage_in_kernelmode" : 30000000 - }, - "system_cpu_usage" : 9492140000000, - "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0} - } - } - -The precpu_stats is the cpu statistic of last read, which is used for calculating the cpu usage percent. It is not the exact copy of the “cpu_stats” field. - -**Query parameters**: - -- **stream** – 1/True/true or 0/False/false, pull stats once then disconnect. Default `true`. - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Resize a container TTY - -`POST /containers/(id or name)/resize` - -Resize the TTY for container with `id`. The unit is number of characters. You must restart the container for the resize to take effect. - -**Example request**: - - POST /containers/4fa6e0f0c678/resize?h=40&w=80 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Query parameters**: - -- **h** – height of `tty` session -- **w** – width - -**Status codes**: - -- **200** – no error -- **404** – No such container -- **500** – Cannot resize container - -### Start a container - -`POST /containers/(id or name)/start` - -Start the container `id` - -> **Note**: -> For backwards compatibility, this endpoint accepts a `HostConfig` as JSON-encoded request body. -> See [create a container](docker_remote_api_v1.21.md#create-a-container) for details. - -**Example request**: - - POST /containers/e90e34656806/start HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **304** – container already started -- **404** – no such container -- **500** – server error - -### Stop a container - -`POST /containers/(id or name)/stop` - -Stop the container `id` - -**Example request**: - - POST /containers/e90e34656806/stop?t=5 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **t** – number of seconds to wait before killing the container - -**Status codes**: - -- **204** – no error -- **304** – container already stopped -- **404** – no such container -- **500** – server error - -### Restart a container - -`POST /containers/(id or name)/restart` - -Restart the container `id` - -**Example request**: - - POST /containers/e90e34656806/restart?t=5 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **t** – number of seconds to wait before killing the container - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Kill a container - -`POST /containers/(id or name)/kill` - -Kill the container `id` - -**Example request**: - - POST /containers/e90e34656806/kill HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **signal** - Signal to send to the container: integer or string like `SIGINT`. - When not set, `SIGKILL` is assumed and the call waits for the container to exit. - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Rename a container - -`POST /containers/(id or name)/rename` - -Rename the container `id` to a `new_name` - -**Example request**: - - POST /containers/e90e34656806/rename?name=new_name HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **name** – new name for the container - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **409** - conflict name already assigned -- **500** – server error - -### Pause a container - -`POST /containers/(id or name)/pause` - -Pause the container `id` - -**Example request**: - - POST /containers/e90e34656806/pause HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Unpause a container - -`POST /containers/(id or name)/unpause` - -Unpause the container `id` - -**Example request**: - - POST /containers/e90e34656806/unpause HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Attach to a container - -`POST /containers/(id or name)/attach` - -Attach to the container `id` - -**Example request**: - - POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. -- **stream** – 1/True/true or 0/False/false, return stream. - Default `false`. -- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach - to `stdin`. Default `false`. -- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return - `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. -- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return - `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. - -**Status codes**: - -- **101** – no error, hints proxy about hijacking -- **200** – no error, no upgrade header found -- **400** – bad parameter -- **404** – no such container -- **500** – server error - -**Stream details**: - -When using the TTY setting is enabled in -[`POST /containers/create` -](docker_remote_api_v1.21.md#create-a-container), -the stream is the raw data from the process PTY and client's `stdin`. -When the TTY is disabled, then the stream is multiplexed to separate -`stdout` and `stderr`. - -The format is a **Header** and a **Payload** (frame). - -**HEADER** - -The header contains the information which the stream writes (`stdout` or -`stderr`). It also contains the size of the associated frame encoded in the -last four bytes (`uint32`). - -It is encoded on the first eight bytes like this: - - header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} - -`STREAM_TYPE` can be: - -- 0: `stdin` (is written on `stdout`) -- 1: `stdout` -- 2: `stderr` - -`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of -the `uint32` size encoded as big endian. - -**PAYLOAD** - -The payload is the raw stream. - -**IMPLEMENTATION** - -The simplest way to implement the Attach protocol is the following: - - 1. Read eight bytes. - 2. Choose `stdout` or `stderr` depending on the first byte. - 3. Extract the frame size from the last four bytes. - 4. Read the extracted size and output it on the correct output. - 5. Goto 1. - -### Attach to a container (websocket) - -`GET /containers/(id or name)/attach/ws` - -Attach to the container `id` via websocket - -Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455) - -**Example request** - - GET /containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1 - -**Example response** - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. -- **stream** – 1/True/true or 0/False/false, return stream. - Default `false`. -- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach - to `stdin`. Default `false`. -- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return - `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. -- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return - `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **404** – no such container -- **500** – server error - -### Wait a container - -`POST /containers/(id or name)/wait` - -Block until container `id` stops, then returns the exit code - -**Example request**: - - POST /containers/16253994b7c4/wait HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"StatusCode": 0} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Remove a container - -`DELETE /containers/(id or name)` - -Remove the container `id` from the filesystem - -**Example request**: - - DELETE /containers/16253994b7c4?v=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **v** – 1/True/true or 0/False/false, Remove the volumes - associated to the container. Default `false`. -- **force** - 1/True/true or 0/False/false, Kill then remove the container. - Default `false`. - -**Status codes**: - -- **204** – no error -- **400** – bad parameter -- **404** – no such container -- **409** – conflict -- **500** – server error - -### Copy files or folders from a container - -`POST /containers/(id or name)/copy` - -Copy files or folders of container `id` - -**Deprecated** in favor of the `archive` endpoint below. - -**Example request**: - - POST /containers/4fa6e0f0c678/copy HTTP/1.1 - Content-Type: application/json - - { - "Resource": "test.txt" - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Retrieving information about files and folders in a container - -`HEAD /containers/(id or name)/archive` - -See the description of the `X-Docker-Container-Path-Stat` header in the -following section. - -### Get an archive of a filesystem resource in a container - -`GET /containers/(id or name)/archive` - -Get a tar archive of a resource in the filesystem of container `id`. - -**Query parameters**: - -- **path** - resource in the container's filesystem to archive. Required. - - If not an absolute path, it is relative to the container's root directory. - The resource specified by **path** must exist. To assert that the resource - is expected to be a directory, **path** should end in `/` or `/.` - (assuming a path separator of `/`). If **path** ends in `/.` then this - indicates that only the contents of the **path** directory should be - copied. A symlink is always resolved to its target. - - > **Note**: It is not possible to copy certain system files such as resources - > under `/proc`, `/sys`, `/dev`, and mounts created by the user in the - > container. - -**Example request**: - - GET /containers/8cce319429b2/archive?path=/root HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - X-Docker-Container-Path-Stat: eyJuYW1lIjoicm9vdCIsInNpemUiOjQwOTYsIm1vZGUiOjIxNDc0ODQwOTYsIm10aW1lIjoiMjAxNC0wMi0yN1QyMDo1MToyM1oiLCJsaW5rVGFyZ2V0IjoiIn0= - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -On success, a response header `X-Docker-Container-Path-Stat` will be set to a -base64-encoded JSON object containing some filesystem header information about -the archived resource. The above example value would decode to the following -JSON object (whitespace added for readability): - -```json -{ - "name": "root", - "size": 4096, - "mode": 2147484096, - "mtime": "2014-02-27T20:51:23Z", - "linkTarget": "" -} -``` - -A `HEAD` request can also be made to this endpoint if only this information is -desired. - -**Status codes**: - -- **200** - success, returns archive of copied resource -- **400** - client error, bad parameter, details in JSON response body, one of: - - must specify path parameter (**path** cannot be empty) - - not a directory (**path** was asserted to be a directory but exists as a - file) -- **404** - client error, resource not found, one of: - – no such container (container `id` does not exist) - - no such file or directory (**path** does not exist) -- **500** - server error - -### Extract an archive of files or folders to a directory in a container - -`PUT /containers/(id or name)/archive` - -Upload a tar archive to be extracted to a path in the filesystem of container -`id`. - -**Query parameters**: - -- **path** - path to a directory in the container - to extract the archive's contents into. Required. - - If not an absolute path, it is relative to the container's root directory. - The **path** resource must exist. -- **noOverwriteDirNonDir** - If "1", "true", or "True" then it will be an error - if unpacking the given content would cause an existing directory to be - replaced with a non-directory and vice versa. - -**Example request**: - - PUT /containers/8cce319429b2/archive?path=/vol1 HTTP/1.1 - Content-Type: application/x-tar - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** – the content was extracted successfully -- **400** - client error, bad parameter, details in JSON response body, one of: - - must specify path parameter (**path** cannot be empty) - - not a directory (**path** should be a directory but exists as a file) - - unable to overwrite existing directory with non-directory - (if **noOverwriteDirNonDir**) - - unable to overwrite existing non-directory with directory - (if **noOverwriteDirNonDir**) -- **403** - client error, permission denied, the volume - or container rootfs is marked as read-only. -- **404** - client error, resource not found, one of: - – no such container (container `id` does not exist) - - no such file or directory (**path** resource does not exist) -- **500** – server error - -## 2.2 Images - -### List Images - -`GET /images/json` - -**Example request**: - - GET /images/json?all=0 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "RepoTags": [ - "ubuntu:12.04", - "ubuntu:precise", - "ubuntu:latest" - ], - "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c", - "Created": 1365714795, - "Size": 131506275, - "VirtualSize": 131506275, - "Labels": {} - }, - { - "RepoTags": [ - "ubuntu:12.10", - "ubuntu:quantal" - ], - "ParentId": "27cf784147099545", - "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", - "Created": 1364102658, - "Size": 24653, - "VirtualSize": 180116135, - "Labels": { - "com.example.version": "v1" - } - } - ] - -**Example request, with digest information**: - - GET /images/json?digests=1 HTTP/1.1 - -**Example response, with digest information**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Created": 1420064636, - "Id": "4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125", - "ParentId": "ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2", - "RepoDigests": [ - "localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" - ], - "RepoTags": [ - "localhost:5000/test/busybox:latest", - "playdate:latest" - ], - "Size": 0, - "VirtualSize": 2429728, - "Labels": {} - } - ] - -The response shows a single image `Id` associated with two repositories -(`RepoTags`): `localhost:5000/test/busybox`: and `playdate`. A caller can use -either of the `RepoTags` values `localhost:5000/test/busybox:latest` or -`playdate:latest` to reference the image. - -You can also use `RepoDigests` values to reference an image. In this response, -the array has only one reference and that is to the -`localhost:5000/test/busybox` repository; the `playdate` repository has no -digest. You can reference this digest using the value: -`localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d...` - -See the `docker run` and `docker build` commands for examples of digest and tag -references on the command line. - -**Query parameters**: - -- **all** – 1/True/true or 0/False/false, default false -- **filters** – a JSON encoded value of the filters (a map[string][]string) to process on the images list. Available filters: - - `dangling=true` - - `label=key` or `label="key=value"` of an image label -- **filter** - only return images with the specified name - -### Build image from a Dockerfile - -`POST /build` - -Build an image from a Dockerfile - -**Example request**: - - POST /build HTTP/1.1 - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"stream": "Step 1..."} - {"stream": "..."} - {"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}} - -The input stream must be a `tar` archive compressed with one of the -following algorithms: `identity` (no compression), `gzip`, `bzip2`, `xz`. - -The archive must include a build instructions file, typically called -`Dockerfile` at the archive's root. The `dockerfile` parameter may be -used to specify a different build instructions file. To do this, its value must be -the path to the alternate build instructions file to use. - -The archive may include any number of other files, -which are accessible in the build context (See the [*ADD build -command*](../../reference/builder.md#add)). - -The build is canceled if the client drops the connection by quitting -or being killed. - -**Query parameters**: - -- **dockerfile** - Path within the build context to the `Dockerfile`. This is - ignored if `remote` is specified and points to an external `Dockerfile`. -- **t** – A name and optional tag to apply to the image in the `name:tag` format. - If you omit the `tag` the default `latest` value is assumed. - You can provide one or more `t` parameters. -- **remote** – A Git repository URI or HTTP/HTTPS context URI. If the - URI points to a single text file, the file's contents are placed into - a file called `Dockerfile` and the image is built from that file. If - the URI points to a tarball, the file is downloaded by the daemon and - the contents therein used as the context for the build. If the URI - points to a tarball and the `dockerfile` parameter is also specified, - there must be a file with the corresponding path inside the tarball. -- **q** – Suppress verbose build output. -- **nocache** – Do not use the cache when building the image. -- **pull** - Attempt to pull the image even if an older image exists locally. -- **rm** - Remove intermediate containers after a successful build (default behavior). -- **forcerm** - Always remove intermediate containers (includes `rm`). -- **memory** - Set memory limit for build. -- **memswap** - Total memory (memory + swap), `-1` to enable unlimited swap. -- **cpushares** - CPU shares (relative weight). -- **cpusetcpus** - CPUs in which to allow execution (e.g., `0-3`, `0,1`). -- **cpuperiod** - The length of a CPU period in microseconds. -- **cpuquota** - Microseconds of CPU time that the container can get in a CPU period. -- **buildargs** – JSON map of string pairs for build-time variables. Users pass - these values at build-time. Docker uses the `buildargs` as the environment - context for command(s) run via the Dockerfile's `RUN` instruction or for - variable expansion in other Dockerfile instructions. This is not meant for - passing secret values. [Read more about the buildargs instruction](../../reference/builder.md#arg) - -**Request Headers**: - -- **Content-type** – Set to `"application/tar"`. -- **X-Registry-Config** – A base64-url-safe-encoded Registry Auth Config JSON - object with the following structure: - - { - "docker.example.com": { - "username": "janedoe", - "password": "hunter2" - }, - "https://index.docker.io/v1/": { - "username": "mobydock", - "password": "conta1n3rize14" - } - } - - This object maps the hostname of a registry to an object containing the - "username" and "password" for that registry. Multiple registries may - be specified as the build may be based on an image requiring - authentication to pull from any arbitrary registry. Only the registry - domain name (and port if not the default "443") are required. However - (for legacy reasons) the "official" Docker, Inc. hosted registry must - be specified with both a "https://" prefix and a "/v1/" suffix even - though Docker will prefer to use the v2 registry API. - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Create an image - -`POST /images/create` - -Create an image either by pulling it from the registry or by importing it - -**Example request**: - - POST /images/create?fromImage=busybox&tag=latest HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "Pulling..."} - {"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}} - {"error": "Invalid..."} - ... - -When using this endpoint to pull an image from the registry, the -`X-Registry-Auth` header can be used to include -a base64-encoded AuthConfig object. - -**Query parameters**: - -- **fromImage** – Name of the image to pull. The name may include a tag or - digest. This parameter may only be used when pulling an image. -- **fromSrc** – Source to import. The value may be a URL from which the image - can be retrieved or `-` to read the image from the request body. - This parameter may only be used when importing an image. -- **repo** – Repository name given to an image when it is imported. - The repo may include a tag. This parameter may only be used when importing - an image. -- **tag** – Tag or digest. If empty when pulling an image, this causes all tags - for the given image to be pulled. - -**Request Headers**: - -- **X-Registry-Auth** – base64-encoded AuthConfig object - -**Status codes**: - -- **200** – no error -- **500** – server error - - - -### Inspect an image - -`GET /images/(name)/json` - -Return low-level information on the image `name` - -**Example request**: - - GET /images/example/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Id" : "85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c", - "Container" : "cb91e48a60d01f1e27028b4fc6819f4f290b3cf12496c8176ec714d0d390984a", - "Comment" : "", - "Os" : "linux", - "Architecture" : "amd64", - "Parent" : "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", - "ContainerConfig" : { - "Tty" : false, - "Hostname" : "e611e15f9c9d", - "Volumes" : null, - "Domainname" : "", - "AttachStdout" : false, - "PublishService" : "", - "AttachStdin" : false, - "OpenStdin" : false, - "StdinOnce" : false, - "NetworkDisabled" : false, - "OnBuild" : [], - "Image" : "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", - "User" : "", - "WorkingDir" : "", - "Entrypoint" : null, - "MacAddress" : "", - "AttachStderr" : false, - "Labels" : { - "com.example.license" : "GPL", - "com.example.version" : "1.0", - "com.example.vendor" : "Acme" - }, - "Env" : [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "ExposedPorts" : null, - "Cmd" : [ - "/bin/sh", - "-c", - "#(nop) LABEL com.example.vendor=Acme com.example.license=GPL com.example.version=1.0" - ] - }, - "DockerVersion" : "1.9.0-dev", - "VirtualSize" : 188359297, - "Size" : 0, - "Author" : "", - "Created" : "2015-09-10T08:30:53.26995814Z", - "GraphDriver" : { - "Name" : "aufs", - "Data" : null - }, - "RepoDigests" : [ - "localhost:5000/test/busybox/example@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" - ], - "RepoTags" : [ - "example:1.0", - "example:latest", - "example:stable" - ], - "Config" : { - "Image" : "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", - "NetworkDisabled" : false, - "OnBuild" : [], - "StdinOnce" : false, - "PublishService" : "", - "AttachStdin" : false, - "OpenStdin" : false, - "Domainname" : "", - "AttachStdout" : false, - "Tty" : false, - "Hostname" : "e611e15f9c9d", - "Volumes" : null, - "Cmd" : [ - "/bin/bash" - ], - "ExposedPorts" : null, - "Env" : [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "Labels" : { - "com.example.vendor" : "Acme", - "com.example.version" : "1.0", - "com.example.license" : "GPL" - }, - "Entrypoint" : null, - "MacAddress" : "", - "AttachStderr" : false, - "WorkingDir" : "", - "User" : "" - } - } - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Get the history of an image - -`GET /images/(name)/history` - -Return the history of the image `name` - -**Example request**: - - GET /images/ubuntu/history HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", - "Created": 1398108230, - "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", - "Tags": [ - "ubuntu:lucid", - "ubuntu:10.04" - ], - "Size": 182964289, - "Comment": "" - }, - { - "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", - "Created": 1398108222, - "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", - "Tags": null, - "Size": 0, - "Comment": "" - }, - { - "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", - "Created": 1371157430, - "CreatedBy": "", - "Tags": [ - "scratch12:latest", - "scratch:latest" - ], - "Size": 0, - "Comment": "Imported from -" - } - ] - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Push an image on the registry - -`POST /images/(name)/push` - -Push the image `name` on the registry - -**Example request**: - - POST /images/test/push HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "Pushing..."} - {"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}} - {"error": "Invalid..."} - ... - -If you wish to push an image on to a private registry, that image must already have a tag -into a repository which references that registry `hostname` and `port`. This repository name should -then be used in the URL. This duplicates the command line's flow. - -**Example request**: - - POST /images/registry.acme.com:5000/test/push HTTP/1.1 - - -**Query parameters**: - -- **tag** – The tag to associate with the image on the registry. This is optional. - -**Request Headers**: - -- **X-Registry-Auth** – base64-encoded AuthConfig object. - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Tag an image into a repository - -`POST /images/(name)/tag` - -Tag the image `name` into a repository - -**Example request**: - - POST /images/test/tag?repo=myrepo&force=0&tag=v42 HTTP/1.1 - -**Example response**: - - HTTP/1.1 201 Created - -**Query parameters**: - -- **repo** – The repository to tag in -- **force** – 1/True/true or 0/False/false, default false -- **tag** - The new tag name - -**Status codes**: - -- **201** – no error -- **400** – bad parameter -- **404** – no such image -- **409** – conflict -- **500** – server error - -### Remove an image - -`DELETE /images/(name)` - -Remove the image `name` from the filesystem - -**Example request**: - - DELETE /images/test HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-type: application/json - - [ - {"Untagged": "3e2f21a89f"}, - {"Deleted": "3e2f21a89f"}, - {"Deleted": "53b4f83ac9"} - ] - -**Query parameters**: - -- **force** – 1/True/true or 0/False/false, default false -- **noprune** – 1/True/true or 0/False/false, default false - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **409** – conflict -- **500** – server error - -### Search images - -`GET /images/search` - -Search for an image on [Docker Hub](https://hub.docker.com). - -> **Note**: -> The response keys have changed from API v1.6 to reflect the JSON -> sent by the registry server to the docker daemon's request. - -**Example request**: - - GET /images/search?term=sshd HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "wma55/u1210sshd", - "star_count": 0 - }, - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "jdswinbank/sshd", - "star_count": 0 - }, - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "vgauthier/sshd", - "star_count": 0 - } - ... - ] - -**Query parameters**: - -- **term** – term to search - -**Status codes**: - -- **200** – no error -- **500** – server error - -## 2.3 Misc - -### Check auth configuration - -`POST /auth` - -Get the default username and email - -**Example request**: - - POST /auth HTTP/1.1 - Content-Type: application/json - - { - "username": "hannibal", - "password": "xxxx", - "email": "hannibal@a-team.com", - "serveraddress": "https://index.docker.io/v1/" - } - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** – no error -- **204** – no error -- **500** – server error - -### Display system-wide information - -`GET /info` - -Display system-wide information - -**Example request**: - - GET /info HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "ClusterStore": "etcd://localhost:2379", - "Containers": 11, - "CpuCfsPeriod": true, - "CpuCfsQuota": true, - "Debug": false, - "DockerRootDir": "/var/lib/docker", - "Driver": "btrfs", - "DriverStatus": [[""]], - "ExecutionDriver": "native-0.1", - "ExperimentalBuild": false, - "HttpProxy": "http://test:test@localhost:8080", - "HttpsProxy": "https://test:test@localhost:8080", - "ID": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS", - "IPv4Forwarding": true, - "Images": 16, - "IndexServerAddress": "https://index.docker.io/v1/", - "InitPath": "/usr/bin/docker", - "InitSha1": "", - "KernelVersion": "3.12.0-1-amd64", - "Labels": [ - "storage=ssd" - ], - "MemTotal": 2099236864, - "MemoryLimit": true, - "NCPU": 1, - "NEventsListener": 0, - "NFd": 11, - "NGoroutines": 21, - "Name": "prod-server-42", - "NoProxy": "9.81.1.160", - "OomKillDisable": true, - "OperatingSystem": "Boot2Docker", - "RegistryConfig": { - "IndexConfigs": { - "docker.io": { - "Mirrors": null, - "Name": "docker.io", - "Official": true, - "Secure": true - } - }, - "InsecureRegistryCIDRs": [ - "127.0.0.0/8" - ] - }, - "ServerVersion": "1.9.0", - "SwapLimit": false, - "SystemTime": "2015-03-10T11:11:23.730591467-07:00" - } - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Show the docker version information - -`GET /version` - -Show the docker version information - -**Example request**: - - GET /version HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Version": "1.5.0", - "Os": "linux", - "KernelVersion": "3.18.5-tinycore64", - "GoVersion": "go1.4.1", - "GitCommit": "a8a31ef", - "Arch": "amd64", - "ApiVersion": "1.20", - "Experimental": false - } - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Ping the docker server - -`GET /_ping` - -Ping the docker server - -**Example request**: - - GET /_ping HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: text/plain - - OK - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Create a new image from a container's changes - -`POST /commit` - -Create a new image from a container's changes - -**Example request**: - - POST /commit?container=44c004db4b17&comment=message&repo=myrepo HTTP/1.1 - Content-Type: application/json - - { - "Hostname": "", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": true, - "AttachStderr": true, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": null, - "Cmd": [ - "date" - ], - "Mounts": [ - { - "Source": "/data", - "Destination": "/data", - "Mode": "ro,Z", - "RW": false - } - ], - "Labels": { - "key1": "value1", - "key2": "value2" - }, - "WorkingDir": "", - "NetworkDisabled": false, - "ExposedPorts": { - "22/tcp": {} - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - {"Id": "596069db4bf5"} - -**JSON parameters**: - -- **config** - the container's configuration - -**Query parameters**: - -- **container** – source container -- **repo** – repository -- **tag** – tag -- **comment** – commit message -- **author** – author (e.g., "John Hannibal Smith - <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>") -- **pause** – 1/True/true or 0/False/false, whether to pause the container before committing -- **changes** – Dockerfile instructions to apply while committing - -**Status codes**: - -- **201** – no error -- **404** – no such container -- **500** – server error - -### Monitor Docker's events - -`GET /events` - -Get container events from docker, in real time via streaming. - -Docker containers report the following events: - - attach, commit, copy, create, destroy, die, exec_create, exec_start, export, kill, oom, pause, rename, resize, restart, start, stop, top, unpause - -Docker images report the following events: - - delete, import, pull, push, tag, untag - -**Example request**: - - GET /events?since=1374067924 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status":"pull","id":"busybox:latest","time":1442421700,"timeNano":1442421700598988358} - {"status":"create","id":"5745704abe9caa5","from":"busybox","time":1442421716,"timeNano":1442421716853979870} - {"status":"attach","id":"5745704abe9caa5","from":"busybox","time":1442421716,"timeNano":1442421716894759198} - {"status":"start","id":"5745704abe9caa5","from":"busybox","time":1442421716,"timeNano":1442421716983607193} - -**Query parameters**: - -- **since** – Timestamp. Show all events created since timestamp and then stream -- **until** – Timestamp. Show events created until given timestamp and stop streaming -- **filters** – A json encoded value of the filters (a map[string][]string) to process on the event list. Available filters: - - `container=`; -- container to filter - - `event=`; -- event to filter - - `image=`; -- image to filter - - `label=`; -- image and container label to filter - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Get a tarball containing all images in a repository - -`GET /images/(name)/get` - -Get a tarball containing all images and metadata for the repository specified -by `name`. - -If `name` is a specific name and tag (e.g. ubuntu:latest), then only that image -(and its parents) are returned. If `name` is an image ID, similarly only that -image (and its parents) are returned, but with the exclusion of the -'repositories' file in the tarball, as there were no image names referenced. - -See the [image tarball format](docker_remote_api_v1.21.md#image-tarball-format) for more details. - -**Example request** - - GET /images/ubuntu/get - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - Binary data stream - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Get a tarball containing all images - -`GET /images/get` - -Get a tarball containing all images and metadata for one or more repositories. - -For each value of the `names` parameter: if it is a specific name and tag (e.g. -`ubuntu:latest`), then only that image (and its parents) are returned; if it is -an image ID, similarly only that image (and its parents) are returned and there -would be no names referenced in the 'repositories' file for this image ID. - -See the [image tarball format](docker_remote_api_v1.21.md#image-tarball-format) for more details. - -**Example request** - - GET /images/get?names=myname%2Fmyapp%3Alatest&names=busybox - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - Binary data stream - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Load a tarball with a set of images and tags into docker - -`POST /images/load` - -Load a set of images and tags into a Docker repository. -See the [image tarball format](docker_remote_api_v1.21.md#image-tarball-format) for more details. - -**Example request** - - POST /images/load - Content-Type: application/x-tar - - Tarball in body - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Image tarball format - -An image tarball contains one directory per image layer (named using its long ID), -each containing these files: - -- `VERSION`: currently `1.0` - the file format version -- `json`: detailed layer information, similar to `docker inspect layer_id` -- `layer.tar`: A tarfile containing the filesystem changes in this layer - -The `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories -for storing attribute changes and deletions. - -If the tarball defines a repository, the tarball should also include a `repositories` file at -the root that contains a list of repository and tag names mapped to layer IDs. - -``` -{"hello-world": - {"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"} -} -``` - -### Exec Create - -`POST /containers/(id or name)/exec` - -Sets up an exec instance in a running container `id` - -**Example request**: - - POST /containers/e90e34656806/exec HTTP/1.1 - Content-Type: application/json - - { - "AttachStdin": true, - "AttachStdout": true, - "AttachStderr": true, - "Cmd": ["sh"], - "Privileged": true, - "Tty": true, - "User": "123:456" - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Id": "f90e34656806", - "Warnings":[] - } - -**JSON parameters**: - -- **AttachStdin** - Boolean value, attaches to `stdin` of the `exec` command. -- **AttachStdout** - Boolean value, attaches to `stdout` of the `exec` command. -- **AttachStderr** - Boolean value, attaches to `stderr` of the `exec` command. -- **Tty** - Boolean value to allocate a pseudo-TTY. -- **Cmd** - Command to run specified as a string or an array of strings. -- **Privileged** - Boolean value, runs the exec process with extended privileges. -- **User** - A string value specifying the user, and optionally, group to run - the exec process inside the container. Format is one of: `"user"`, - `"user:group"`, `"uid"`, or `"uid:gid"`. - -**Status codes**: - -- **201** – no error -- **404** – no such container -- **409** - container is paused -- **500** - server error - -### Exec Start - -`POST /exec/(id)/start` - -Starts a previously set up `exec` instance `id`. If `detach` is true, this API -returns after starting the `exec` command. Otherwise, this API sets up an -interactive session with the `exec` command. - -**Example request**: - - POST /exec/e90e34656806/start HTTP/1.1 - Content-Type: application/json - - { - "Detach": false, - "Tty": false - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/vnd.docker.raw-stream - - {% raw %} - {{ STREAM }} - {% endraw %} - -**JSON parameters**: - -- **Detach** - Detach from the `exec` command. -- **Tty** - Boolean value to allocate a pseudo-TTY. - -**Status codes**: - -- **200** – no error -- **404** – no such exec instance -- **409** - container is paused - -**Stream details**: - -Similar to the stream behavior of `POST /containers/(id or name)/attach` API - -### Exec Resize - -`POST /exec/(id)/resize` - -Resizes the `tty` session used by the `exec` command `id`. The unit is number of characters. -This API is valid only if `tty` was specified as part of creating and starting the `exec` command. - -**Example request**: - - POST /exec/e90e34656806/resize?h=40&w=80 HTTP/1.1 - Content-Type: text/plain - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: text/plain - -**Query parameters**: - -- **h** – height of `tty` session -- **w** – width - -**Status codes**: - -- **201** – no error -- **404** – no such exec instance - -### Exec Inspect - -`GET /exec/(id)/json` - -Return low-level information about the `exec` command `id`. - -**Example request**: - - GET /exec/11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: plain/text - - { - "ID" : "11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39", - "Running" : false, - "ExitCode" : 2, - "ProcessConfig" : { - "privileged" : false, - "user" : "", - "tty" : false, - "entrypoint" : "sh", - "arguments" : [ - "-c", - "exit 2" - ] - }, - "OpenStdin" : false, - "OpenStderr" : false, - "OpenStdout" : false, - "Container" : { - "State" : { - "Status" : "running", - "Running" : true, - "Paused" : false, - "Restarting" : false, - "OOMKilled" : false, - "Pid" : 3650, - "ExitCode" : 0, - "Error" : "", - "StartedAt" : "2014-11-17T22:26:03.717657531Z", - "FinishedAt" : "0001-01-01T00:00:00Z" - }, - "ID" : "8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c", - "Created" : "2014-11-17T22:26:03.626304998Z", - "Path" : "date", - "Args" : [], - "Config" : { - "Hostname" : "8f177a186b97", - "Domainname" : "", - "User" : "", - "AttachStdin" : false, - "AttachStdout" : false, - "AttachStderr" : false, - "ExposedPorts" : null, - "Tty" : false, - "OpenStdin" : false, - "StdinOnce" : false, - "Env" : [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], - "Cmd" : [ - "date" - ], - "Image" : "ubuntu", - "Volumes" : null, - "WorkingDir" : "", - "Entrypoint" : null, - "NetworkDisabled" : false, - "MacAddress" : "", - "OnBuild" : null, - "SecurityOpt" : null - }, - "Image" : "5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5", - "NetworkSettings" : { - "Bridge": "", - "SandboxID": "", - "HairpinMode": false, - "LinkLocalIPv6Address": "", - "LinkLocalIPv6PrefixLen": 0, - "Ports": null, - "SandboxKey": "", - "SecondaryIPAddresses": null, - "SecondaryIPv6Addresses": null, - "EndpointID": "", - "Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "IPAddress": "", - "IPPrefixLen": 0, - "IPv6Gateway": "", - "MacAddress": "", - "Networks": { - "bridge": { - "EndpointID": "", - "Gateway": "", - "IPAddress": "", - "IPPrefixLen": 0, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "" - } - } - }, - "ResolvConfPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/resolv.conf", - "HostnamePath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hostname", - "HostsPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hosts", - "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", - "Name" : "/test", - "Driver" : "aufs", - "ExecDriver" : "native-0.2", - "MountLabel" : "", - "ProcessLabel" : "", - "AppArmorProfile" : "", - "RestartCount" : 0, - "Mounts" : [] - } - } - -**Status codes**: - -- **200** – no error -- **404** – no such exec instance -- **500** - server error - -## 2.4 Volumes - -### List volumes - -`GET /volumes` - -**Example request**: - - GET /volumes HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Volumes": [ - { - "Name": "tardis", - "Driver": "local", - "Mountpoint": "/var/lib/docker/volumes/tardis" - } - ] - } - -**Query parameters**: - -- **filters** - JSON encoded value of the filters (a `map[string][]string`) to process on the volumes list. There is one available filter: `dangling=true` - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Create a volume - -`POST /volumes/create` - -Create a volume - -**Example request**: - - POST /volumes/create HTTP/1.1 - Content-Type: application/json - - { - "Name": "tardis" - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Name": "tardis", - "Driver": "local", - "Mountpoint": "/var/lib/docker/volumes/tardis" - } - -**Status codes**: - -- **201** - no error -- **500** - server error - -**JSON parameters**: - -- **Name** - The new volume's name. If not specified, Docker generates a name. -- **Driver** - Name of the volume driver to use. Defaults to `local` for the name. -- **DriverOpts** - A mapping of driver options and values. These options are - passed directly to the driver and are driver specific. - -### Inspect a volume - -`GET /volumes/(name)` - -Return low-level information on the volume `name` - -**Example request**: - - GET /volumes/tardis - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Name": "tardis", - "Driver": "local", - "Mountpoint": "/var/lib/docker/volumes/tardis" - } - -**Status codes**: - -- **200** - no error -- **404** - no such volume -- **500** - server error - -### Remove a volume - -`DELETE /volumes/(name)` - -Instruct the driver to remove the volume (`name`). - -**Example request**: - - DELETE /volumes/tardis HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** - no error -- **404** - no such volume or volume driver -- **409** - volume is in use and cannot be removed -- **500** - server error - -## 2.5 Networks - -### List networks - -`GET /networks` - -**Example request**: - - GET /networks HTTP/1.1 - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Type: application/json - -[ - { - "Name": "bridge", - "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", - "Scope": "local", - "Driver": "bridge", - "IPAM": { - "Driver": "default", - "Config": [ - { - "Subnet": "172.17.0.0/16" - } - ] - }, - "Containers": { - "39b69226f9d79f5634485fb236a23b2fe4e96a0a94128390a7fbbcc167065867": { - "EndpointID": "ed2419a97c1d9954d05b46e462e7002ea552f216e9b136b80a7db8d98b442eda", - "MacAddress": "02:42:ac:11:00:02", - "IPv4Address": "172.17.0.2/16", - "IPv6Address": "" - } - }, - "Options": { - "com.docker.network.bridge.default_bridge": "true", - "com.docker.network.bridge.enable_icc": "true", - "com.docker.network.bridge.enable_ip_masquerade": "true", - "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", - "com.docker.network.bridge.name": "docker0", - "com.docker.network.driver.mtu": "1500" - } - }, - { - "Name": "none", - "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", - "Scope": "local", - "Driver": "null", - "IPAM": { - "Driver": "default", - "Config": [] - }, - "Containers": {}, - "Options": {} - }, - { - "Name": "host", - "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", - "Scope": "local", - "Driver": "host", - "IPAM": { - "Driver": "default", - "Config": [] - }, - "Containers": {}, - "Options": {} - } -] -``` - -**Query parameters**: - -- **filters** - JSON encoded value of the filters (a `map[string][]string`) to process on the networks list. Available filters: `name=[network-names]` , `id=[network-ids]` - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Inspect network - -`GET /networks/` - -**Example request**: - - GET /networks/f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566 HTTP/1.1 - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Type: application/json - -{ - "Name": "bridge", - "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", - "Scope": "local", - "Driver": "bridge", - "IPAM": { - "Driver": "default", - "Config": [ - { - "Subnet": "172.17.0.0/16" - } - ] - }, - "Containers": { - "39b69226f9d79f5634485fb236a23b2fe4e96a0a94128390a7fbbcc167065867": { - "EndpointID": "ed2419a97c1d9954d05b46e462e7002ea552f216e9b136b80a7db8d98b442eda", - "MacAddress": "02:42:ac:11:00:02", - "IPv4Address": "172.17.0.2/16", - "IPv6Address": "" - } - }, - "Options": { - "com.docker.network.bridge.default_bridge": "true", - "com.docker.network.bridge.enable_icc": "true", - "com.docker.network.bridge.enable_ip_masquerade": "true", - "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", - "com.docker.network.bridge.name": "docker0", - "com.docker.network.driver.mtu": "1500" - } -} -``` - -**Status codes**: - -- **200** - no error -- **404** - network not found - -### Create a network - -`POST /networks/create` - -Create a network - -**Example request**: - -``` -POST /networks/create HTTP/1.1 -Content-Type: application/json - -{ - "Name":"isolated_nw", - "Driver":"bridge", - "IPAM":{ - "Config":[ - { - "Subnet":"172.20.0.0/16", - "IPRange":"172.20.10.0/24", - "Gateway":"172.20.10.11" - } - ] - } -} -``` - -**Example response**: - -``` -HTTP/1.1 201 Created -Content-Type: application/json - -{ - "Id": "22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30", - "Warning": "" -} -``` - -**Status codes**: - -- **201** - no error -- **404** - plugin not found -- **500** - server error - -**JSON parameters**: - -- **Name** - The new network's name. this is a mandatory field -- **Driver** - Name of the network driver plugin to use. Defaults to `bridge` driver -- **IPAM** - Optional custom IP scheme for the network -- **Options** - Network specific options to be used by the drivers -- **CheckDuplicate** - Requests daemon to check for networks with same name - -### Connect a container to a network - -`POST /networks/(id)/connect` - -Connect a container to a network - -**Example request**: - -``` -POST /networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30/connect HTTP/1.1 -Content-Type: application/json - -{ - "Container":"3613f73ba0e4" -} -``` - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** - no error -- **404** - network or container is not found -- **500** - Internal Server Error - -**JSON parameters**: - -- **container** - container-id/name to be connected to the network - -### Disconnect a container from a network - -`POST /networks/(id)/disconnect` - -Disconnect a container from a network - -**Example request**: - -``` -POST /networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30/disconnect HTTP/1.1 -Content-Type: application/json - -{ - "Container":"3613f73ba0e4" -} -``` - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** - no error -- **404** - network or container not found -- **500** - Internal Server Error - -**JSON parameters**: - -- **Container** - container-id/name to be disconnected from a network - -### Remove a network - -`DELETE /networks/(id)` - -Instruct the driver to remove the network (`id`). - -**Example request**: - - DELETE /networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** - no error -- **404** - no such network -- **500** - server error - -# 3. Going further - -## 3.1 Inside `docker run` - -As an example, the `docker run` command line makes the following API calls: - -- Create the container - -- If the status code is 404, it means the image doesn't exist: - - Try to pull it. - - Then, retry to create the container. - -- Start the container. - -- If you are not in detached mode: -- Attach to the container, using `logs=1` (to have `stdout` and - `stderr` from the container's start) and `stream=1` - -- If in detached mode or only `stdin` is attached, display the container's id. - -## 3.2 Hijacking - -In this version of the API, `/attach`, uses hijacking to transport `stdin`, -`stdout`, and `stderr` on the same socket. - -To hint potential proxies about connection hijacking, Docker client sends -connection upgrade headers similarly to websocket. - - Upgrade: tcp - Connection: Upgrade - -When Docker daemon detects the `Upgrade` header, it switches its status code -from **200 OK** to **101 UPGRADED** and resends the same headers. - - -## 3.3 CORS Requests - -To set cross origin requests to the remote api please give values to -`--api-cors-header` when running Docker in daemon mode. Set * (asterisk) allows all, -default or blank means CORS disabled - - $ dockerd -H="192.168.1.9:2375" --api-cors-header="http://foo.bar" diff --git a/engine/reference/api/docker_remote_api_v1.22.md b/engine/reference/api/docker_remote_api_v1.22.md deleted file mode 100644 index b613418c96..0000000000 --- a/engine/reference/api/docker_remote_api_v1.22.md +++ /dev/null @@ -1,3287 +0,0 @@ ---- -redirect_from: - - /reference/api/docker_remote_api_v1.22/ -description: API Documentation for Docker -keywords: -- API, Docker, rcli, REST, documentation -title: Docker Remote API v1.22 ---- - -## 1. Brief introduction - - - The Remote API has replaced `rcli`. - - The daemon listens on `unix:///var/run/docker.sock` but you can - [Bind Docker to another host/port or a Unix socket](../commandline/dockerd.md#bind-docker-to-another-host-port-or-a-unix-socket). - - The API tends to be REST. However, for some complex commands, like `attach` - or `pull`, the HTTP connection is hijacked to transport `stdout`, - `stdin` and `stderr`. - - When the client API version is newer than the daemon's, these calls return an HTTP - `400 Bad Request` error message. - -# 2. Endpoints - -## 2.1 Containers - -### List containers - -`GET /containers/json` - -List containers - -**Example request**: - - GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Id": "8dfafdbc3a40", - "Names":["/boring_feynman"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 1", - "Created": 1367854155, - "Status": "Exit 0", - "Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}], - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "SizeRw": 12288, - "SizeRootFs": 0, - "HostConfig": { - "NetworkMode": "default" - }, - "NetworkSettings": { - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "2cdc4edb1ded3631c81f57966563e5c8525b81121bb3706a9a9a3ae102711f3f", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.2", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:02" - } - } - } - }, - { - "Id": "9cd87474be90", - "Names":["/coolName"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 222222", - "Created": 1367854155, - "Status": "Exit 0", - "Ports": [], - "Labels": {}, - "SizeRw": 12288, - "SizeRootFs": 0, - "HostConfig": { - "NetworkMode": "default" - }, - "NetworkSettings": { - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "88eaed7b37b38c2a3f0c4bc796494fdf51b270c2d22656412a2ca5d559a64d7a", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.8", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:08" - } - } - } - }, - { - "Id": "3176a2479c92", - "Names":["/sleepy_dog"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 3333333333333333", - "Created": 1367854154, - "Status": "Exit 0", - "Ports":[], - "Labels": {}, - "SizeRw":12288, - "SizeRootFs":0, - "HostConfig": { - "NetworkMode": "default" - }, - "NetworkSettings": { - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "8b27c041c30326d59cd6e6f510d4f8d1d570a228466f956edf7815508f78e30d", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.6", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:06" - } - } - } - }, - { - "Id": "4cb07b47f9fb", - "Names":["/running_cat"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 444444444444444444444444444444444", - "Created": 1367854152, - "Status": "Exit 0", - "Ports": [], - "Labels": {}, - "SizeRw": 12288, - "SizeRootFs": 0, - "HostConfig": { - "NetworkMode": "default" - }, - "NetworkSettings": { - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "d91c7b2f0644403d7ef3095985ea0e2370325cd2332ff3a3225c4247328e66e9", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.5", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:05" - } - } - } - } - ] - -**Query parameters**: - -- **all** – 1/True/true or 0/False/false, Show all containers. - Only running containers are shown by default (i.e., this defaults to false) -- **limit** – Show `limit` last created - containers, include non-running ones. -- **since** – Show only containers created since Id, include - non-running ones. -- **before** – Show only containers created before Id, include - non-running ones. -- **size** – 1/True/true or 0/False/false, Show the containers - sizes -- **filters** - a JSON encoded value of the filters (a `map[string][]string`) to process on the containers list. Available filters: - - `exited=`; -- containers with exit code of `` ; - - `status=`(`created`|`restarting`|`running`|`paused`|`exited`|`dead`) - - `label=key` or `label="key=value"` of a container label - - `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only) - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **500** – server error - -### Create a container - -`POST /containers/create` - -Create a container - -**Example request**: - - POST /containers/create HTTP/1.1 - Content-Type: application/json - - { - "Hostname": "", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": true, - "AttachStderr": true, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": [ - "FOO=bar", - "BAZ=quux" - ], - "Cmd": [ - "date" - ], - "Entrypoint": null, - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "Volumes": { - "/volumes/data": {} - }, - "WorkingDir": "", - "NetworkDisabled": false, - "MacAddress": "12:34:56:78:9a:bc", - "ExposedPorts": { - "22/tcp": {} - }, - "StopSignal": "SIGTERM", - "HostConfig": { - "Binds": ["/tmp:/tmp"], - "Links": ["redis3:redis"], - "Memory": 0, - "MemorySwap": 0, - "MemoryReservation": 0, - "KernelMemory": 0, - "CpuShares": 512, - "CpuPeriod": 100000, - "CpuQuota": 50000, - "CpusetCpus": "0,1", - "CpusetMems": "0,1", - "BlkioWeight": 300, - "BlkioWeightDevice": [{}], - "BlkioDeviceReadBps": [{}], - "BlkioDeviceReadIOps": [{}], - "BlkioDeviceWriteBps": [{}], - "BlkioDeviceWriteIOps": [{}], - "MemorySwappiness": 60, - "OomKillDisable": false, - "OomScoreAdj": 500, - "PidMode": "", - "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] }, - "PublishAllPorts": false, - "Privileged": false, - "ReadonlyRootfs": false, - "Dns": ["8.8.8.8"], - "DnsOptions": [""], - "DnsSearch": [""], - "ExtraHosts": null, - "VolumesFrom": ["parent", "other:ro"], - "CapAdd": ["NET_ADMIN"], - "CapDrop": ["MKNOD"], - "GroupAdd": ["newgroup"], - "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 }, - "NetworkMode": "bridge", - "Devices": [], - "Ulimits": [{}], - "LogConfig": { "Type": "json-file", "Config": {} }, - "SecurityOpt": [], - "CgroupParent": "", - "VolumeDriver": "", - "ShmSize": 67108864 - }, - "NetworkingConfig": { - "EndpointsConfig": { - "isolated_nw" : { - "IPAMConfig": { - "IPv4Address":"172.20.30.33", - "IPv6Address":"2001:db8:abcd::3033" - }, - "Links":["container_1", "container_2"], - "Aliases":["server_x", "server_y"] - } - } - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Id":"e90e34656806", - "Warnings":[] - } - -**JSON parameters**: - -- **Hostname** - A string value containing the hostname to use for the - container. -- **Domainname** - A string value containing the domain name to use - for the container. -- **User** - A string value specifying the user inside the container. -- **AttachStdin** - Boolean value, attaches to `stdin`. -- **AttachStdout** - Boolean value, attaches to `stdout`. -- **AttachStderr** - Boolean value, attaches to `stderr`. -- **Tty** - Boolean value, Attach standard streams to a `tty`, including `stdin` if it is not closed. -- **OpenStdin** - Boolean value, opens `stdin`, -- **StdinOnce** - Boolean value, close `stdin` after the 1 attached client disconnects. -- **Env** - A list of environment variables in the form of `["VAR=value"[,"VAR2=value2"]]` -- **Labels** - Adds a map of labels to a container. To specify a map: `{"key":"value"[,"key2":"value2"]}` -- **Cmd** - Command to run specified as a string or an array of strings. -- **Entrypoint** - Set the entry point for the container as a string or an array - of strings. -- **Image** - A string specifying the image name to use for the container. -- **Volumes** - An object mapping mount point paths (strings) inside the - container to empty objects. -- **WorkingDir** - A string specifying the working directory for commands to - run in. -- **NetworkDisabled** - Boolean value, when true disables networking for the - container -- **ExposedPorts** - An object mapping ports to an empty object in the form of: - `"ExposedPorts": { "/: {}" }` -- **StopSignal** - Signal to stop a container as a string or unsigned integer. `SIGTERM` by default. -- **HostConfig** - - **Binds** – A list of volume bindings for this container. Each volume binding is a string in one of these forms: - + `host-src:container-dest` to bind-mount a host path into the - container. Both `host-src`, and `container-dest` must be an - _absolute_ path. - + `host-src:container-dest:ro` to make the bind-mount read-only - inside the container. Both `host-src`, and `container-dest` must be - an _absolute_ path. - + `volume-name:container-dest` to bind-mount a volume managed by a - volume driver into the container. `container-dest` must be an - _absolute_ path. - + `volume-name:container-dest:ro` to mount the volume read-only - inside the container. `container-dest` must be an _absolute_ path. - - **Links** - A list of links for the container. Each link entry should be - in the form of `container_name:alias`. - - **Memory** - Memory limit in bytes. - - **MemorySwap** - Total memory limit (memory + swap); set `-1` to enable unlimited swap. - You must use this with `memory` and make the swap value larger than `memory`. - - **MemoryReservation** - Memory soft limit in bytes. - - **KernelMemory** - Kernel memory limit in bytes. - - **CpuShares** - An integer value containing the container's CPU Shares - (ie. the relative weight vs other containers). - - **CpuPeriod** - The length of a CPU period in microseconds. - - **CpuQuota** - Microseconds of CPU time that the container can get in a CPU period. - - **CpusetCpus** - String value containing the `cgroups CpusetCpus` to use. - - **CpusetMems** - Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. - - **BlkioWeight** - Block IO weight (relative weight) accepts a weight value between 10 and 1000. - - **BlkioWeightDevice** - Block IO weight (relative device weight) in the form of: `"BlkioWeightDevice": [{"Path": "device_path", "Weight": weight}]` - - **BlkioDeviceReadBps** - Limit read rate (bytes per second) from a device in the form of: `"BlkioDeviceReadBps": [{"Path": "device_path", "Rate": rate}]`, for example: - `"BlkioDeviceReadBps": [{"Path": "/dev/sda", "Rate": "1024"}]"` - - **BlkioDeviceWriteBps** - Limit write rate (bytes per second) to a device in the form of: `"BlkioDeviceWriteBps": [{"Path": "device_path", "Rate": rate}]`, for example: - `"BlkioDeviceWriteBps": [{"Path": "/dev/sda", "Rate": "1024"}]"` - - **BlkioDeviceReadIOps** - Limit read rate (IO per second) from a device in the form of: `"BlkioDeviceReadIOps": [{"Path": "device_path", "Rate": rate}]`, for example: - `"BlkioDeviceReadIOps": [{"Path": "/dev/sda", "Rate": "1000"}]` - - **BlkioDeviceWiiteIOps** - Limit write rate (IO per second) to a device in the form of: `"BlkioDeviceWriteIOps": [{"Path": "device_path", "Rate": rate}]`, for example: - `"BlkioDeviceWriteIOps": [{"Path": "/dev/sda", "Rate": "1000"}]` - - **MemorySwappiness** - Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. - - **OomKillDisable** - Boolean value, whether to disable OOM Killer for the container or not. - - **OomScoreAdj** - An integer value containing the score given to the container in order to tune OOM killer preferences. - - **PidMode** - Set the PID (Process) Namespace mode for the container; - `"container:"`: joins another container's PID namespace - `"host"`: use the host's PID namespace inside the container - - **PortBindings** - A map of exposed container ports and the host port they - should map to. A JSON object in the form - `{ /: [{ "HostPort": "" }] }` - Take note that `port` is specified as a string and not an integer value. - - **PublishAllPorts** - Allocates a random host port for all of a container's - exposed ports. Specified as a boolean value. - - **Privileged** - Gives the container full access to the host. Specified as - a boolean value. - - **ReadonlyRootfs** - Mount the container's root filesystem as read only. - Specified as a boolean value. - - **Dns** - A list of DNS servers for the container to use. - - **DnsOptions** - A list of DNS options - - **DnsSearch** - A list of DNS search domains - - **ExtraHosts** - A list of hostnames/IP mappings to add to the - container's `/etc/hosts` file. Specified in the form `["hostname:IP"]`. - - **VolumesFrom** - A list of volumes to inherit from another container. - Specified in the form `[:]` - - **CapAdd** - A list of kernel capabilities to add to the container. - - **Capdrop** - A list of kernel capabilities to drop from the container. - - **GroupAdd** - A list of additional groups that the container process will run as - - **RestartPolicy** – The behavior to apply when the container exits. The - value is an object with a `Name` property of either `"always"` to - always restart, `"unless-stopped"` to restart always except when - user has manually stopped the container or `"on-failure"` to restart only when the container - exit code is non-zero. If `on-failure` is used, `MaximumRetryCount` - controls the number of times to retry before giving up. - The default is not to restart. (optional) - An ever increasing delay (double the previous delay, starting at 100mS) - is added before each restart to prevent flooding the server. - - **NetworkMode** - Sets the networking mode for the container. Supported - standard values are: `bridge`, `host`, `none`, and `container:`. Any other value is taken - as a custom network's name to which this container should connect to. - - **Devices** - A list of devices to add to the container specified as a JSON object in the - form - `{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}` - - **Ulimits** - A list of ulimits to set in the container, specified as - `{ "Name": , "Soft": , "Hard": }`, for example: - `Ulimits: { "Name": "nofile", "Soft": 1024, "Hard": 2048 }` - - **SecurityOpt**: A list of string values to customize labels for MLS - systems, such as SELinux. - - **LogConfig** - Log configuration for the container, specified as a JSON object in the form - `{ "Type": "", "Config": {"key1": "val1"}}`. - Available types: `json-file`, `syslog`, `journald`, `gelf`, `awslogs`, `splunk`, `none`. - `json-file` logging driver. - - **CgroupParent** - Path to `cgroups` under which the container's `cgroup` is created. If the path is not absolute, the path is considered to be relative to the `cgroups` path of the init process. Cgroups are created if they do not already exist. - - **VolumeDriver** - Driver that this container users to mount volumes. - - **ShmSize** - Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB. - -**Query parameters**: - -- **name** – Assign the specified name to the container. Must - match `/?[a-zA-Z0-9_-]+`. - -**Status codes**: - -- **201** – no error -- **400** – bad parameter -- **404** – no such container -- **406** – impossible to attach (container not running) -- **409** – conflict -- **500** – server error - -### Inspect a container - -`GET /containers/(id or name)/json` - -Return low-level information on the container `id` - -**Example request**: - - GET /containers/4fa6e0f0c678/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "AppArmorProfile": "", - "Args": [ - "-c", - "exit 9" - ], - "Config": { - "AttachStderr": true, - "AttachStdin": false, - "AttachStdout": true, - "Cmd": [ - "/bin/sh", - "-c", - "exit 9" - ], - "Domainname": "", - "Entrypoint": null, - "Env": [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "ExposedPorts": null, - "Hostname": "ba033ac44011", - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "MacAddress": "", - "NetworkDisabled": false, - "OnBuild": null, - "OpenStdin": false, - "StdinOnce": false, - "Tty": false, - "User": "", - "Volumes": { - "/volumes/data": {} - }, - "WorkingDir": "", - "StopSignal": "SIGTERM" - }, - "Created": "2015-01-06T15:47:31.485331387Z", - "Driver": "devicemapper", - "ExecIDs": null, - "HostConfig": { - "Binds": null, - "BlkioWeight": 0, - "BlkioWeightDevice": [{}], - "BlkioDeviceReadBps": [{}], - "BlkioDeviceWriteBps": [{}], - "BlkioDeviceReadIOps": [{}], - "BlkioDeviceWriteIOps": [{}], - "CapAdd": null, - "CapDrop": null, - "ContainerIDFile": "", - "CpusetCpus": "", - "CpusetMems": "", - "CpuShares": 0, - "CpuPeriod": 100000, - "Devices": [], - "Dns": null, - "DnsOptions": null, - "DnsSearch": null, - "ExtraHosts": null, - "IpcMode": "", - "Links": null, - "LxcConf": [], - "Memory": 0, - "MemorySwap": 0, - "MemoryReservation": 0, - "KernelMemory": 0, - "OomKillDisable": false, - "OomScoreAdj": 500, - "NetworkMode": "bridge", - "PidMode": "", - "PortBindings": {}, - "Privileged": false, - "ReadonlyRootfs": false, - "PublishAllPorts": false, - "RestartPolicy": { - "MaximumRetryCount": 2, - "Name": "on-failure" - }, - "LogConfig": { - "Config": null, - "Type": "json-file" - }, - "SecurityOpt": null, - "VolumesFrom": null, - "Ulimits": [{}], - "VolumeDriver": "", - "ShmSize": 67108864 - }, - "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", - "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", - "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", - "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", - "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", - "MountLabel": "", - "Name": "/boring_euclid", - "NetworkSettings": { - "Bridge": "", - "SandboxID": "", - "HairpinMode": false, - "LinkLocalIPv6Address": "", - "LinkLocalIPv6PrefixLen": 0, - "Ports": null, - "SandboxKey": "", - "SecondaryIPAddresses": null, - "SecondaryIPv6Addresses": null, - "EndpointID": "", - "Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "IPAddress": "", - "IPPrefixLen": 0, - "IPv6Gateway": "", - "MacAddress": "", - "Networks": { - "bridge": { - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.2", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:12:00:02" - } - } - }, - "Path": "/bin/sh", - "ProcessLabel": "", - "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", - "RestartCount": 1, - "State": { - "Error": "", - "ExitCode": 9, - "FinishedAt": "2015-01-06T15:47:32.080254511Z", - "OOMKilled": false, - "Dead": false, - "Paused": false, - "Pid": 0, - "Restarting": false, - "Running": true, - "StartedAt": "2015-01-06T15:47:32.072697474Z", - "Status": "running" - }, - "Mounts": [ - { - "Name": "fac362...80535", - "Source": "/data", - "Destination": "/data", - "Driver": "local", - "Mode": "ro,Z", - "RW": false, - "Propagation": "" - } - ] - } - -**Example request, with size information**: - - GET /containers/4fa6e0f0c678/json?size=1 HTTP/1.1 - -**Example response, with size information**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - .... - "SizeRw": 0, - "SizeRootFs": 972, - .... - } - -**Query parameters**: - -- **size** – 1/True/true or 0/False/false, return container size information. Default is `false`. - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### List processes running inside a container - -`GET /containers/(id or name)/top` - -List processes running inside the container `id`. On Unix systems this -is done by running the `ps` command. This endpoint is not -supported on Windows. - -**Example request**: - - GET /containers/4fa6e0f0c678/top HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Titles" : [ - "UID", "PID", "PPID", "C", "STIME", "TTY", "TIME", "CMD" - ], - "Processes" : [ - [ - "root", "13642", "882", "0", "17:03", "pts/0", "00:00:00", "/bin/bash" - ], - [ - "root", "13735", "13642", "0", "17:06", "pts/0", "00:00:00", "sleep 10" - ] - ] - } - -**Example request**: - - GET /containers/4fa6e0f0c678/top?ps_args=aux HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Titles" : [ - "USER","PID","%CPU","%MEM","VSZ","RSS","TTY","STAT","START","TIME","COMMAND" - ] - "Processes" : [ - [ - "root","13642","0.0","0.1","18172","3184","pts/0","Ss","17:03","0:00","/bin/bash" - ], - [ - "root","13895","0.0","0.0","4348","692","pts/0","S+","17:15","0:00","sleep 10" - ] - ], - } - -**Query parameters**: - -- **ps_args** – `ps` arguments to use (e.g., `aux`), defaults to `-ef` - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Get container logs - -`GET /containers/(id or name)/logs` - -Get `stdout` and `stderr` logs from the container ``id`` - -> **Note**: -> This endpoint works only for containers with the `json-file` or `journald` logging drivers. - -**Example request**: - - GET /containers/4fa6e0f0c678/logs?stderr=1&stdout=1×tamps=1&follow=1&tail=10&since=1428990821 HTTP/1.1 - -**Example response**: - - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **follow** – 1/True/true or 0/False/false, return stream. Default `false`. -- **stdout** – 1/True/true or 0/False/false, show `stdout` log. Default `false`. -- **stderr** – 1/True/true or 0/False/false, show `stderr` log. Default `false`. -- **since** – UNIX timestamp (integer) to filter logs. Specifying a timestamp - will only output log-entries since that timestamp. Default: 0 (unfiltered) -- **timestamps** – 1/True/true or 0/False/false, print timestamps for - every log line. Default `false`. -- **tail** – Output specified number of lines at the end of logs: `all` or ``. Default all. - -**Status codes**: - -- **101** – no error, hints proxy about hijacking -- **200** – no error, no upgrade header found -- **404** – no such container -- **500** – server error - -### Inspect changes on a container's filesystem - -`GET /containers/(id or name)/changes` - -Inspect changes on container `id`'s filesystem - -**Example request**: - - GET /containers/4fa6e0f0c678/changes HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Path": "/dev", - "Kind": 0 - }, - { - "Path": "/dev/kmsg", - "Kind": 1 - }, - { - "Path": "/test", - "Kind": 1 - } - ] - -Values for `Kind`: - -- `0`: Modify -- `1`: Add -- `2`: Delete - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Export a container - -`GET /containers/(id or name)/export` - -Export the contents of container `id` - -**Example request**: - - GET /containers/4fa6e0f0c678/export HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/octet-stream - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Get container stats based on resource usage - -`GET /containers/(id or name)/stats` - -This endpoint returns a live stream of a container's resource usage statistics. - -**Example request**: - - GET /containers/redis1/stats HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "read" : "2015-01-08T22:57:31.547920715Z", - "networks": { - "eth0": { - "rx_bytes": 5338, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 36, - "tx_bytes": 648, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 8 - }, - "eth5": { - "rx_bytes": 4641, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 26, - "tx_bytes": 690, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 9 - } - }, - "memory_stats" : { - "stats" : { - "total_pgmajfault" : 0, - "cache" : 0, - "mapped_file" : 0, - "total_inactive_file" : 0, - "pgpgout" : 414, - "rss" : 6537216, - "total_mapped_file" : 0, - "writeback" : 0, - "unevictable" : 0, - "pgpgin" : 477, - "total_unevictable" : 0, - "pgmajfault" : 0, - "total_rss" : 6537216, - "total_rss_huge" : 6291456, - "total_writeback" : 0, - "total_inactive_anon" : 0, - "rss_huge" : 6291456, - "hierarchical_memory_limit" : 67108864, - "total_pgfault" : 964, - "total_active_file" : 0, - "active_anon" : 6537216, - "total_active_anon" : 6537216, - "total_pgpgout" : 414, - "total_cache" : 0, - "inactive_anon" : 0, - "active_file" : 0, - "pgfault" : 964, - "inactive_file" : 0, - "total_pgpgin" : 477 - }, - "max_usage" : 6651904, - "usage" : 6537216, - "failcnt" : 0, - "limit" : 67108864 - }, - "blkio_stats" : {}, - "cpu_stats" : { - "cpu_usage" : { - "percpu_usage" : [ - 8646879, - 24472255, - 36438778, - 30657443 - ], - "usage_in_usermode" : 50000000, - "total_usage" : 100215355, - "usage_in_kernelmode" : 30000000 - }, - "system_cpu_usage" : 739306590000000, - "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0} - }, - "precpu_stats" : { - "cpu_usage" : { - "percpu_usage" : [ - 8646879, - 24350896, - 36438778, - 30657443 - ], - "usage_in_usermode" : 50000000, - "total_usage" : 100093996, - "usage_in_kernelmode" : 30000000 - }, - "system_cpu_usage" : 9492140000000, - "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0} - } - } - -The precpu_stats is the cpu statistic of last read, which is used for calculating the cpu usage percent. It is not the exact copy of the “cpu_stats” field. - -**Query parameters**: - -- **stream** – 1/True/true or 0/False/false, pull stats once then disconnect. Default `true`. - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Resize a container TTY - -`POST /containers/(id or name)/resize` - -Resize the TTY for container with `id`. The unit is number of characters. You must restart the container for the resize to take effect. - -**Example request**: - - POST /containers/4fa6e0f0c678/resize?h=40&w=80 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Query parameters**: - -- **h** – height of `tty` session -- **w** – width - -**Status codes**: - -- **200** – no error -- **404** – No such container -- **500** – Cannot resize container - -### Start a container - -`POST /containers/(id or name)/start` - -Start the container `id` - -> **Note**: -> For backwards compatibility, this endpoint accepts a `HostConfig` as JSON-encoded request body. -> See [create a container](docker_remote_api_v1.22.md#create-a-container) for details. - -**Example request**: - - POST /containers/e90e34656806/start HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **detachKeys** – Override the key sequence for detaching a - container. Format is a single character `[a-Z]` or `ctrl-` - where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. - -**Status codes**: - -- **204** – no error -- **304** – container already started -- **404** – no such container -- **500** – server error - -### Stop a container - -`POST /containers/(id or name)/stop` - -Stop the container `id` - -**Example request**: - - POST /containers/e90e34656806/stop?t=5 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **t** – number of seconds to wait before killing the container - -**Status codes**: - -- **204** – no error -- **304** – container already stopped -- **404** – no such container -- **500** – server error - -### Restart a container - -`POST /containers/(id or name)/restart` - -Restart the container `id` - -**Example request**: - - POST /containers/e90e34656806/restart?t=5 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **t** – number of seconds to wait before killing the container - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Kill a container - -`POST /containers/(id or name)/kill` - -Kill the container `id` - -**Example request**: - - POST /containers/e90e34656806/kill HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **signal** - Signal to send to the container: integer or string like `SIGINT`. - When not set, `SIGKILL` is assumed and the call waits for the container to exit. - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Update a container - -`POST /containers/(id or name)/update` - -Update resource configs of one or more containers. - -**Example request**: - - POST /containers/e90e34656806/update HTTP/1.1 - Content-Type: application/json - - { - "BlkioWeight": 300, - "CpuShares": 512, - "CpuPeriod": 100000, - "CpuQuota": 50000, - "CpusetCpus": "0,1", - "CpusetMems": "0", - "Memory": 314572800, - "MemorySwap": 514288000, - "MemoryReservation": 209715200, - "KernelMemory": 52428800, - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Warnings": [] - } - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **404** – no such container -- **500** – server error - -### Rename a container - -`POST /containers/(id or name)/rename` - -Rename the container `id` to a `new_name` - -**Example request**: - - POST /containers/e90e34656806/rename?name=new_name HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **name** – new name for the container - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **409** - conflict name already assigned -- **500** – server error - -### Pause a container - -`POST /containers/(id or name)/pause` - -Pause the container `id` - -**Example request**: - - POST /containers/e90e34656806/pause HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Unpause a container - -`POST /containers/(id or name)/unpause` - -Unpause the container `id` - -**Example request**: - - POST /containers/e90e34656806/unpause HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Attach to a container - -`POST /containers/(id or name)/attach` - -Attach to the container `id` - -**Example request**: - - POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **detachKeys** – Override the key sequence for detaching a - container. Format is a single character `[a-Z]` or `ctrl-` - where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. -- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. -- **stream** – 1/True/true or 0/False/false, return stream. - Default `false`. -- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach - to `stdin`. Default `false`. -- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return - `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. -- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return - `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. - -**Status codes**: - -- **101** – no error, hints proxy about hijacking -- **200** – no error, no upgrade header found -- **400** – bad parameter -- **404** – no such container -- **409** - container is paused -- **500** – server error - -**Stream details**: - -When using the TTY setting is enabled in -[`POST /containers/create` -](docker_remote_api_v1.22.md#create-a-container), -the stream is the raw data from the process PTY and client's `stdin`. -When the TTY is disabled, then the stream is multiplexed to separate -`stdout` and `stderr`. - -The format is a **Header** and a **Payload** (frame). - -**HEADER** - -The header contains the information which the stream writes (`stdout` or -`stderr`). It also contains the size of the associated frame encoded in the -last four bytes (`uint32`). - -It is encoded on the first eight bytes like this: - - header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} - -`STREAM_TYPE` can be: - -- 0: `stdin` (is written on `stdout`) -- 1: `stdout` -- 2: `stderr` - -`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of -the `uint32` size encoded as big endian. - -**PAYLOAD** - -The payload is the raw stream. - -**IMPLEMENTATION** - -The simplest way to implement the Attach protocol is the following: - - 1. Read eight bytes. - 2. Choose `stdout` or `stderr` depending on the first byte. - 3. Extract the frame size from the last four bytes. - 4. Read the extracted size and output it on the correct output. - 5. Goto 1. - -### Attach to a container (websocket) - -`GET /containers/(id or name)/attach/ws` - -Attach to the container `id` via websocket - -Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455) - -**Example request** - - GET /containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1 - -**Example response** - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **detachKeys** – Override the key sequence for detaching a - container. Format is a single character `[a-Z]` or `ctrl-` - where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. -- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. -- **stream** – 1/True/true or 0/False/false, return stream. - Default `false`. -- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach - to `stdin`. Default `false`. -- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return - `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. -- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return - `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **404** – no such container -- **500** – server error - -### Wait a container - -`POST /containers/(id or name)/wait` - -Block until container `id` stops, then returns the exit code - -**Example request**: - - POST /containers/16253994b7c4/wait HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"StatusCode": 0} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Remove a container - -`DELETE /containers/(id or name)` - -Remove the container `id` from the filesystem - -**Example request**: - - DELETE /containers/16253994b7c4?v=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **v** – 1/True/true or 0/False/false, Remove the volumes - associated to the container. Default `false`. -- **force** - 1/True/true or 0/False/false, Kill then remove the container. - Default `false`. - -**Status codes**: - -- **204** – no error -- **400** – bad parameter -- **404** – no such container -- **409** – conflict -- **500** – server error - -### Copy files or folders from a container - -`POST /containers/(id or name)/copy` - -Copy files or folders of container `id` - -**Deprecated** in favor of the `archive` endpoint below. - -**Example request**: - - POST /containers/4fa6e0f0c678/copy HTTP/1.1 - Content-Type: application/json - - { - "Resource": "test.txt" - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Retrieving information about files and folders in a container - -`HEAD /containers/(id or name)/archive` - -See the description of the `X-Docker-Container-Path-Stat` header in the -following section. - -### Get an archive of a filesystem resource in a container - -`GET /containers/(id or name)/archive` - -Get a tar archive of a resource in the filesystem of container `id`. - -**Query parameters**: - -- **path** - resource in the container's filesystem to archive. Required. - - If not an absolute path, it is relative to the container's root directory. - The resource specified by **path** must exist. To assert that the resource - is expected to be a directory, **path** should end in `/` or `/.` - (assuming a path separator of `/`). If **path** ends in `/.` then this - indicates that only the contents of the **path** directory should be - copied. A symlink is always resolved to its target. - - > **Note**: It is not possible to copy certain system files such as resources - > under `/proc`, `/sys`, `/dev`, and mounts created by the user in the - > container. - -**Example request**: - - GET /containers/8cce319429b2/archive?path=/root HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - X-Docker-Container-Path-Stat: eyJuYW1lIjoicm9vdCIsInNpemUiOjQwOTYsIm1vZGUiOjIxNDc0ODQwOTYsIm10aW1lIjoiMjAxNC0wMi0yN1QyMDo1MToyM1oiLCJsaW5rVGFyZ2V0IjoiIn0= - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -On success, a response header `X-Docker-Container-Path-Stat` will be set to a -base64-encoded JSON object containing some filesystem header information about -the archived resource. The above example value would decode to the following -JSON object (whitespace added for readability): - -```json -{ - "name": "root", - "size": 4096, - "mode": 2147484096, - "mtime": "2014-02-27T20:51:23Z", - "linkTarget": "" -} -``` - -A `HEAD` request can also be made to this endpoint if only this information is -desired. - -**Status codes**: - -- **200** - success, returns archive of copied resource -- **400** - client error, bad parameter, details in JSON response body, one of: - - must specify path parameter (**path** cannot be empty) - - not a directory (**path** was asserted to be a directory but exists as a - file) -- **404** - client error, resource not found, one of: - – no such container (container `id` does not exist) - - no such file or directory (**path** does not exist) -- **500** - server error - -### Extract an archive of files or folders to a directory in a container - -`PUT /containers/(id or name)/archive` - -Upload a tar archive to be extracted to a path in the filesystem of container -`id`. - -**Query parameters**: - -- **path** - path to a directory in the container - to extract the archive's contents into. Required. - - If not an absolute path, it is relative to the container's root directory. - The **path** resource must exist. -- **noOverwriteDirNonDir** - If "1", "true", or "True" then it will be an error - if unpacking the given content would cause an existing directory to be - replaced with a non-directory and vice versa. - -**Example request**: - - PUT /containers/8cce319429b2/archive?path=/vol1 HTTP/1.1 - Content-Type: application/x-tar - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** – the content was extracted successfully -- **400** - client error, bad parameter, details in JSON response body, one of: - - must specify path parameter (**path** cannot be empty) - - not a directory (**path** should be a directory but exists as a file) - - unable to overwrite existing directory with non-directory - (if **noOverwriteDirNonDir**) - - unable to overwrite existing non-directory with directory - (if **noOverwriteDirNonDir**) -- **403** - client error, permission denied, the volume - or container rootfs is marked as read-only. -- **404** - client error, resource not found, one of: - – no such container (container `id` does not exist) - - no such file or directory (**path** resource does not exist) -- **500** – server error - -## 2.2 Images - -### List Images - -`GET /images/json` - -**Example request**: - - GET /images/json?all=0 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "RepoTags": [ - "ubuntu:12.04", - "ubuntu:precise", - "ubuntu:latest" - ], - "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c", - "Created": 1365714795, - "Size": 131506275, - "VirtualSize": 131506275, - "Labels": {} - }, - { - "RepoTags": [ - "ubuntu:12.10", - "ubuntu:quantal" - ], - "ParentId": "27cf784147099545", - "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", - "Created": 1364102658, - "Size": 24653, - "VirtualSize": 180116135, - "Labels": { - "com.example.version": "v1" - } - } - ] - -**Example request, with digest information**: - - GET /images/json?digests=1 HTTP/1.1 - -**Example response, with digest information**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Created": 1420064636, - "Id": "4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125", - "ParentId": "ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2", - "RepoDigests": [ - "localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" - ], - "RepoTags": [ - "localhost:5000/test/busybox:latest", - "playdate:latest" - ], - "Size": 0, - "VirtualSize": 2429728, - "Labels": {} - } - ] - -The response shows a single image `Id` associated with two repositories -(`RepoTags`): `localhost:5000/test/busybox`: and `playdate`. A caller can use -either of the `RepoTags` values `localhost:5000/test/busybox:latest` or -`playdate:latest` to reference the image. - -You can also use `RepoDigests` values to reference an image. In this response, -the array has only one reference and that is to the -`localhost:5000/test/busybox` repository; the `playdate` repository has no -digest. You can reference this digest using the value: -`localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d...` - -See the `docker run` and `docker build` commands for examples of digest and tag -references on the command line. - -**Query parameters**: - -- **all** – 1/True/true or 0/False/false, default false -- **filters** – a JSON encoded value of the filters (a map[string][]string) to process on the images list. Available filters: - - `dangling=true` - - `label=key` or `label="key=value"` of an image label -- **filter** - only return images with the specified name - -### Build image from a Dockerfile - -`POST /build` - -Build an image from a Dockerfile - -**Example request**: - - POST /build HTTP/1.1 - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"stream": "Step 1..."} - {"stream": "..."} - {"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}} - -The input stream must be a `tar` archive compressed with one of the -following algorithms: `identity` (no compression), `gzip`, `bzip2`, `xz`. - -The archive must include a build instructions file, typically called -`Dockerfile` at the archive's root. The `dockerfile` parameter may be -used to specify a different build instructions file. To do this, its value must be -the path to the alternate build instructions file to use. - -The archive may include any number of other files, -which are accessible in the build context (See the [*ADD build -command*](../../reference/builder.md#add)). - -The build is canceled if the client drops the connection by quitting -or being killed. - -**Query parameters**: - -- **dockerfile** - Path within the build context to the `Dockerfile`. This is - ignored if `remote` is specified and points to an external `Dockerfile`. -- **t** – A name and optional tag to apply to the image in the `name:tag` format. - If you omit the `tag` the default `latest` value is assumed. - You can provide one or more `t` parameters. -- **remote** – A Git repository URI or HTTP/HTTPS context URI. If the - URI points to a single text file, the file's contents are placed into - a file called `Dockerfile` and the image is built from that file. If - the URI points to a tarball, the file is downloaded by the daemon and - the contents therein used as the context for the build. If the URI - points to a tarball and the `dockerfile` parameter is also specified, - there must be a file with the corresponding path inside the tarball. -- **q** – Suppress verbose build output. -- **nocache** – Do not use the cache when building the image. -- **pull** - Attempt to pull the image even if an older image exists locally. -- **rm** - Remove intermediate containers after a successful build (default behavior). -- **forcerm** - Always remove intermediate containers (includes `rm`). -- **memory** - Set memory limit for build. -- **memswap** - Total memory (memory + swap), `-1` to enable unlimited swap. -- **cpushares** - CPU shares (relative weight). -- **cpusetcpus** - CPUs in which to allow execution (e.g., `0-3`, `0,1`). -- **cpuperiod** - The length of a CPU period in microseconds. -- **cpuquota** - Microseconds of CPU time that the container can get in a CPU period. -- **buildargs** – JSON map of string pairs for build-time variables. Users pass - these values at build-time. Docker uses the `buildargs` as the environment - context for command(s) run via the Dockerfile's `RUN` instruction or for - variable expansion in other Dockerfile instructions. This is not meant for - passing secret values. [Read more about the buildargs instruction](../../reference/builder.md#arg) -- **shmsize** - Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB. - -**Request Headers**: - -- **Content-type** – Set to `"application/tar"`. -- **X-Registry-Config** – A base64-url-safe-encoded Registry Auth Config JSON - object with the following structure: - - { - "docker.example.com": { - "username": "janedoe", - "password": "hunter2" - }, - "https://index.docker.io/v1/": { - "username": "mobydock", - "password": "conta1n3rize14" - } - } - - This object maps the hostname of a registry to an object containing the - "username" and "password" for that registry. Multiple registries may - be specified as the build may be based on an image requiring - authentication to pull from any arbitrary registry. Only the registry - domain name (and port if not the default "443") are required. However - (for legacy reasons) the "official" Docker, Inc. hosted registry must - be specified with both a "https://" prefix and a "/v1/" suffix even - though Docker will prefer to use the v2 registry API. - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Create an image - -`POST /images/create` - -Create an image either by pulling it from the registry or by importing it - -**Example request**: - - POST /images/create?fromImage=busybox&tag=latest HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "Pulling..."} - {"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}} - {"error": "Invalid..."} - ... - -When using this endpoint to pull an image from the registry, the -`X-Registry-Auth` header can be used to include -a base64-encoded AuthConfig object. - -**Query parameters**: - -- **fromImage** – Name of the image to pull. The name may include a tag or - digest. This parameter may only be used when pulling an image. - The pull is cancelled if the HTTP connection is closed. -- **fromSrc** – Source to import. The value may be a URL from which the image - can be retrieved or `-` to read the image from the request body. - This parameter may only be used when importing an image. -- **repo** – Repository name given to an image when it is imported. - The repo may include a tag. This parameter may only be used when importing - an image. -- **tag** – Tag or digest. If empty when pulling an image, this causes all tags - for the given image to be pulled. - -**Request Headers**: - -- **X-Registry-Auth** – base64-encoded AuthConfig object, containing either login information, or a token - - Credential based login: - - ``` - { - "username": "jdoe", - "password": "secret", - "email": "jdoe@acme.com" - } - ``` - - - Token based login: - - ``` - { - "registrytoken": "9cbaf023786cd7..." - } - ``` - -**Status codes**: - -- **200** – no error -- **500** – server error - - - -### Inspect an image - -`GET /images/(name)/json` - -Return low-level information on the image `name` - -**Example request**: - - GET /images/example/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Id" : "85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c", - "Container" : "cb91e48a60d01f1e27028b4fc6819f4f290b3cf12496c8176ec714d0d390984a", - "Comment" : "", - "Os" : "linux", - "Architecture" : "amd64", - "Parent" : "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", - "ContainerConfig" : { - "Tty" : false, - "Hostname" : "e611e15f9c9d", - "Volumes" : null, - "Domainname" : "", - "AttachStdout" : false, - "PublishService" : "", - "AttachStdin" : false, - "OpenStdin" : false, - "StdinOnce" : false, - "NetworkDisabled" : false, - "OnBuild" : [], - "Image" : "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", - "User" : "", - "WorkingDir" : "", - "Entrypoint" : null, - "MacAddress" : "", - "AttachStderr" : false, - "Labels" : { - "com.example.license" : "GPL", - "com.example.version" : "1.0", - "com.example.vendor" : "Acme" - }, - "Env" : [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "ExposedPorts" : null, - "Cmd" : [ - "/bin/sh", - "-c", - "#(nop) LABEL com.example.vendor=Acme com.example.license=GPL com.example.version=1.0" - ] - }, - "DockerVersion" : "1.9.0-dev", - "VirtualSize" : 188359297, - "Size" : 0, - "Author" : "", - "Created" : "2015-09-10T08:30:53.26995814Z", - "GraphDriver" : { - "Name" : "aufs", - "Data" : null - }, - "RepoDigests" : [ - "localhost:5000/test/busybox/example@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" - ], - "RepoTags" : [ - "example:1.0", - "example:latest", - "example:stable" - ], - "Config" : { - "Image" : "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", - "NetworkDisabled" : false, - "OnBuild" : [], - "StdinOnce" : false, - "PublishService" : "", - "AttachStdin" : false, - "OpenStdin" : false, - "Domainname" : "", - "AttachStdout" : false, - "Tty" : false, - "Hostname" : "e611e15f9c9d", - "Volumes" : null, - "Cmd" : [ - "/bin/bash" - ], - "ExposedPorts" : null, - "Env" : [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "Labels" : { - "com.example.vendor" : "Acme", - "com.example.version" : "1.0", - "com.example.license" : "GPL" - }, - "Entrypoint" : null, - "MacAddress" : "", - "AttachStderr" : false, - "WorkingDir" : "", - "User" : "" - } - } - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Get the history of an image - -`GET /images/(name)/history` - -Return the history of the image `name` - -**Example request**: - - GET /images/ubuntu/history HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", - "Created": 1398108230, - "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", - "Tags": [ - "ubuntu:lucid", - "ubuntu:10.04" - ], - "Size": 182964289, - "Comment": "" - }, - { - "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", - "Created": 1398108222, - "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", - "Tags": null, - "Size": 0, - "Comment": "" - }, - { - "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", - "Created": 1371157430, - "CreatedBy": "", - "Tags": [ - "scratch12:latest", - "scratch:latest" - ], - "Size": 0, - "Comment": "Imported from -" - } - ] - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Push an image on the registry - -`POST /images/(name)/push` - -Push the image `name` on the registry - -**Example request**: - - POST /images/test/push HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "Pushing..."} - {"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}} - {"error": "Invalid..."} - ... - -If you wish to push an image on to a private registry, that image must already have a tag -into a repository which references that registry `hostname` and `port`. This repository name should -then be used in the URL. This duplicates the command line's flow. - -The push is cancelled if the HTTP connection is closed. - -**Example request**: - - POST /images/registry.acme.com:5000/test/push HTTP/1.1 - - -**Query parameters**: - -- **tag** – The tag to associate with the image on the registry. This is optional. - -**Request Headers**: - -- **X-Registry-Auth** – base64-encoded AuthConfig object, containing either login information, or a token - - Credential based login: - - ``` - { - "username": "jdoe", - "password": "secret", - "email": "jdoe@acme.com", - } - ``` - - - Token based login: - - ``` - { - "registrytoken": "9cbaf023786cd7..." - } - ``` - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Tag an image into a repository - -`POST /images/(name)/tag` - -Tag the image `name` into a repository - -**Example request**: - - POST /images/test/tag?repo=myrepo&force=0&tag=v42 HTTP/1.1 - -**Example response**: - - HTTP/1.1 201 Created - -**Query parameters**: - -- **repo** – The repository to tag in -- **force** – 1/True/true or 0/False/false, default false -- **tag** - The new tag name - -**Status codes**: - -- **201** – no error -- **400** – bad parameter -- **404** – no such image -- **409** – conflict -- **500** – server error - -### Remove an image - -`DELETE /images/(name)` - -Remove the image `name` from the filesystem - -**Example request**: - - DELETE /images/test HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-type: application/json - - [ - {"Untagged": "3e2f21a89f"}, - {"Deleted": "3e2f21a89f"}, - {"Deleted": "53b4f83ac9"} - ] - -**Query parameters**: - -- **force** – 1/True/true or 0/False/false, default false -- **noprune** – 1/True/true or 0/False/false, default false - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **409** – conflict -- **500** – server error - -### Search images - -`GET /images/search` - -Search for an image on [Docker Hub](https://hub.docker.com). - -> **Note**: -> The response keys have changed from API v1.6 to reflect the JSON -> sent by the registry server to the docker daemon's request. - -**Example request**: - - GET /images/search?term=sshd HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "wma55/u1210sshd", - "star_count": 0 - }, - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "jdswinbank/sshd", - "star_count": 0 - }, - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "vgauthier/sshd", - "star_count": 0 - } - ... - ] - -**Query parameters**: - -- **term** – term to search - -**Status codes**: - -- **200** – no error -- **500** – server error - -## 2.3 Misc - -### Check auth configuration - -`POST /auth` - -Get the default username and email - -**Example request**: - - POST /auth HTTP/1.1 - Content-Type: application/json - - { - "username": "hannibal", - "password": "xxxx", - "email": "hannibal@a-team.com", - "serveraddress": "https://index.docker.io/v1/" - } - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** – no error -- **204** – no error -- **500** – server error - -### Display system-wide information - -`GET /info` - -Display system-wide information - -**Example request**: - - GET /info HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Architecture": "x86_64", - "ClusterStore": "etcd://localhost:2379", - "Containers": 11, - "ContainersRunning": 7, - "ContainersStopped": 3, - "ContainersPaused": 1, - "CpuCfsPeriod": true, - "CpuCfsQuota": true, - "Debug": false, - "DockerRootDir": "/var/lib/docker", - "Driver": "btrfs", - "DriverStatus": [[""]], - "ExecutionDriver": "native-0.1", - "ExperimentalBuild": false, - "HttpProxy": "http://test:test@localhost:8080", - "HttpsProxy": "https://test:test@localhost:8080", - "ID": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS", - "IPv4Forwarding": true, - "Images": 16, - "IndexServerAddress": "https://index.docker.io/v1/", - "InitPath": "/usr/bin/docker", - "InitSha1": "", - "KernelVersion": "3.12.0-1-amd64", - "Labels": [ - "storage=ssd" - ], - "MemTotal": 2099236864, - "MemoryLimit": true, - "NCPU": 1, - "NEventsListener": 0, - "NFd": 11, - "NGoroutines": 21, - "Name": "prod-server-42", - "NoProxy": "9.81.1.160", - "OomKillDisable": true, - "OSType": "linux", - "OperatingSystem": "Boot2Docker", - "Plugins": { - "Volume": [ - "local" - ], - "Network": [ - "null", - "host", - "bridge" - ] - }, - "RegistryConfig": { - "IndexConfigs": { - "docker.io": { - "Mirrors": null, - "Name": "docker.io", - "Official": true, - "Secure": true - } - }, - "InsecureRegistryCIDRs": [ - "127.0.0.0/8" - ] - }, - "ServerVersion": "1.9.0", - "SwapLimit": false, - "SystemStatus": [["State", "Healthy"]], - "SystemTime": "2015-03-10T11:11:23.730591467-07:00" - } - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Show the docker version information - -`GET /version` - -Show the docker version information - -**Example request**: - - GET /version HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Version": "1.10.0", - "Os": "linux", - "KernelVersion": "3.19.0-23-generic", - "GoVersion": "go1.4.2", - "GitCommit": "e75da4b", - "Arch": "amd64", - "ApiVersion": "1.22", - "BuildTime": "2015-12-01T07:09:13.444803460+00:00", - "Experimental": true - } - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Ping the docker server - -`GET /_ping` - -Ping the docker server - -**Example request**: - - GET /_ping HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: text/plain - - OK - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Create a new image from a container's changes - -`POST /commit` - -Create a new image from a container's changes - -**Example request**: - - POST /commit?container=44c004db4b17&comment=message&repo=myrepo HTTP/1.1 - Content-Type: application/json - - { - "Hostname": "", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": true, - "AttachStderr": true, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": null, - "Cmd": [ - "date" - ], - "Mounts": [ - { - "Source": "/data", - "Destination": "/data", - "Mode": "ro,Z", - "RW": false - } - ], - "Labels": { - "key1": "value1", - "key2": "value2" - }, - "WorkingDir": "", - "NetworkDisabled": false, - "ExposedPorts": { - "22/tcp": {} - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - {"Id": "596069db4bf5"} - -**JSON parameters**: - -- **config** - the container's configuration - -**Query parameters**: - -- **container** – source container -- **repo** – repository -- **tag** – tag -- **comment** – commit message -- **author** – author (e.g., "John Hannibal Smith - <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>") -- **pause** – 1/True/true or 0/False/false, whether to pause the container before committing -- **changes** – Dockerfile instructions to apply while committing - -**Status codes**: - -- **201** – no error -- **404** – no such container -- **500** – server error - -### Monitor Docker's events - -`GET /events` - -Get container events from docker, in real time via streaming. - -Docker containers report the following events: - - attach, commit, copy, create, destroy, die, exec_create, exec_start, export, kill, oom, pause, rename, resize, restart, start, stop, top, unpause, update - -Docker images report the following events: - - delete, import, pull, push, tag, untag - -Docker volumes report the following events: - - create, mount, unmount, destroy - -Docker networks report the following events: - - create, connect, disconnect, destroy - -**Example request**: - - GET /events?since=1374067924 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - Server: Docker/1.10.0 (linux) - Date: Fri, 29 Apr 2016 15:18:06 GMT - Transfer-Encoding: chunked - - { - "status": "pull", - "id": "alpine:latest", - "Type": "image", - "Action": "pull", - "Actor": { - "ID": "alpine:latest", - "Attributes": { - "name": "alpine" - } - }, - "time": 1461943101, - "timeNano": 1461943101301854122 - } - { - "status": "create", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "create", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943101, - "timeNano": 1461943101381709551 - } - { - "status": "attach", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "attach", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943101, - "timeNano": 1461943101383858412 - } - { - "Type": "network", - "Action": "connect", - "Actor": { - "ID": "7dc8ac97d5d29ef6c31b6052f3938c1e8f2749abbd17d1bd1febf2608db1b474", - "Attributes": { - "container": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "name": "bridge", - "type": "bridge" - } - }, - "time": 1461943101, - "timeNano": 1461943101394865557 - } - { - "status": "start", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "start", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943101, - "timeNano": 1461943101607533796 - } - { - "status": "resize", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "resize", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "height": "46", - "image": "alpine", - "name": "my-container", - "width": "204" - } - }, - "time": 1461943101, - "timeNano": 1461943101610269268 - } - { - "status": "die", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "die", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "exitCode": "0", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943105, - "timeNano": 1461943105079144137 - } - { - "Type": "network", - "Action": "disconnect", - "Actor": { - "ID": "7dc8ac97d5d29ef6c31b6052f3938c1e8f2749abbd17d1bd1febf2608db1b474", - "Attributes": { - "container": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "name": "bridge", - "type": "bridge" - } - }, - "time": 1461943105, - "timeNano": 1461943105230860245 - } - { - "status": "destroy", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "destroy", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943105, - "timeNano": 1461943105338056026 - } - -**Query parameters**: - -- **since** – Timestamp. Show all events created since timestamp and then stream -- **until** – Timestamp. Show events created until given timestamp and stop streaming -- **filters** – A json encoded value of the filters (a map[string][]string) to process on the event list. Available filters: - - `container=`; -- container to filter - - `event=`; -- event to filter - - `image=`; -- image to filter - - `label=`; -- image and container label to filter - - `type=`; -- either `container` or `image` or `volume` or `network` - - `volume=`; -- volume to filter - - `network=`; -- network to filter - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Get a tarball containing all images in a repository - -`GET /images/(name)/get` - -Get a tarball containing all images and metadata for the repository specified -by `name`. - -If `name` is a specific name and tag (e.g. ubuntu:latest), then only that image -(and its parents) are returned. If `name` is an image ID, similarly only that -image (and its parents) are returned, but with the exclusion of the -'repositories' file in the tarball, as there were no image names referenced. - -See the [image tarball format](docker_remote_api_v1.22.md#image-tarball-format) for more details. - -**Example request** - - GET /images/ubuntu/get - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - Binary data stream - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Get a tarball containing all images - -`GET /images/get` - -Get a tarball containing all images and metadata for one or more repositories. - -For each value of the `names` parameter: if it is a specific name and tag (e.g. -`ubuntu:latest`), then only that image (and its parents) are returned; if it is -an image ID, similarly only that image (and its parents) are returned and there -would be no names referenced in the 'repositories' file for this image ID. - -See the [image tarball format](docker_remote_api_v1.22.md#image-tarball-format) for more details. - -**Example request** - - GET /images/get?names=myname%2Fmyapp%3Alatest&names=busybox - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - Binary data stream - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Load a tarball with a set of images and tags into docker - -`POST /images/load` - -Load a set of images and tags into a Docker repository. -See the [image tarball format](docker_remote_api_v1.22.md#image-tarball-format) for more details. - -**Example request** - - POST /images/load - Content-Type: application/x-tar - - Tarball in body - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Image tarball format - -An image tarball contains one directory per image layer (named using its long ID), -each containing these files: - -- `VERSION`: currently `1.0` - the file format version -- `json`: detailed layer information, similar to `docker inspect layer_id` -- `layer.tar`: A tarfile containing the filesystem changes in this layer - -The `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories -for storing attribute changes and deletions. - -If the tarball defines a repository, the tarball should also include a `repositories` file at -the root that contains a list of repository and tag names mapped to layer IDs. - -``` -{"hello-world": - {"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"} -} -``` - -### Exec Create - -`POST /containers/(id or name)/exec` - -Sets up an exec instance in a running container `id` - -**Example request**: - - POST /containers/e90e34656806/exec HTTP/1.1 - Content-Type: application/json - - { - "AttachStdin": true, - "AttachStdout": true, - "AttachStderr": true, - "Cmd": ["sh"], - "DetachKeys": "ctrl-p,ctrl-q", - "Privileged": true, - "Tty": true, - "User": "123:456" - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Id": "f90e34656806", - "Warnings":[] - } - -**JSON parameters**: - -- **AttachStdin** - Boolean value, attaches to `stdin` of the `exec` command. -- **AttachStdout** - Boolean value, attaches to `stdout` of the `exec` command. -- **AttachStderr** - Boolean value, attaches to `stderr` of the `exec` command. -- **DetachKeys** – Override the key sequence for detaching a - container. Format is a single character `[a-Z]` or `ctrl-` - where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. -- **Tty** - Boolean value to allocate a pseudo-TTY. -- **Cmd** - Command to run specified as a string or an array of strings. -- **Privileged** - Boolean value, runs the exec process with extended privileges. -- **User** - A string value specifying the user, and optionally, group to run - the exec process inside the container. Format is one of: `"user"`, - `"user:group"`, `"uid"`, or `"uid:gid"`. - -**Status codes**: - -- **201** – no error -- **404** – no such container -- **409** - container is paused -- **500** - server error - -### Exec Start - -`POST /exec/(id)/start` - -Starts a previously set up `exec` instance `id`. If `detach` is true, this API -returns after starting the `exec` command. Otherwise, this API sets up an -interactive session with the `exec` command. - -**Example request**: - - POST /exec/e90e34656806/start HTTP/1.1 - Content-Type: application/json - - { - "Detach": false, - "Tty": false - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/vnd.docker.raw-stream - - {% raw %} - {{ STREAM }} - {% endraw %} - -**JSON parameters**: - -- **Detach** - Detach from the `exec` command. -- **Tty** - Boolean value to allocate a pseudo-TTY. - -**Status codes**: - -- **200** – no error -- **404** – no such exec instance -- **409** - container is paused - -**Stream details**: - -Similar to the stream behavior of `POST /containers/(id or name)/attach` API - -### Exec Resize - -`POST /exec/(id)/resize` - -Resizes the `tty` session used by the `exec` command `id`. The unit is number of characters. -This API is valid only if `tty` was specified as part of creating and starting the `exec` command. - -**Example request**: - - POST /exec/e90e34656806/resize?h=40&w=80 HTTP/1.1 - Content-Type: text/plain - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: text/plain - -**Query parameters**: - -- **h** – height of `tty` session -- **w** – width - -**Status codes**: - -- **201** – no error -- **404** – no such exec instance - -### Exec Inspect - -`GET /exec/(id)/json` - -Return low-level information about the `exec` command `id`. - -**Example request**: - - GET /exec/11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "CanRemove": false, - "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", - "DetachKeys": "", - "ExitCode": 2, - "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", - "OpenStderr": true, - "OpenStdin": true, - "OpenStdout": true, - "ProcessConfig": { - "arguments": [ - "-c", - "exit 2" - ], - "entrypoint": "sh", - "privileged": false, - "tty": true, - "user": "1000" - }, - "Running": false - } - -**Status codes**: - -- **200** – no error -- **404** – no such exec instance -- **500** - server error - -## 2.4 Volumes - -### List volumes - -`GET /volumes` - -**Example request**: - - GET /volumes HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Volumes": [ - { - "Name": "tardis", - "Driver": "local", - "Mountpoint": "/var/lib/docker/volumes/tardis" - } - ], - "Warnings": [] - } - -**Query parameters**: - -- **filters** - JSON encoded value of the filters (a `map[string][]string`) to process on the volumes list. There is one available filter: `dangling=true` - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Create a volume - -`POST /volumes/create` - -Create a volume - -**Example request**: - - POST /volumes/create HTTP/1.1 - Content-Type: application/json - - { - "Name": "tardis" - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Name": "tardis", - "Driver": "local", - "Mountpoint": "/var/lib/docker/volumes/tardis" - } - -**Status codes**: - -- **201** - no error -- **500** - server error - -**JSON parameters**: - -- **Name** - The new volume's name. If not specified, Docker generates a name. -- **Driver** - Name of the volume driver to use. Defaults to `local` for the name. -- **DriverOpts** - A mapping of driver options and values. These options are - passed directly to the driver and are driver specific. - -### Inspect a volume - -`GET /volumes/(name)` - -Return low-level information on the volume `name` - -**Example request**: - - GET /volumes/tardis - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Name": "tardis", - "Driver": "local", - "Mountpoint": "/var/lib/docker/volumes/tardis" - } - -**Status codes**: - -- **200** - no error -- **404** - no such volume -- **500** - server error - -### Remove a volume - -`DELETE /volumes/(name)` - -Instruct the driver to remove the volume (`name`). - -**Example request**: - - DELETE /volumes/tardis HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** - no error -- **404** - no such volume or volume driver -- **409** - volume is in use and cannot be removed -- **500** - server error - -## 2.5 Networks - -### List networks - -`GET /networks` - -**Example request**: - - GET /networks?filters={"type":{"custom":true}} HTTP/1.1 - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Type: application/json - -[ - { - "Name": "bridge", - "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", - "Scope": "local", - "Driver": "bridge", - "IPAM": { - "Driver": "default", - "Config": [ - { - "Subnet": "172.17.0.0/16" - } - ] - }, - "Containers": { - "39b69226f9d79f5634485fb236a23b2fe4e96a0a94128390a7fbbcc167065867": { - "EndpointID": "ed2419a97c1d9954d05b46e462e7002ea552f216e9b136b80a7db8d98b442eda", - "MacAddress": "02:42:ac:11:00:02", - "IPv4Address": "172.17.0.2/16", - "IPv6Address": "" - } - }, - "Options": { - "com.docker.network.bridge.default_bridge": "true", - "com.docker.network.bridge.enable_icc": "true", - "com.docker.network.bridge.enable_ip_masquerade": "true", - "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", - "com.docker.network.bridge.name": "docker0", - "com.docker.network.driver.mtu": "1500" - } - }, - { - "Name": "none", - "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", - "Scope": "local", - "Driver": "null", - "IPAM": { - "Driver": "default", - "Config": [] - }, - "Containers": {}, - "Options": {} - }, - { - "Name": "host", - "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", - "Scope": "local", - "Driver": "host", - "IPAM": { - "Driver": "default", - "Config": [] - }, - "Containers": {}, - "Options": {} - } -] -``` - -**Query parameters**: - -- **filters** - JSON encoded network list filter. The filter value is one of: - - `id=` Matches all or part of a network id. - - `name=` Matches all or part of a network name. - - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks. - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Inspect network - -`GET /networks/` - -**Example request**: - - GET /networks/7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99 HTTP/1.1 - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Type: application/json - -{ - "Name": "net01", - "Id": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99", - "Scope": "local", - "Driver": "bridge", - "IPAM": { - "Driver": "default", - "Config": [ - { - "Subnet": "172.19.0.0/16", - "Gateway": "172.19.0.1/16" - } - ], - "Options": { - "foo": "bar" - } - }, - "Containers": { - "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { - "Name": "test", - "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", - "MacAddress": "02:42:ac:13:00:02", - "IPv4Address": "172.19.0.2/16", - "IPv6Address": "" - } - }, - "Options": { - "com.docker.network.bridge.default_bridge": "true", - "com.docker.network.bridge.enable_icc": "true", - "com.docker.network.bridge.enable_ip_masquerade": "true", - "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", - "com.docker.network.bridge.name": "docker0", - "com.docker.network.driver.mtu": "1500" - } -} -``` - -**Status codes**: - -- **200** - no error -- **404** - network not found - -### Create a network - -`POST /networks/create` - -Create a network - -**Example request**: - -``` -POST /networks/create HTTP/1.1 -Content-Type: application/json - -{ - "Name":"isolated_nw", - "Driver":"bridge", - "IPAM":{ - "Config":[ - { - "Subnet":"172.20.0.0/16", - "IPRange":"172.20.10.0/24", - "Gateway":"172.20.10.11" - }, - { - "Subnet":"2001:db8:abcd::/64", - "Gateway":"2001:db8:abcd::1011" - } - ], - "Options": { - "foo": "bar" - } - }, - "Internal":true -} -``` - -**Example response**: - -``` -HTTP/1.1 201 Created -Content-Type: application/json - -{ - "Id": "22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30", - "Warning": "" -} -``` - -**Status codes**: - -- **201** - no error -- **404** - plugin not found -- **500** - server error - -**JSON parameters**: - -- **Name** - The new network's name. this is a mandatory field -- **Driver** - Name of the network driver plugin to use. Defaults to `bridge` driver -- **IPAM** - Optional custom IP scheme for the network -- **Options** - Network specific options to be used by the drivers -- **CheckDuplicate** - Requests daemon to check for networks with same name - -### Connect a container to a network - -`POST /networks/(id)/connect` - -Connect a container to a network - -**Example request**: - -``` -POST /networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30/connect HTTP/1.1 -Content-Type: application/json - -{ - "Container":"3613f73ba0e4", - "EndpointConfig": { - "IPAMConfig": { - "IPv4Address":"172.24.56.89", - "IPv6Address":"2001:db8::5689" - } - } -} -``` - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** - no error -- **404** - network or container is not found -- **500** - Internal Server Error - -**JSON parameters**: - -- **container** - container-id/name to be connected to the network - -### Disconnect a container from a network - -`POST /networks/(id)/disconnect` - -Disconnect a container from a network - -**Example request**: - -``` -POST /networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30/disconnect HTTP/1.1 -Content-Type: application/json - -{ - "Container":"3613f73ba0e4", - "Force":false -} -``` - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** - no error -- **404** - network or container not found -- **500** - Internal Server Error - -**JSON parameters**: - -- **Container** - container-id/name to be disconnected from a network -- **Force** - Force the container to disconnect from a network - -### Remove a network - -`DELETE /networks/(id)` - -Instruct the driver to remove the network (`id`). - -**Example request**: - - DELETE /networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** - no error -- **404** - no such network -- **500** - server error - -# 3. Going further - -## 3.1 Inside `docker run` - -As an example, the `docker run` command line makes the following API calls: - -- Create the container - -- If the status code is 404, it means the image doesn't exist: - - Try to pull it. - - Then, retry to create the container. - -- Start the container. - -- If you are not in detached mode: -- Attach to the container, using `logs=1` (to have `stdout` and - `stderr` from the container's start) and `stream=1` - -- If in detached mode or only `stdin` is attached, display the container's id. - -## 3.2 Hijacking - -In this version of the API, `/attach`, uses hijacking to transport `stdin`, -`stdout`, and `stderr` on the same socket. - -To hint potential proxies about connection hijacking, Docker client sends -connection upgrade headers similarly to websocket. - - Upgrade: tcp - Connection: Upgrade - -When Docker daemon detects the `Upgrade` header, it switches its status code -from **200 OK** to **101 UPGRADED** and resends the same headers. - - -## 3.3 CORS Requests - -To set cross origin requests to the remote api please give values to -`--api-cors-header` when running Docker in daemon mode. Set * (asterisk) allows all, -default or blank means CORS disabled - - $ dockerd -H="192.168.1.9:2375" --api-cors-header="http://foo.bar" diff --git a/engine/reference/api/docker_remote_api_v1.23.md b/engine/reference/api/docker_remote_api_v1.23.md deleted file mode 100644 index 1c53164055..0000000000 --- a/engine/reference/api/docker_remote_api_v1.23.md +++ /dev/null @@ -1,3403 +0,0 @@ ---- -redirect_from: - - /reference/api/docker_remote_api_v1.23/ -description: API Documentation for Docker -keywords: -- API, Docker, rcli, REST, documentation -title: Docker Remote API v1.23 ---- - -## 1. Brief introduction - - - The Remote API has replaced `rcli`. - - The daemon listens on `unix:///var/run/docker.sock` but you can - [Bind Docker to another host/port or a Unix socket](../commandline/dockerd.md#bind-docker-to-another-host-port-or-a-unix-socket). - - The API tends to be REST. However, for some complex commands, like `attach` - or `pull`, the HTTP connection is hijacked to transport `stdout`, - `stdin` and `stderr`. - - When the client API version is newer than the daemon's, these calls return an HTTP - `400 Bad Request` error message. - -# 2. Endpoints - -## 2.1 Containers - -### List containers - -`GET /containers/json` - -List containers - -**Example request**: - - GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Id": "8dfafdbc3a40", - "Names":["/boring_feynman"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 1", - "Created": 1367854155, - "State": "Exited", - "Status": "Exit 0", - "Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}], - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "SizeRw": 12288, - "SizeRootFs": 0, - "HostConfig": { - "NetworkMode": "default" - }, - "NetworkSettings": { - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "2cdc4edb1ded3631c81f57966563e5c8525b81121bb3706a9a9a3ae102711f3f", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.2", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:02" - } - } - }, - "Mounts": [ - { - "Name": "fac362...80535", - "Source": "/data", - "Destination": "/data", - "Driver": "local", - "Mode": "ro,Z", - "RW": false, - "Propagation": "" - } - ] - }, - { - "Id": "9cd87474be90", - "Names":["/coolName"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 222222", - "Created": 1367854155, - "State": "Exited", - "Status": "Exit 0", - "Ports": [], - "Labels": {}, - "SizeRw": 12288, - "SizeRootFs": 0, - "HostConfig": { - "NetworkMode": "default" - }, - "NetworkSettings": { - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "88eaed7b37b38c2a3f0c4bc796494fdf51b270c2d22656412a2ca5d559a64d7a", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.8", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:08" - } - } - }, - "Mounts": [] - }, - { - "Id": "3176a2479c92", - "Names":["/sleepy_dog"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 3333333333333333", - "Created": 1367854154, - "State": "Exited", - "Status": "Exit 0", - "Ports":[], - "Labels": {}, - "SizeRw":12288, - "SizeRootFs":0, - "HostConfig": { - "NetworkMode": "default" - }, - "NetworkSettings": { - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "8b27c041c30326d59cd6e6f510d4f8d1d570a228466f956edf7815508f78e30d", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.6", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:06" - } - } - }, - "Mounts": [] - }, - { - "Id": "4cb07b47f9fb", - "Names":["/running_cat"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 444444444444444444444444444444444", - "Created": 1367854152, - "State": "Exited", - "Status": "Exit 0", - "Ports": [], - "Labels": {}, - "SizeRw": 12288, - "SizeRootFs": 0, - "HostConfig": { - "NetworkMode": "default" - }, - "NetworkSettings": { - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "d91c7b2f0644403d7ef3095985ea0e2370325cd2332ff3a3225c4247328e66e9", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.5", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:05" - } - } - }, - "Mounts": [] - } - ] - -**Query parameters**: - -- **all** – 1/True/true or 0/False/false, Show all containers. - Only running containers are shown by default (i.e., this defaults to false) -- **limit** – Show `limit` last created - containers, include non-running ones. -- **since** – Show only containers created since Id, include - non-running ones. -- **before** – Show only containers created before Id, include - non-running ones. -- **size** – 1/True/true or 0/False/false, Show the containers - sizes -- **filters** - a JSON encoded value of the filters (a `map[string][]string`) to process on the containers list. Available filters: - - `exited=`; -- containers with exit code of `` ; - - `status=`(`created`|`restarting`|`running`|`paused`|`exited`|`dead`) - - `label=key` or `label="key=value"` of a container label - - `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only) - - `ancestor`=(`[:]`, `` or ``) - - `before`=(`` or ``) - - `since`=(`` or ``) - - `volume`=(`` or ``) - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **500** – server error - -### Create a container - -`POST /containers/create` - -Create a container - -**Example request**: - - POST /containers/create HTTP/1.1 - Content-Type: application/json - - { - "Hostname": "", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": true, - "AttachStderr": true, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": [ - "FOO=bar", - "BAZ=quux" - ], - "Cmd": [ - "date" - ], - "Entrypoint": "", - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "Volumes": { - "/volumes/data": {} - }, - "WorkingDir": "", - "NetworkDisabled": false, - "MacAddress": "12:34:56:78:9a:bc", - "ExposedPorts": { - "22/tcp": {} - }, - "StopSignal": "SIGTERM", - "HostConfig": { - "Binds": ["/tmp:/tmp"], - "Links": ["redis3:redis"], - "Memory": 0, - "MemorySwap": 0, - "MemoryReservation": 0, - "KernelMemory": 0, - "CpuShares": 512, - "CpuPeriod": 100000, - "CpuQuota": 50000, - "CpusetCpus": "0,1", - "CpusetMems": "0,1", - "BlkioWeight": 300, - "BlkioWeightDevice": [{}], - "BlkioDeviceReadBps": [{}], - "BlkioDeviceReadIOps": [{}], - "BlkioDeviceWriteBps": [{}], - "BlkioDeviceWriteIOps": [{}], - "MemorySwappiness": 60, - "OomKillDisable": false, - "OomScoreAdj": 500, - "PidMode": "", - "PidsLimit": -1, - "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] }, - "PublishAllPorts": false, - "Privileged": false, - "ReadonlyRootfs": false, - "Dns": ["8.8.8.8"], - "DnsOptions": [""], - "DnsSearch": [""], - "ExtraHosts": null, - "VolumesFrom": ["parent", "other:ro"], - "CapAdd": ["NET_ADMIN"], - "CapDrop": ["MKNOD"], - "GroupAdd": ["newgroup"], - "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 }, - "NetworkMode": "bridge", - "Devices": [], - "Ulimits": [{}], - "LogConfig": { "Type": "json-file", "Config": {} }, - "SecurityOpt": [], - "CgroupParent": "", - "VolumeDriver": "", - "ShmSize": 67108864 - }, - "NetworkingConfig": { - "EndpointsConfig": { - "isolated_nw" : { - "IPAMConfig": { - "IPv4Address":"172.20.30.33", - "IPv6Address":"2001:db8:abcd::3033" - }, - "Links":["container_1", "container_2"], - "Aliases":["server_x", "server_y"] - } - } - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Id":"e90e34656806", - "Warnings":[] - } - -**JSON parameters**: - -- **Hostname** - A string value containing the hostname to use for the - container. -- **Domainname** - A string value containing the domain name to use - for the container. -- **User** - A string value specifying the user inside the container. -- **AttachStdin** - Boolean value, attaches to `stdin`. -- **AttachStdout** - Boolean value, attaches to `stdout`. -- **AttachStderr** - Boolean value, attaches to `stderr`. -- **Tty** - Boolean value, Attach standard streams to a `tty`, including `stdin` if it is not closed. -- **OpenStdin** - Boolean value, opens `stdin`, -- **StdinOnce** - Boolean value, close `stdin` after the 1 attached client disconnects. -- **Env** - A list of environment variables in the form of `["VAR=value"[,"VAR2=value2"]]` -- **Labels** - Adds a map of labels to a container. To specify a map: `{"key":"value"[,"key2":"value2"]}` -- **Cmd** - Command to run specified as a string or an array of strings. -- **Entrypoint** - Set the entry point for the container as a string or an array - of strings. -- **Image** - A string specifying the image name to use for the container. -- **Volumes** - An object mapping mount point paths (strings) inside the - container to empty objects. -- **WorkingDir** - A string specifying the working directory for commands to - run in. -- **NetworkDisabled** - Boolean value, when true disables networking for the - container -- **ExposedPorts** - An object mapping ports to an empty object in the form of: - `"ExposedPorts": { "/: {}" }` -- **StopSignal** - Signal to stop a container as a string or unsigned integer. `SIGTERM` by default. -- **HostConfig** - - **Binds** – A list of volume bindings for this container. Each volume binding is a string in one of these forms: - + `host-src:container-dest` to bind-mount a host path into the - container. Both `host-src`, and `container-dest` must be an - _absolute_ path. - + `host-src:container-dest:ro` to make the bind-mount read-only - inside the container. Both `host-src`, and `container-dest` must be - an _absolute_ path. - + `volume-name:container-dest` to bind-mount a volume managed by a - volume driver into the container. `container-dest` must be an - _absolute_ path. - + `volume-name:container-dest:ro` to mount the volume read-only - inside the container. `container-dest` must be an _absolute_ path. - - **Links** - A list of links for the container. Each link entry should be - in the form of `container_name:alias`. - - **Memory** - Memory limit in bytes. - - **MemorySwap** - Total memory limit (memory + swap); set `-1` to enable unlimited swap. - You must use this with `memory` and make the swap value larger than `memory`. - - **MemoryReservation** - Memory soft limit in bytes. - - **KernelMemory** - Kernel memory limit in bytes. - - **CpuShares** - An integer value containing the container's CPU Shares - (ie. the relative weight vs other containers). - - **CpuPeriod** - The length of a CPU period in microseconds. - - **CpuQuota** - Microseconds of CPU time that the container can get in a CPU period. - - **CpusetCpus** - String value containing the `cgroups CpusetCpus` to use. - - **CpusetMems** - Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. - - **BlkioWeight** - Block IO weight (relative weight) accepts a weight value between 10 and 1000. - - **BlkioWeightDevice** - Block IO weight (relative device weight) in the form of: `"BlkioWeightDevice": [{"Path": "device_path", "Weight": weight}]` - - **BlkioDeviceReadBps** - Limit read rate (bytes per second) from a device in the form of: `"BlkioDeviceReadBps": [{"Path": "device_path", "Rate": rate}]`, for example: - `"BlkioDeviceReadBps": [{"Path": "/dev/sda", "Rate": "1024"}]"` - - **BlkioDeviceWriteBps** - Limit write rate (bytes per second) to a device in the form of: `"BlkioDeviceWriteBps": [{"Path": "device_path", "Rate": rate}]`, for example: - `"BlkioDeviceWriteBps": [{"Path": "/dev/sda", "Rate": "1024"}]"` - - **BlkioDeviceReadIOps** - Limit read rate (IO per second) from a device in the form of: `"BlkioDeviceReadIOps": [{"Path": "device_path", "Rate": rate}]`, for example: - `"BlkioDeviceReadIOps": [{"Path": "/dev/sda", "Rate": "1000"}]` - - **BlkioDeviceWiiteIOps** - Limit write rate (IO per second) to a device in the form of: `"BlkioDeviceWriteIOps": [{"Path": "device_path", "Rate": rate}]`, for example: - `"BlkioDeviceWriteIOps": [{"Path": "/dev/sda", "Rate": "1000"}]` - - **MemorySwappiness** - Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. - - **OomKillDisable** - Boolean value, whether to disable OOM Killer for the container or not. - - **OomScoreAdj** - An integer value containing the score given to the container in order to tune OOM killer preferences. - - **PidMode** - Set the PID (Process) Namespace mode for the container; - `"container:"`: joins another container's PID namespace - `"host"`: use the host's PID namespace inside the container - - **PidsLimit** - Tune a container's pids limit. Set -1 for unlimited. - - **PortBindings** - A map of exposed container ports and the host port they - should map to. A JSON object in the form - `{ /: [{ "HostPort": "" }] }` - Take note that `port` is specified as a string and not an integer value. - - **PublishAllPorts** - Allocates a random host port for all of a container's - exposed ports. Specified as a boolean value. - - **Privileged** - Gives the container full access to the host. Specified as - a boolean value. - - **ReadonlyRootfs** - Mount the container's root filesystem as read only. - Specified as a boolean value. - - **Dns** - A list of DNS servers for the container to use. - - **DnsOptions** - A list of DNS options - - **DnsSearch** - A list of DNS search domains - - **ExtraHosts** - A list of hostnames/IP mappings to add to the - container's `/etc/hosts` file. Specified in the form `["hostname:IP"]`. - - **VolumesFrom** - A list of volumes to inherit from another container. - Specified in the form `[:]` - - **CapAdd** - A list of kernel capabilities to add to the container. - - **Capdrop** - A list of kernel capabilities to drop from the container. - - **GroupAdd** - A list of additional groups that the container process will run as - - **RestartPolicy** – The behavior to apply when the container exits. The - value is an object with a `Name` property of either `"always"` to - always restart, `"unless-stopped"` to restart always except when - user has manually stopped the container or `"on-failure"` to restart only when the container - exit code is non-zero. If `on-failure` is used, `MaximumRetryCount` - controls the number of times to retry before giving up. - The default is not to restart. (optional) - An ever increasing delay (double the previous delay, starting at 100mS) - is added before each restart to prevent flooding the server. - - **UsernsMode** - Sets the usernamespace mode for the container when usernamespace remapping option is enabled. - supported values are: `host`. - - **NetworkMode** - Sets the networking mode for the container. Supported - standard values are: `bridge`, `host`, `none`, and `container:`. Any other value is taken - as a custom network's name to which this container should connect to. - - **Devices** - A list of devices to add to the container specified as a JSON object in the - form - `{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}` - - **Ulimits** - A list of ulimits to set in the container, specified as - `{ "Name": , "Soft": , "Hard": }`, for example: - `Ulimits: { "Name": "nofile", "Soft": 1024, "Hard": 2048 }` - - **SecurityOpt**: A list of string values to customize labels for MLS - systems, such as SELinux. - - **LogConfig** - Log configuration for the container, specified as a JSON object in the form - `{ "Type": "", "Config": {"key1": "val1"}}`. - Available types: `json-file`, `syslog`, `journald`, `gelf`, `fluentd`, `awslogs`, `splunk`, `etwlogs`, `none`. - `json-file` logging driver. - - **CgroupParent** - Path to `cgroups` under which the container's `cgroup` is created. If the path is not absolute, the path is considered to be relative to the `cgroups` path of the init process. Cgroups are created if they do not already exist. - - **VolumeDriver** - Driver that this container users to mount volumes. - - **ShmSize** - Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB. - -**Query parameters**: - -- **name** – Assign the specified name to the container. Must - match `/?[a-zA-Z0-9_-]+`. - -**Status codes**: - -- **201** – no error -- **400** – bad parameter -- **404** – no such container -- **406** – impossible to attach (container not running) -- **409** – conflict -- **500** – server error - -### Inspect a container - -`GET /containers/(id or name)/json` - -Return low-level information on the container `id` - -**Example request**: - - GET /containers/4fa6e0f0c678/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "AppArmorProfile": "", - "Args": [ - "-c", - "exit 9" - ], - "Config": { - "AttachStderr": true, - "AttachStdin": false, - "AttachStdout": true, - "Cmd": [ - "/bin/sh", - "-c", - "exit 9" - ], - "Domainname": "", - "Entrypoint": null, - "Env": [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "ExposedPorts": null, - "Hostname": "ba033ac44011", - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "MacAddress": "", - "NetworkDisabled": false, - "OnBuild": null, - "OpenStdin": false, - "StdinOnce": false, - "Tty": false, - "User": "", - "Volumes": { - "/volumes/data": {} - }, - "WorkingDir": "", - "StopSignal": "SIGTERM" - }, - "Created": "2015-01-06T15:47:31.485331387Z", - "Driver": "devicemapper", - "ExecIDs": null, - "HostConfig": { - "Binds": null, - "BlkioWeight": 0, - "BlkioWeightDevice": [{}], - "BlkioDeviceReadBps": [{}], - "BlkioDeviceWriteBps": [{}], - "BlkioDeviceReadIOps": [{}], - "BlkioDeviceWriteIOps": [{}], - "CapAdd": null, - "CapDrop": null, - "ContainerIDFile": "", - "CpusetCpus": "", - "CpusetMems": "", - "CpuShares": 0, - "CpuPeriod": 100000, - "Devices": [], - "Dns": null, - "DnsOptions": null, - "DnsSearch": null, - "ExtraHosts": null, - "IpcMode": "", - "Links": null, - "LxcConf": [], - "Memory": 0, - "MemorySwap": 0, - "MemoryReservation": 0, - "KernelMemory": 0, - "OomKillDisable": false, - "OomScoreAdj": 500, - "NetworkMode": "bridge", - "PidMode": "", - "PortBindings": {}, - "Privileged": false, - "ReadonlyRootfs": false, - "PublishAllPorts": false, - "RestartPolicy": { - "MaximumRetryCount": 2, - "Name": "on-failure" - }, - "LogConfig": { - "Config": null, - "Type": "json-file" - }, - "SecurityOpt": null, - "VolumesFrom": null, - "Ulimits": [{}], - "VolumeDriver": "", - "ShmSize": 67108864 - }, - "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", - "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", - "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", - "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", - "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", - "MountLabel": "", - "Name": "/boring_euclid", - "NetworkSettings": { - "Bridge": "", - "SandboxID": "", - "HairpinMode": false, - "LinkLocalIPv6Address": "", - "LinkLocalIPv6PrefixLen": 0, - "Ports": null, - "SandboxKey": "", - "SecondaryIPAddresses": null, - "SecondaryIPv6Addresses": null, - "EndpointID": "", - "Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "IPAddress": "", - "IPPrefixLen": 0, - "IPv6Gateway": "", - "MacAddress": "", - "Networks": { - "bridge": { - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.2", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:12:00:02" - } - } - }, - "Path": "/bin/sh", - "ProcessLabel": "", - "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", - "RestartCount": 1, - "State": { - "Error": "", - "ExitCode": 9, - "FinishedAt": "2015-01-06T15:47:32.080254511Z", - "OOMKilled": false, - "Dead": false, - "Paused": false, - "Pid": 0, - "Restarting": false, - "Running": true, - "StartedAt": "2015-01-06T15:47:32.072697474Z", - "Status": "running" - }, - "Mounts": [ - { - "Name": "fac362...80535", - "Source": "/data", - "Destination": "/data", - "Driver": "local", - "Mode": "ro,Z", - "RW": false, - "Propagation": "" - } - ] - } - -**Example request, with size information**: - - GET /containers/4fa6e0f0c678/json?size=1 HTTP/1.1 - -**Example response, with size information**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - .... - "SizeRw": 0, - "SizeRootFs": 972, - .... - } - -**Query parameters**: - -- **size** – 1/True/true or 0/False/false, return container size information. Default is `false`. - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### List processes running inside a container - -`GET /containers/(id or name)/top` - -List processes running inside the container `id`. On Unix systems this -is done by running the `ps` command. This endpoint is not -supported on Windows. - -**Example request**: - - GET /containers/4fa6e0f0c678/top HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Titles" : [ - "UID", "PID", "PPID", "C", "STIME", "TTY", "TIME", "CMD" - ], - "Processes" : [ - [ - "root", "13642", "882", "0", "17:03", "pts/0", "00:00:00", "/bin/bash" - ], - [ - "root", "13735", "13642", "0", "17:06", "pts/0", "00:00:00", "sleep 10" - ] - ] - } - -**Example request**: - - GET /containers/4fa6e0f0c678/top?ps_args=aux HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Titles" : [ - "USER","PID","%CPU","%MEM","VSZ","RSS","TTY","STAT","START","TIME","COMMAND" - ] - "Processes" : [ - [ - "root","13642","0.0","0.1","18172","3184","pts/0","Ss","17:03","0:00","/bin/bash" - ], - [ - "root","13895","0.0","0.0","4348","692","pts/0","S+","17:15","0:00","sleep 10" - ] - ], - } - -**Query parameters**: - -- **ps_args** – `ps` arguments to use (e.g., `aux`), defaults to `-ef` - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Get container logs - -`GET /containers/(id or name)/logs` - -Get `stdout` and `stderr` logs from the container ``id`` - -> **Note**: -> This endpoint works only for containers with the `json-file` or `journald` logging drivers. - -**Example request**: - - GET /containers/4fa6e0f0c678/logs?stderr=1&stdout=1×tamps=1&follow=1&tail=10&since=1428990821 HTTP/1.1 - -**Example response**: - - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **follow** – 1/True/true or 0/False/false, return stream. Default `false`. -- **stdout** – 1/True/true or 0/False/false, show `stdout` log. Default `false`. -- **stderr** – 1/True/true or 0/False/false, show `stderr` log. Default `false`. -- **since** – UNIX timestamp (integer) to filter logs. Specifying a timestamp - will only output log-entries since that timestamp. Default: 0 (unfiltered) -- **timestamps** – 1/True/true or 0/False/false, print timestamps for - every log line. Default `false`. -- **tail** – Output specified number of lines at the end of logs: `all` or ``. Default all. - -**Status codes**: - -- **101** – no error, hints proxy about hijacking -- **200** – no error, no upgrade header found -- **404** – no such container -- **500** – server error - -### Inspect changes on a container's filesystem - -`GET /containers/(id or name)/changes` - -Inspect changes on container `id`'s filesystem - -**Example request**: - - GET /containers/4fa6e0f0c678/changes HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Path": "/dev", - "Kind": 0 - }, - { - "Path": "/dev/kmsg", - "Kind": 1 - }, - { - "Path": "/test", - "Kind": 1 - } - ] - -Values for `Kind`: - -- `0`: Modify -- `1`: Add -- `2`: Delete - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Export a container - -`GET /containers/(id or name)/export` - -Export the contents of container `id` - -**Example request**: - - GET /containers/4fa6e0f0c678/export HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/octet-stream - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Get container stats based on resource usage - -`GET /containers/(id or name)/stats` - -This endpoint returns a live stream of a container's resource usage statistics. - -**Example request**: - - GET /containers/redis1/stats HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "read" : "2015-01-08T22:57:31.547920715Z", - "pids_stats": { - "current": 3 - }, - "networks": { - "eth0": { - "rx_bytes": 5338, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 36, - "tx_bytes": 648, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 8 - }, - "eth5": { - "rx_bytes": 4641, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 26, - "tx_bytes": 690, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 9 - } - }, - "memory_stats" : { - "stats" : { - "total_pgmajfault" : 0, - "cache" : 0, - "mapped_file" : 0, - "total_inactive_file" : 0, - "pgpgout" : 414, - "rss" : 6537216, - "total_mapped_file" : 0, - "writeback" : 0, - "unevictable" : 0, - "pgpgin" : 477, - "total_unevictable" : 0, - "pgmajfault" : 0, - "total_rss" : 6537216, - "total_rss_huge" : 6291456, - "total_writeback" : 0, - "total_inactive_anon" : 0, - "rss_huge" : 6291456, - "hierarchical_memory_limit" : 67108864, - "total_pgfault" : 964, - "total_active_file" : 0, - "active_anon" : 6537216, - "total_active_anon" : 6537216, - "total_pgpgout" : 414, - "total_cache" : 0, - "inactive_anon" : 0, - "active_file" : 0, - "pgfault" : 964, - "inactive_file" : 0, - "total_pgpgin" : 477 - }, - "max_usage" : 6651904, - "usage" : 6537216, - "failcnt" : 0, - "limit" : 67108864 - }, - "blkio_stats" : {}, - "cpu_stats" : { - "cpu_usage" : { - "percpu_usage" : [ - 8646879, - 24472255, - 36438778, - 30657443 - ], - "usage_in_usermode" : 50000000, - "total_usage" : 100215355, - "usage_in_kernelmode" : 30000000 - }, - "system_cpu_usage" : 739306590000000, - "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0} - }, - "precpu_stats" : { - "cpu_usage" : { - "percpu_usage" : [ - 8646879, - 24350896, - 36438778, - 30657443 - ], - "usage_in_usermode" : 50000000, - "total_usage" : 100093996, - "usage_in_kernelmode" : 30000000 - }, - "system_cpu_usage" : 9492140000000, - "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0} - } - } - -The precpu_stats is the cpu statistic of last read, which is used for calculating the cpu usage percent. It is not the exact copy of the “cpu_stats” field. - -**Query parameters**: - -- **stream** – 1/True/true or 0/False/false, pull stats once then disconnect. Default `true`. - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Resize a container TTY - -`POST /containers/(id or name)/resize` - -Resize the TTY for container with `id`. The unit is number of characters. You must restart the container for the resize to take effect. - -**Example request**: - - POST /containers/4fa6e0f0c678/resize?h=40&w=80 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Query parameters**: - -- **h** – height of `tty` session -- **w** – width - -**Status codes**: - -- **200** – no error -- **404** – No such container -- **500** – Cannot resize container - -### Start a container - -`POST /containers/(id or name)/start` - -Start the container `id` - -> **Note**: -> For backwards compatibility, this endpoint accepts a `HostConfig` as JSON-encoded request body. -> See [create a container](docker_remote_api_v1.23.md#create-a-container) for details. - -**Example request**: - - POST /containers/e90e34656806/start HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **detachKeys** – Override the key sequence for detaching a - container. Format is a single character `[a-Z]` or `ctrl-` - where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. - -**Status codes**: - -- **204** – no error -- **304** – container already started -- **404** – no such container -- **500** – server error - -### Stop a container - -`POST /containers/(id or name)/stop` - -Stop the container `id` - -**Example request**: - - POST /containers/e90e34656806/stop?t=5 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **t** – number of seconds to wait before killing the container - -**Status codes**: - -- **204** – no error -- **304** – container already stopped -- **404** – no such container -- **500** – server error - -### Restart a container - -`POST /containers/(id or name)/restart` - -Restart the container `id` - -**Example request**: - - POST /containers/e90e34656806/restart?t=5 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **t** – number of seconds to wait before killing the container - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Kill a container - -`POST /containers/(id or name)/kill` - -Kill the container `id` - -**Example request**: - - POST /containers/e90e34656806/kill HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **signal** - Signal to send to the container: integer or string like `SIGINT`. - When not set, `SIGKILL` is assumed and the call waits for the container to exit. - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Update a container - -`POST /containers/(id or name)/update` - -Update configuration of one or more containers. - -**Example request**: - - POST /containers/e90e34656806/update HTTP/1.1 - Content-Type: application/json - - { - "BlkioWeight": 300, - "CpuShares": 512, - "CpuPeriod": 100000, - "CpuQuota": 50000, - "CpusetCpus": "0,1", - "CpusetMems": "0", - "Memory": 314572800, - "MemorySwap": 514288000, - "MemoryReservation": 209715200, - "KernelMemory": 52428800, - "RestartPolicy": { - "MaximumRetryCount": 4, - "Name": "on-failure" - }, - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Warnings": [] - } - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **404** – no such container -- **500** – server error - -### Rename a container - -`POST /containers/(id or name)/rename` - -Rename the container `id` to a `new_name` - -**Example request**: - - POST /containers/e90e34656806/rename?name=new_name HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **name** – new name for the container - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **409** - conflict name already assigned -- **500** – server error - -### Pause a container - -`POST /containers/(id or name)/pause` - -Pause the container `id` - -**Example request**: - - POST /containers/e90e34656806/pause HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Unpause a container - -`POST /containers/(id or name)/unpause` - -Unpause the container `id` - -**Example request**: - - POST /containers/e90e34656806/unpause HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Attach to a container - -`POST /containers/(id or name)/attach` - -Attach to the container `id` - -**Example request**: - - POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **detachKeys** – Override the key sequence for detaching a - container. Format is a single character `[a-Z]` or `ctrl-` - where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. -- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. -- **stream** – 1/True/true or 0/False/false, return stream. - Default `false`. -- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach - to `stdin`. Default `false`. -- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return - `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. -- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return - `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. - -**Status codes**: - -- **101** – no error, hints proxy about hijacking -- **200** – no error, no upgrade header found -- **400** – bad parameter -- **404** – no such container -- **409** - container is paused -- **500** – server error - -**Stream details**: - -When using the TTY setting is enabled in -[`POST /containers/create` -](docker_remote_api_v1.23.md#create-a-container), -the stream is the raw data from the process PTY and client's `stdin`. -When the TTY is disabled, then the stream is multiplexed to separate -`stdout` and `stderr`. - -The format is a **Header** and a **Payload** (frame). - -**HEADER** - -The header contains the information which the stream writes (`stdout` or -`stderr`). It also contains the size of the associated frame encoded in the -last four bytes (`uint32`). - -It is encoded on the first eight bytes like this: - - header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} - -`STREAM_TYPE` can be: - -- 0: `stdin` (is written on `stdout`) -- 1: `stdout` -- 2: `stderr` - -`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of -the `uint32` size encoded as big endian. - -**PAYLOAD** - -The payload is the raw stream. - -**IMPLEMENTATION** - -The simplest way to implement the Attach protocol is the following: - - 1. Read eight bytes. - 2. Choose `stdout` or `stderr` depending on the first byte. - 3. Extract the frame size from the last four bytes. - 4. Read the extracted size and output it on the correct output. - 5. Goto 1. - -### Attach to a container (websocket) - -`GET /containers/(id or name)/attach/ws` - -Attach to the container `id` via websocket - -Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455) - -**Example request** - - GET /containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1 - -**Example response** - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **detachKeys** – Override the key sequence for detaching a - container. Format is a single character `[a-Z]` or `ctrl-` - where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. -- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. -- **stream** – 1/True/true or 0/False/false, return stream. - Default `false`. -- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach - to `stdin`. Default `false`. -- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return - `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. -- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return - `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **404** – no such container -- **500** – server error - -### Wait a container - -`POST /containers/(id or name)/wait` - -Block until container `id` stops, then returns the exit code - -**Example request**: - - POST /containers/16253994b7c4/wait HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"StatusCode": 0} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Remove a container - -`DELETE /containers/(id or name)` - -Remove the container `id` from the filesystem - -**Example request**: - - DELETE /containers/16253994b7c4?v=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **v** – 1/True/true or 0/False/false, Remove the volumes - associated to the container. Default `false`. -- **force** - 1/True/true or 0/False/false, Kill then remove the container. - Default `false`. - -**Status codes**: - -- **204** – no error -- **400** – bad parameter -- **404** – no such container -- **409** – conflict -- **500** – server error - -### Copy files or folders from a container - -`POST /containers/(id or name)/copy` - -Copy files or folders of container `id` - -**Deprecated** in favor of the `archive` endpoint below. - -**Example request**: - - POST /containers/4fa6e0f0c678/copy HTTP/1.1 - Content-Type: application/json - - { - "Resource": "test.txt" - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Retrieving information about files and folders in a container - -`HEAD /containers/(id or name)/archive` - -See the description of the `X-Docker-Container-Path-Stat` header in the -following section. - -### Get an archive of a filesystem resource in a container - -`GET /containers/(id or name)/archive` - -Get a tar archive of a resource in the filesystem of container `id`. - -**Query parameters**: - -- **path** - resource in the container's filesystem to archive. Required. - - If not an absolute path, it is relative to the container's root directory. - The resource specified by **path** must exist. To assert that the resource - is expected to be a directory, **path** should end in `/` or `/.` - (assuming a path separator of `/`). If **path** ends in `/.` then this - indicates that only the contents of the **path** directory should be - copied. A symlink is always resolved to its target. - - > **Note**: It is not possible to copy certain system files such as resources - > under `/proc`, `/sys`, `/dev`, and mounts created by the user in the - > container. - -**Example request**: - - GET /containers/8cce319429b2/archive?path=/root HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - X-Docker-Container-Path-Stat: eyJuYW1lIjoicm9vdCIsInNpemUiOjQwOTYsIm1vZGUiOjIxNDc0ODQwOTYsIm10aW1lIjoiMjAxNC0wMi0yN1QyMDo1MToyM1oiLCJsaW5rVGFyZ2V0IjoiIn0= - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -On success, a response header `X-Docker-Container-Path-Stat` will be set to a -base64-encoded JSON object containing some filesystem header information about -the archived resource. The above example value would decode to the following -JSON object (whitespace added for readability): - -```json -{ - "name": "root", - "size": 4096, - "mode": 2147484096, - "mtime": "2014-02-27T20:51:23Z", - "linkTarget": "" -} -``` - -A `HEAD` request can also be made to this endpoint if only this information is -desired. - -**Status codes**: - -- **200** - success, returns archive of copied resource -- **400** - client error, bad parameter, details in JSON response body, one of: - - must specify path parameter (**path** cannot be empty) - - not a directory (**path** was asserted to be a directory but exists as a - file) -- **404** - client error, resource not found, one of: - – no such container (container `id` does not exist) - - no such file or directory (**path** does not exist) -- **500** - server error - -### Extract an archive of files or folders to a directory in a container - -`PUT /containers/(id or name)/archive` - -Upload a tar archive to be extracted to a path in the filesystem of container -`id`. - -**Query parameters**: - -- **path** - path to a directory in the container - to extract the archive's contents into. Required. - - If not an absolute path, it is relative to the container's root directory. - The **path** resource must exist. -- **noOverwriteDirNonDir** - If "1", "true", or "True" then it will be an error - if unpacking the given content would cause an existing directory to be - replaced with a non-directory and vice versa. - -**Example request**: - - PUT /containers/8cce319429b2/archive?path=/vol1 HTTP/1.1 - Content-Type: application/x-tar - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** – the content was extracted successfully -- **400** - client error, bad parameter, details in JSON response body, one of: - - must specify path parameter (**path** cannot be empty) - - not a directory (**path** should be a directory but exists as a file) - - unable to overwrite existing directory with non-directory - (if **noOverwriteDirNonDir**) - - unable to overwrite existing non-directory with directory - (if **noOverwriteDirNonDir**) -- **403** - client error, permission denied, the volume - or container rootfs is marked as read-only. -- **404** - client error, resource not found, one of: - – no such container (container `id` does not exist) - - no such file or directory (**path** resource does not exist) -- **500** – server error - -## 2.2 Images - -### List Images - -`GET /images/json` - -**Example request**: - - GET /images/json?all=0 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "RepoTags": [ - "ubuntu:12.04", - "ubuntu:precise", - "ubuntu:latest" - ], - "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c", - "Created": 1365714795, - "Size": 131506275, - "VirtualSize": 131506275, - "Labels": {} - }, - { - "RepoTags": [ - "ubuntu:12.10", - "ubuntu:quantal" - ], - "ParentId": "27cf784147099545", - "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", - "Created": 1364102658, - "Size": 24653, - "VirtualSize": 180116135, - "Labels": { - "com.example.version": "v1" - } - } - ] - -**Example request, with digest information**: - - GET /images/json?digests=1 HTTP/1.1 - -**Example response, with digest information**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Created": 1420064636, - "Id": "4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125", - "ParentId": "ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2", - "RepoDigests": [ - "localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" - ], - "RepoTags": [ - "localhost:5000/test/busybox:latest", - "playdate:latest" - ], - "Size": 0, - "VirtualSize": 2429728, - "Labels": {} - } - ] - -The response shows a single image `Id` associated with two repositories -(`RepoTags`): `localhost:5000/test/busybox`: and `playdate`. A caller can use -either of the `RepoTags` values `localhost:5000/test/busybox:latest` or -`playdate:latest` to reference the image. - -You can also use `RepoDigests` values to reference an image. In this response, -the array has only one reference and that is to the -`localhost:5000/test/busybox` repository; the `playdate` repository has no -digest. You can reference this digest using the value: -`localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d...` - -See the `docker run` and `docker build` commands for examples of digest and tag -references on the command line. - -**Query parameters**: - -- **all** – 1/True/true or 0/False/false, default false -- **filters** – a JSON encoded value of the filters (a map[string][]string) to process on the images list. Available filters: - - `dangling=true` - - `label=key` or `label="key=value"` of an image label -- **filter** - only return images with the specified name - -### Build image from a Dockerfile - -`POST /build` - -Build an image from a Dockerfile - -**Example request**: - - POST /build HTTP/1.1 - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"stream": "Step 1..."} - {"stream": "..."} - {"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}} - -The input stream must be a `tar` archive compressed with one of the -following algorithms: `identity` (no compression), `gzip`, `bzip2`, `xz`. - -The archive must include a build instructions file, typically called -`Dockerfile` at the archive's root. The `dockerfile` parameter may be -used to specify a different build instructions file. To do this, its value must be -the path to the alternate build instructions file to use. - -The archive may include any number of other files, -which are accessible in the build context (See the [*ADD build -command*](../../reference/builder.md#add)). - -The build is canceled if the client drops the connection by quitting -or being killed. - -**Query parameters**: - -- **dockerfile** - Path within the build context to the `Dockerfile`. This is - ignored if `remote` is specified and points to an external `Dockerfile`. -- **t** – A name and optional tag to apply to the image in the `name:tag` format. - If you omit the `tag` the default `latest` value is assumed. - You can provide one or more `t` parameters. -- **remote** – A Git repository URI or HTTP/HTTPS context URI. If the - URI points to a single text file, the file's contents are placed into - a file called `Dockerfile` and the image is built from that file. If - the URI points to a tarball, the file is downloaded by the daemon and - the contents therein used as the context for the build. If the URI - points to a tarball and the `dockerfile` parameter is also specified, - there must be a file with the corresponding path inside the tarball. -- **q** – Suppress verbose build output. -- **nocache** – Do not use the cache when building the image. -- **pull** - Attempt to pull the image even if an older image exists locally. -- **rm** - Remove intermediate containers after a successful build (default behavior). -- **forcerm** - Always remove intermediate containers (includes `rm`). -- **memory** - Set memory limit for build. -- **memswap** - Total memory (memory + swap), `-1` to enable unlimited swap. -- **cpushares** - CPU shares (relative weight). -- **cpusetcpus** - CPUs in which to allow execution (e.g., `0-3`, `0,1`). -- **cpuperiod** - The length of a CPU period in microseconds. -- **cpuquota** - Microseconds of CPU time that the container can get in a CPU period. -- **buildargs** – JSON map of string pairs for build-time variables. Users pass - these values at build-time. Docker uses the `buildargs` as the environment - context for command(s) run via the Dockerfile's `RUN` instruction or for - variable expansion in other Dockerfile instructions. This is not meant for - passing secret values. [Read more about the buildargs instruction](../../reference/builder.md#arg) -- **shmsize** - Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB. -- **labels** – JSON map of string pairs for labels to set on the image. - -**Request Headers**: - -- **Content-type** – Set to `"application/tar"`. -- **X-Registry-Config** – A base64-url-safe-encoded Registry Auth Config JSON - object with the following structure: - - { - "docker.example.com": { - "username": "janedoe", - "password": "hunter2" - }, - "https://index.docker.io/v1/": { - "username": "mobydock", - "password": "conta1n3rize14" - } - } - - This object maps the hostname of a registry to an object containing the - "username" and "password" for that registry. Multiple registries may - be specified as the build may be based on an image requiring - authentication to pull from any arbitrary registry. Only the registry - domain name (and port if not the default "443") are required. However - (for legacy reasons) the "official" Docker, Inc. hosted registry must - be specified with both a "https://" prefix and a "/v1/" suffix even - though Docker will prefer to use the v2 registry API. - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Create an image - -`POST /images/create` - -Create an image either by pulling it from the registry or by importing it - -**Example request**: - - POST /images/create?fromImage=busybox&tag=latest HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "Pulling..."} - {"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}} - {"error": "Invalid..."} - ... - -When using this endpoint to pull an image from the registry, the -`X-Registry-Auth` header can be used to include -a base64-encoded AuthConfig object. - -**Query parameters**: - -- **fromImage** – Name of the image to pull. The name may include a tag or - digest. This parameter may only be used when pulling an image. - The pull is cancelled if the HTTP connection is closed. -- **fromSrc** – Source to import. The value may be a URL from which the image - can be retrieved or `-` to read the image from the request body. - This parameter may only be used when importing an image. -- **repo** – Repository name given to an image when it is imported. - The repo may include a tag. This parameter may only be used when importing - an image. -- **tag** – Tag or digest. If empty when pulling an image, this causes all tags - for the given image to be pulled. - -**Request Headers**: - -- **X-Registry-Auth** – base64-encoded AuthConfig object, containing either login information, or a token - - Credential based login: - - ``` - { - "username": "jdoe", - "password": "secret", - "email": "jdoe@acme.com" - } - ``` - - - Token based login: - - ``` - { - "registrytoken": "9cbaf023786cd7..." - } - ``` - -**Status codes**: - -- **200** – no error -- **500** – server error - - - -### Inspect an image - -`GET /images/(name)/json` - -Return low-level information on the image `name` - -**Example request**: - - GET /images/example/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Id" : "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c", - "Container" : "cb91e48a60d01f1e27028b4fc6819f4f290b3cf12496c8176ec714d0d390984a", - "Comment" : "", - "Os" : "linux", - "Architecture" : "amd64", - "Parent" : "sha256:91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", - "ContainerConfig" : { - "Tty" : false, - "Hostname" : "e611e15f9c9d", - "Volumes" : null, - "Domainname" : "", - "AttachStdout" : false, - "PublishService" : "", - "AttachStdin" : false, - "OpenStdin" : false, - "StdinOnce" : false, - "NetworkDisabled" : false, - "OnBuild" : [], - "Image" : "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", - "User" : "", - "WorkingDir" : "", - "Entrypoint" : null, - "MacAddress" : "", - "AttachStderr" : false, - "Labels" : { - "com.example.license" : "GPL", - "com.example.version" : "1.0", - "com.example.vendor" : "Acme" - }, - "Env" : [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "ExposedPorts" : null, - "Cmd" : [ - "/bin/sh", - "-c", - "#(nop) LABEL com.example.vendor=Acme com.example.license=GPL com.example.version=1.0" - ] - }, - "DockerVersion" : "1.9.0-dev", - "VirtualSize" : 188359297, - "Size" : 0, - "Author" : "", - "Created" : "2015-09-10T08:30:53.26995814Z", - "GraphDriver" : { - "Name" : "aufs", - "Data" : null - }, - "RepoDigests" : [ - "localhost:5000/test/busybox/example@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" - ], - "RepoTags" : [ - "example:1.0", - "example:latest", - "example:stable" - ], - "Config" : { - "Image" : "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", - "NetworkDisabled" : false, - "OnBuild" : [], - "StdinOnce" : false, - "PublishService" : "", - "AttachStdin" : false, - "OpenStdin" : false, - "Domainname" : "", - "AttachStdout" : false, - "Tty" : false, - "Hostname" : "e611e15f9c9d", - "Volumes" : null, - "Cmd" : [ - "/bin/bash" - ], - "ExposedPorts" : null, - "Env" : [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "Labels" : { - "com.example.vendor" : "Acme", - "com.example.version" : "1.0", - "com.example.license" : "GPL" - }, - "Entrypoint" : null, - "MacAddress" : "", - "AttachStderr" : false, - "WorkingDir" : "", - "User" : "" - }, - "RootFS": { - "Type": "layers", - "Layers": [ - "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6", - "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" - ] - } - } - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Get the history of an image - -`GET /images/(name)/history` - -Return the history of the image `name` - -**Example request**: - - GET /images/ubuntu/history HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", - "Created": 1398108230, - "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", - "Tags": [ - "ubuntu:lucid", - "ubuntu:10.04" - ], - "Size": 182964289, - "Comment": "" - }, - { - "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", - "Created": 1398108222, - "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", - "Tags": null, - "Size": 0, - "Comment": "" - }, - { - "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", - "Created": 1371157430, - "CreatedBy": "", - "Tags": [ - "scratch12:latest", - "scratch:latest" - ], - "Size": 0, - "Comment": "Imported from -" - } - ] - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Push an image on the registry - -`POST /images/(name)/push` - -Push the image `name` on the registry - -**Example request**: - - POST /images/test/push HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "Pushing..."} - {"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}} - {"error": "Invalid..."} - ... - -If you wish to push an image on to a private registry, that image must already have a tag -into a repository which references that registry `hostname` and `port`. This repository name should -then be used in the URL. This duplicates the command line's flow. - -The push is cancelled if the HTTP connection is closed. - -**Example request**: - - POST /images/registry.acme.com:5000/test/push HTTP/1.1 - - -**Query parameters**: - -- **tag** – The tag to associate with the image on the registry. This is optional. - -**Request Headers**: - -- **X-Registry-Auth** – base64-encoded AuthConfig object, containing either login information, or a token - - Credential based login: - - ``` - { - "username": "jdoe", - "password": "secret", - "email": "jdoe@acme.com", - } - ``` - - - Identity token based login: - - ``` - { - "identitytoken": "9cbaf023786cd7..." - } - ``` - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Tag an image into a repository - -`POST /images/(name)/tag` - -Tag the image `name` into a repository - -**Example request**: - - POST /images/test/tag?repo=myrepo&force=0&tag=v42 HTTP/1.1 - -**Example response**: - - HTTP/1.1 201 Created - -**Query parameters**: - -- **repo** – The repository to tag in -- **force** – 1/True/true or 0/False/false, default false -- **tag** - The new tag name - -**Status codes**: - -- **201** – no error -- **400** – bad parameter -- **404** – no such image -- **409** – conflict -- **500** – server error - -### Remove an image - -`DELETE /images/(name)` - -Remove the image `name` from the filesystem - -**Example request**: - - DELETE /images/test HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-type: application/json - - [ - {"Untagged": "3e2f21a89f"}, - {"Deleted": "3e2f21a89f"}, - {"Deleted": "53b4f83ac9"} - ] - -**Query parameters**: - -- **force** – 1/True/true or 0/False/false, default false -- **noprune** – 1/True/true or 0/False/false, default false - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **409** – conflict -- **500** – server error - -### Search images - -`GET /images/search` - -Search for an image on [Docker Hub](https://hub.docker.com). - -> **Note**: -> The response keys have changed from API v1.6 to reflect the JSON -> sent by the registry server to the docker daemon's request. - -**Example request**: - - GET /images/search?term=sshd HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "wma55/u1210sshd", - "star_count": 0 - }, - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "jdswinbank/sshd", - "star_count": 0 - }, - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "vgauthier/sshd", - "star_count": 0 - } - ... - ] - -**Query parameters**: - -- **term** – term to search - -**Status codes**: - -- **200** – no error -- **500** – server error - -## 2.3 Misc - -### Check auth configuration - -`POST /auth` - -Validate credentials for a registry and get identity token, -if available, for accessing the registry without password. - -**Example request**: - - POST /auth HTTP/1.1 - Content-Type: application/json - - { - "username": "hannibal", - "password": "xxxx", - "serveraddress": "https://index.docker.io/v1/" - } - -**Example response**: - - HTTP/1.1 200 OK - - { - "Status": "Login Succeeded", - "IdentityToken": "9cbaf023786cd7..." - } - -**Status codes**: - -- **200** – no error -- **204** – no error -- **500** – server error - -### Display system-wide information - -`GET /info` - -Display system-wide information - -**Example request**: - - GET /info HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Architecture": "x86_64", - "ClusterStore": "etcd://localhost:2379", - "CgroupDriver": "cgroupfs", - "Containers": 11, - "ContainersRunning": 7, - "ContainersStopped": 3, - "ContainersPaused": 1, - "CpuCfsPeriod": true, - "CpuCfsQuota": true, - "Debug": false, - "DockerRootDir": "/var/lib/docker", - "Driver": "btrfs", - "DriverStatus": [[""]], - "ExecutionDriver": "native-0.1", - "ExperimentalBuild": false, - "HttpProxy": "http://test:test@localhost:8080", - "HttpsProxy": "https://test:test@localhost:8080", - "ID": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS", - "IPv4Forwarding": true, - "Images": 16, - "IndexServerAddress": "https://index.docker.io/v1/", - "InitPath": "/usr/bin/docker", - "InitSha1": "", - "KernelMemory": true, - "KernelVersion": "3.12.0-1-amd64", - "Labels": [ - "storage=ssd" - ], - "MemTotal": 2099236864, - "MemoryLimit": true, - "NCPU": 1, - "NEventsListener": 0, - "NFd": 11, - "NGoroutines": 21, - "Name": "prod-server-42", - "NoProxy": "9.81.1.160", - "OomKillDisable": true, - "OSType": "linux", - "OperatingSystem": "Boot2Docker", - "Plugins": { - "Volume": [ - "local" - ], - "Network": [ - "null", - "host", - "bridge" - ] - }, - "RegistryConfig": { - "IndexConfigs": { - "docker.io": { - "Mirrors": null, - "Name": "docker.io", - "Official": true, - "Secure": true - } - }, - "InsecureRegistryCIDRs": [ - "127.0.0.0/8" - ] - }, - "ServerVersion": "1.9.0", - "SwapLimit": false, - "SystemStatus": [["State", "Healthy"]], - "SystemTime": "2015-03-10T11:11:23.730591467-07:00" - } - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Show the docker version information - -`GET /version` - -Show the docker version information - -**Example request**: - - GET /version HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Version": "1.11.0", - "Os": "linux", - "KernelVersion": "3.19.0-23-generic", - "GoVersion": "go1.4.2", - "GitCommit": "e75da4b", - "Arch": "amd64", - "ApiVersion": "1.23", - "BuildTime": "2015-12-01T07:09:13.444803460+00:00", - "Experimental": true - } - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Ping the docker server - -`GET /_ping` - -Ping the docker server - -**Example request**: - - GET /_ping HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: text/plain - - OK - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Create a new image from a container's changes - -`POST /commit` - -Create a new image from a container's changes - -**Example request**: - - POST /commit?container=44c004db4b17&comment=message&repo=myrepo HTTP/1.1 - Content-Type: application/json - - { - "Hostname": "", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": true, - "AttachStderr": true, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": null, - "Cmd": [ - "date" - ], - "Mounts": [ - { - "Source": "/data", - "Destination": "/data", - "Mode": "ro,Z", - "RW": false - } - ], - "Labels": { - "key1": "value1", - "key2": "value2" - }, - "WorkingDir": "", - "NetworkDisabled": false, - "ExposedPorts": { - "22/tcp": {} - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - {"Id": "596069db4bf5"} - -**JSON parameters**: - -- **config** - the container's configuration - -**Query parameters**: - -- **container** – source container -- **repo** – repository -- **tag** – tag -- **comment** – commit message -- **author** – author (e.g., "John Hannibal Smith - <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>") -- **pause** – 1/True/true or 0/False/false, whether to pause the container before committing -- **changes** – Dockerfile instructions to apply while committing - -**Status codes**: - -- **201** – no error -- **404** – no such container -- **500** – server error - -### Monitor Docker's events - -`GET /events` - -Get container events from docker, in real time via streaming. - -Docker containers report the following events: - - attach, commit, copy, create, destroy, die, exec_create, exec_start, export, kill, oom, pause, rename, resize, restart, start, stop, top, unpause, update - -Docker images report the following events: - - delete, import, pull, push, tag, untag - -Docker volumes report the following events: - - create, mount, unmount, destroy - -Docker networks report the following events: - - create, connect, disconnect, destroy - -**Example request**: - - GET /events?since=1374067924 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - Server: Docker/1.11.0 (linux) - Date: Fri, 29 Apr 2016 15:18:06 GMT - Transfer-Encoding: chunked - - { - "status": "pull", - "id": "alpine:latest", - "Type": "image", - "Action": "pull", - "Actor": { - "ID": "alpine:latest", - "Attributes": { - "name": "alpine" - } - }, - "time": 1461943101, - "timeNano": 1461943101301854122 - } - { - "status": "create", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "create", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943101, - "timeNano": 1461943101381709551 - } - { - "status": "attach", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "attach", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943101, - "timeNano": 1461943101383858412 - } - { - "Type": "network", - "Action": "connect", - "Actor": { - "ID": "7dc8ac97d5d29ef6c31b6052f3938c1e8f2749abbd17d1bd1febf2608db1b474", - "Attributes": { - "container": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "name": "bridge", - "type": "bridge" - } - }, - "time": 1461943101, - "timeNano": 1461943101394865557 - } - { - "status": "start", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "start", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943101, - "timeNano": 1461943101607533796 - } - { - "status": "resize", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "resize", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "height": "46", - "image": "alpine", - "name": "my-container", - "width": "204" - } - }, - "time": 1461943101, - "timeNano": 1461943101610269268 - } - { - "status": "die", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "die", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "exitCode": "0", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943105, - "timeNano": 1461943105079144137 - } - { - "Type": "network", - "Action": "disconnect", - "Actor": { - "ID": "7dc8ac97d5d29ef6c31b6052f3938c1e8f2749abbd17d1bd1febf2608db1b474", - "Attributes": { - "container": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "name": "bridge", - "type": "bridge" - } - }, - "time": 1461943105, - "timeNano": 1461943105230860245 - } - { - "status": "destroy", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "destroy", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943105, - "timeNano": 1461943105338056026 - } - -**Query parameters**: - -- **since** – Timestamp. Show all events created since timestamp and then stream -- **until** – Timestamp. Show events created until given timestamp and stop streaming -- **filters** – A json encoded value of the filters (a map[string][]string) to process on the event list. Available filters: - - `container=`; -- container to filter - - `event=`; -- event to filter - - `image=`; -- image to filter - - `label=`; -- image and container label to filter - - `type=`; -- either `container` or `image` or `volume` or `network` - - `volume=`; -- volume to filter - - `network=`; -- network to filter - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Get a tarball containing all images in a repository - -`GET /images/(name)/get` - -Get a tarball containing all images and metadata for the repository specified -by `name`. - -If `name` is a specific name and tag (e.g. ubuntu:latest), then only that image -(and its parents) are returned. If `name` is an image ID, similarly only that -image (and its parents) are returned, but with the exclusion of the -'repositories' file in the tarball, as there were no image names referenced. - -See the [image tarball format](docker_remote_api_v1.23.md#image-tarball-format) for more details. - -**Example request** - - GET /images/ubuntu/get - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - Binary data stream - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Get a tarball containing all images - -`GET /images/get` - -Get a tarball containing all images and metadata for one or more repositories. - -For each value of the `names` parameter: if it is a specific name and tag (e.g. -`ubuntu:latest`), then only that image (and its parents) are returned; if it is -an image ID, similarly only that image (and its parents) are returned and there -would be no names referenced in the 'repositories' file for this image ID. - -See the [image tarball format](docker_remote_api_v1.23.md#image-tarball-format) for more details. - -**Example request** - - GET /images/get?names=myname%2Fmyapp%3Alatest&names=busybox - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - Binary data stream - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Load a tarball with a set of images and tags into docker - -`POST /images/load` - -Load a set of images and tags into a Docker repository. -See the [image tarball format](docker_remote_api_v1.23.md#image-tarball-format) for more details. - -**Example request** - - POST /images/load - Content-Type: application/x-tar - - Tarball in body - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - Transfer-Encoding: chunked - - {"status":"Loading layer","progressDetail":{"current":32768,"total":1292800},"progress":"[= ] 32.77 kB/1.293 MB","id":"8ac8bfaff55a"} - {"status":"Loading layer","progressDetail":{"current":65536,"total":1292800},"progress":"[== ] 65.54 kB/1.293 MB","id":"8ac8bfaff55a"} - {"status":"Loading layer","progressDetail":{"current":98304,"total":1292800},"progress":"[=== ] 98.3 kB/1.293 MB","id":"8ac8bfaff55a"} - {"status":"Loading layer","progressDetail":{"current":131072,"total":1292800},"progress":"[===== ] 131.1 kB/1.293 MB","id":"8ac8bfaff55a"} - ... - {"stream":"Loaded image: busybox:latest\n"} - -**Example response**: - -If the "quiet" query parameter is set to `true` / `1` (`?quiet=1`), progress -details are suppressed, and only a confirmation message is returned as plain text -once the action completes. - - HTTP/1.1 200 OK - Content-Length: 29 - Content-Type: text/plain; charset=utf-8 - - Loaded image: busybox:latest - -**Query parameters**: - -- **quiet** – Boolean value, suppress progress details during load. Defaults - to `0` / `false` if omitted. - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Image tarball format - -An image tarball contains one directory per image layer (named using its long ID), -each containing these files: - -- `VERSION`: currently `1.0` - the file format version -- `json`: detailed layer information, similar to `docker inspect layer_id` -- `layer.tar`: A tarfile containing the filesystem changes in this layer - -The `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories -for storing attribute changes and deletions. - -If the tarball defines a repository, the tarball should also include a `repositories` file at -the root that contains a list of repository and tag names mapped to layer IDs. - -``` -{"hello-world": - {"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"} -} -``` - -### Exec Create - -`POST /containers/(id or name)/exec` - -Sets up an exec instance in a running container `id` - -**Example request**: - - POST /containers/e90e34656806/exec HTTP/1.1 - Content-Type: application/json - - { - "AttachStdin": true, - "AttachStdout": true, - "AttachStderr": true, - "Cmd": ["sh"], - "DetachKeys": "ctrl-p,ctrl-q", - "Privileged": true, - "Tty": true, - "User": "123:456" - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Id": "f90e34656806", - "Warnings":[] - } - -**JSON parameters**: - -- **AttachStdin** - Boolean value, attaches to `stdin` of the `exec` command. -- **AttachStdout** - Boolean value, attaches to `stdout` of the `exec` command. -- **AttachStderr** - Boolean value, attaches to `stderr` of the `exec` command. -- **DetachKeys** – Override the key sequence for detaching a - container. Format is a single character `[a-Z]` or `ctrl-` - where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. -- **Tty** - Boolean value to allocate a pseudo-TTY. -- **Cmd** - Command to run specified as a string or an array of strings. -- **Privileged** - Boolean value, runs the exec process with extended privileges. -- **User** - A string value specifying the user, and optionally, group to run - the exec process inside the container. Format is one of: `"user"`, - `"user:group"`, `"uid"`, or `"uid:gid"`. - -**Status codes**: - -- **201** – no error -- **404** – no such container -- **409** - container is paused -- **500** - server error - -### Exec Start - -`POST /exec/(id)/start` - -Starts a previously set up `exec` instance `id`. If `detach` is true, this API -returns after starting the `exec` command. Otherwise, this API sets up an -interactive session with the `exec` command. - -**Example request**: - - POST /exec/e90e34656806/start HTTP/1.1 - Content-Type: application/json - - { - "Detach": false, - "Tty": false - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/vnd.docker.raw-stream - - {% raw %} - {{ STREAM }} - {% endraw %} - -**JSON parameters**: - -- **Detach** - Detach from the `exec` command. -- **Tty** - Boolean value to allocate a pseudo-TTY. - -**Status codes**: - -- **200** – no error -- **404** – no such exec instance -- **409** - container is paused - -**Stream details**: - -Similar to the stream behavior of `POST /containers/(id or name)/attach` API - -### Exec Resize - -`POST /exec/(id)/resize` - -Resizes the `tty` session used by the `exec` command `id`. The unit is number of characters. -This API is valid only if `tty` was specified as part of creating and starting the `exec` command. - -**Example request**: - - POST /exec/e90e34656806/resize?h=40&w=80 HTTP/1.1 - Content-Type: text/plain - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: text/plain - -**Query parameters**: - -- **h** – height of `tty` session -- **w** – width - -**Status codes**: - -- **201** – no error -- **404** – no such exec instance - -### Exec Inspect - -`GET /exec/(id)/json` - -Return low-level information about the `exec` command `id`. - -**Example request**: - - GET /exec/11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "CanRemove": false, - "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", - "DetachKeys": "", - "ExitCode": 2, - "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", - "OpenStderr": true, - "OpenStdin": true, - "OpenStdout": true, - "ProcessConfig": { - "arguments": [ - "-c", - "exit 2" - ], - "entrypoint": "sh", - "privileged": false, - "tty": true, - "user": "1000" - }, - "Running": false - } - -**Status codes**: - -- **200** – no error -- **404** – no such exec instance -- **500** - server error - -## 2.4 Volumes - -### List volumes - -`GET /volumes` - -**Example request**: - - GET /volumes HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Volumes": [ - { - "Name": "tardis", - "Driver": "local", - "Mountpoint": "/var/lib/docker/volumes/tardis" - } - ], - "Warnings": [] - } - -**Query parameters**: - -- **filters** - JSON encoded value of the filters (a `map[string][]string`) to process on the volumes list. There is one available filter: `dangling=true` - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Create a volume - -`POST /volumes/create` - -Create a volume - -**Example request**: - - POST /volumes/create HTTP/1.1 - Content-Type: application/json - - { - "Name": "tardis", - "Labels": { - "com.example.some-label": "some-value", - "com.example.some-other-label": "some-other-value" - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Name": "tardis", - "Driver": "local", - "Mountpoint": "/var/lib/docker/volumes/tardis", - "Labels": { - "com.example.some-label": "some-value", - "com.example.some-other-label": "some-other-value" - } - } - -**Status codes**: - -- **201** - no error -- **500** - server error - -**JSON parameters**: - -- **Name** - The new volume's name. If not specified, Docker generates a name. -- **Driver** - Name of the volume driver to use. Defaults to `local` for the name. -- **DriverOpts** - A mapping of driver options and values. These options are - passed directly to the driver and are driver specific. -- **Labels** - Labels to set on the volume, specified as a map: `{"key":"value","key2":"value2"}` - -### Inspect a volume - -`GET /volumes/(name)` - -Return low-level information on the volume `name` - -**Example request**: - - GET /volumes/tardis - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Name": "tardis", - "Driver": "local", - "Mountpoint": "/var/lib/docker/volumes/tardis/_data", - "Labels": { - "com.example.some-label": "some-value", - "com.example.some-other-label": "some-other-value" - } - } - -**Status codes**: - -- **200** - no error -- **404** - no such volume -- **500** - server error - -### Remove a volume - -`DELETE /volumes/(name)` - -Instruct the driver to remove the volume (`name`). - -**Example request**: - - DELETE /volumes/tardis HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** - no error -- **404** - no such volume or volume driver -- **409** - volume is in use and cannot be removed -- **500** - server error - -## 3.5 Networks - -### List networks - -`GET /networks` - -**Example request**: - - GET /networks?filters={"type":{"custom":true}} HTTP/1.1 - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Type: application/json - -[ - { - "Name": "bridge", - "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", - "Scope": "local", - "Driver": "bridge", - "EnableIPv6": false, - "Internal": false, - "IPAM": { - "Driver": "default", - "Config": [ - { - "Subnet": "172.17.0.0/16" - } - ] - }, - "Containers": { - "39b69226f9d79f5634485fb236a23b2fe4e96a0a94128390a7fbbcc167065867": { - "EndpointID": "ed2419a97c1d9954d05b46e462e7002ea552f216e9b136b80a7db8d98b442eda", - "MacAddress": "02:42:ac:11:00:02", - "IPv4Address": "172.17.0.2/16", - "IPv6Address": "" - } - }, - "Options": { - "com.docker.network.bridge.default_bridge": "true", - "com.docker.network.bridge.enable_icc": "true", - "com.docker.network.bridge.enable_ip_masquerade": "true", - "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", - "com.docker.network.bridge.name": "docker0", - "com.docker.network.driver.mtu": "1500" - } - }, - { - "Name": "none", - "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", - "Scope": "local", - "Driver": "null", - "EnableIPv6": false, - "Internal": false, - "IPAM": { - "Driver": "default", - "Config": [] - }, - "Containers": {}, - "Options": {} - }, - { - "Name": "host", - "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", - "Scope": "local", - "Driver": "host", - "EnableIPv6": false, - "Internal": false, - "IPAM": { - "Driver": "default", - "Config": [] - }, - "Containers": {}, - "Options": {} - } -] -``` - -**Query parameters**: - -- **filters** - JSON encoded network list filter. The filter value is one of: - - `id=` Matches all or part of a network id. - - `name=` Matches all or part of a network name. - - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks. - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Inspect network - -`GET /networks/` - -**Example request**: - - GET /networks/7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99 HTTP/1.1 - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Type: application/json - -{ - "Name": "net01", - "Id": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99", - "Scope": "local", - "Driver": "bridge", - "EnableIPv6": false, - "IPAM": { - "Driver": "default", - "Config": [ - { - "Subnet": "172.19.0.0/16", - "Gateway": "172.19.0.1/16" - } - ], - "Options": { - "foo": "bar" - } - }, - "Internal": false, - "Containers": { - "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { - "Name": "test", - "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", - "MacAddress": "02:42:ac:13:00:02", - "IPv4Address": "172.19.0.2/16", - "IPv6Address": "" - } - }, - "Options": { - "com.docker.network.bridge.default_bridge": "true", - "com.docker.network.bridge.enable_icc": "true", - "com.docker.network.bridge.enable_ip_masquerade": "true", - "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", - "com.docker.network.bridge.name": "docker0", - "com.docker.network.driver.mtu": "1500" - }, - "Labels": { - "com.example.some-label": "some-value", - "com.example.some-other-label": "some-other-value" - } -} -``` - -**Status codes**: - -- **200** - no error -- **404** - network not found - -### Create a network - -`POST /networks/create` - -Create a network - -**Example request**: - -``` -POST /networks/create HTTP/1.1 -Content-Type: application/json - -{ - "Name":"isolated_nw", - "CheckDuplicate":false, - "Driver":"bridge", - "EnableIPv6": true, - "IPAM":{ - "Config":[ - { - "Subnet":"172.20.0.0/16", - "IPRange":"172.20.10.0/24", - "Gateway":"172.20.10.11" - }, - { - "Subnet":"2001:db8:abcd::/64", - "Gateway":"2001:db8:abcd::1011" - } - ], - "Options": { - "foo": "bar" - } - }, - "Internal":true, - "Options": { - "com.docker.network.bridge.default_bridge": "true", - "com.docker.network.bridge.enable_icc": "true", - "com.docker.network.bridge.enable_ip_masquerade": "true", - "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", - "com.docker.network.bridge.name": "docker0", - "com.docker.network.driver.mtu": "1500" - }, - "Labels": { - "com.example.some-label": "some-value", - "com.example.some-other-label": "some-other-value" - } -} -``` - -**Example response**: - -``` -HTTP/1.1 201 Created -Content-Type: application/json - -{ - "Id": "22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30", - "Warning": "" -} -``` - -**Status codes**: - -- **201** - no error -- **404** - plugin not found -- **500** - server error - -**JSON parameters**: - -- **Name** - The new network's name. this is a mandatory field -- **CheckDuplicate** - Requests daemon to check for networks with same name -- **Driver** - Name of the network driver plugin to use. Defaults to `bridge` driver -- **Internal** - Restrict external access to the network -- **IPAM** - Optional custom IP scheme for the network -- **EnableIPv6** - Enable IPv6 on the network -- **Options** - Network specific options to be used by the drivers -- **Labels** - Labels to set on the network, specified as a map: `{"key":"value" [,"key2":"value2"]}` - -### Connect a container to a network - -`POST /networks/(id)/connect` - -Connect a container to a network - -**Example request**: - -``` -POST /networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30/connect HTTP/1.1 -Content-Type: application/json - -{ - "Container":"3613f73ba0e4", - "EndpointConfig": { - "IPAMConfig": { - "IPv4Address":"172.24.56.89", - "IPv6Address":"2001:db8::5689" - } - } -} -``` - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** - no error -- **404** - network or container is not found -- **500** - Internal Server Error - -**JSON parameters**: - -- **container** - container-id/name to be connected to the network - -### Disconnect a container from a network - -`POST /networks/(id)/disconnect` - -Disconnect a container from a network - -**Example request**: - -``` -POST /networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30/disconnect HTTP/1.1 -Content-Type: application/json - -{ - "Container":"3613f73ba0e4", - "Force":false -} -``` - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** - no error -- **404** - network or container not found -- **500** - Internal Server Error - -**JSON parameters**: - -- **Container** - container-id/name to be disconnected from a network -- **Force** - Force the container to disconnect from a network - -### Remove a network - -`DELETE /networks/(id)` - -Instruct the driver to remove the network (`id`). - -**Example request**: - - DELETE /networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** - no error -- **404** - no such network -- **500** - server error - -# 3. Going further - -## 3.1 Inside `docker run` - -As an example, the `docker run` command line makes the following API calls: - -- Create the container - -- If the status code is 404, it means the image doesn't exist: - - Try to pull it. - - Then, retry to create the container. - -- Start the container. - -- If you are not in detached mode: -- Attach to the container, using `logs=1` (to have `stdout` and - `stderr` from the container's start) and `stream=1` - -- If in detached mode or only `stdin` is attached, display the container's id. - -## 3.2 Hijacking - -In this version of the API, `/attach`, uses hijacking to transport `stdin`, -`stdout`, and `stderr` on the same socket. - -To hint potential proxies about connection hijacking, Docker client sends -connection upgrade headers similarly to websocket. - - Upgrade: tcp - Connection: Upgrade - -When Docker daemon detects the `Upgrade` header, it switches its status code -from **200 OK** to **101 UPGRADED** and resends the same headers. - - -## 3.3 CORS Requests - -To set cross origin requests to the remote api please give values to -`--api-cors-header` when running Docker in daemon mode. Set * (asterisk) allows all, -default or blank means CORS disabled - - $ dockerd -H="192.168.1.9:2375" --api-cors-header="http://foo.bar" diff --git a/engine/reference/api/docker_remote_api_v1.24.md b/engine/reference/api/docker_remote_api_v1.24.md deleted file mode 100644 index e9803f1ea2..0000000000 --- a/engine/reference/api/docker_remote_api_v1.24.md +++ /dev/null @@ -1,5259 +0,0 @@ ---- -redirect_from: - - /reference/api/docker_remote_api_v1.24/ -description: API Documentation for Docker -keywords: -- API, Docker, rcli, REST, documentation -title: Docker Remote API v1.24 ---- - -# 1. Brief introduction - - - The Remote API has replaced `rcli`. - - The daemon listens on `unix:///var/run/docker.sock` but you can - [Bind Docker to another host/port or a Unix socket](../commandline/dockerd.md#bind-docker-to-another-host-port-or-a-unix-socket). - - The API tends to be REST. However, for some complex commands, like `attach` - or `pull`, the HTTP connection is hijacked to transport `stdout`, - `stdin` and `stderr`. - - When the client API version is newer than the daemon's, these calls return an HTTP - `400 Bad Request` error message. - -# 2. Errors - -The Remote API uses standard HTTP status codes to indicate the success or failure of the API call. The body of the response will be JSON in the following format: - - { - "message": "page not found" - } - -The status codes that are returned for each endpoint are specified in the endpoint documentation below. - -# 3. Endpoints - -## 3.1 Containers - -### List containers - -`GET /containers/json` - -List containers - -**Example request**: - - GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Id": "8dfafdbc3a40", - "Names":["/boring_feynman"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 1", - "Created": 1367854155, - "State": "Exited", - "Status": "Exit 0", - "Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}], - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "SizeRw": 12288, - "SizeRootFs": 0, - "HostConfig": { - "NetworkMode": "default" - }, - "NetworkSettings": { - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "2cdc4edb1ded3631c81f57966563e5c8525b81121bb3706a9a9a3ae102711f3f", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.2", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:02" - } - } - }, - "Mounts": [ - { - "Name": "fac362...80535", - "Source": "/data", - "Destination": "/data", - "Driver": "local", - "Mode": "ro,Z", - "RW": false, - "Propagation": "" - } - ] - }, - { - "Id": "9cd87474be90", - "Names":["/coolName"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 222222", - "Created": 1367854155, - "State": "Exited", - "Status": "Exit 0", - "Ports": [], - "Labels": {}, - "SizeRw": 12288, - "SizeRootFs": 0, - "HostConfig": { - "NetworkMode": "default" - }, - "NetworkSettings": { - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "88eaed7b37b38c2a3f0c4bc796494fdf51b270c2d22656412a2ca5d559a64d7a", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.8", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:08" - } - } - }, - "Mounts": [] - }, - { - "Id": "3176a2479c92", - "Names":["/sleepy_dog"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 3333333333333333", - "Created": 1367854154, - "State": "Exited", - "Status": "Exit 0", - "Ports":[], - "Labels": {}, - "SizeRw":12288, - "SizeRootFs":0, - "HostConfig": { - "NetworkMode": "default" - }, - "NetworkSettings": { - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "8b27c041c30326d59cd6e6f510d4f8d1d570a228466f956edf7815508f78e30d", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.6", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:06" - } - } - }, - "Mounts": [] - }, - { - "Id": "4cb07b47f9fb", - "Names":["/running_cat"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 444444444444444444444444444444444", - "Created": 1367854152, - "State": "Exited", - "Status": "Exit 0", - "Ports": [], - "Labels": {}, - "SizeRw": 12288, - "SizeRootFs": 0, - "HostConfig": { - "NetworkMode": "default" - }, - "NetworkSettings": { - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "d91c7b2f0644403d7ef3095985ea0e2370325cd2332ff3a3225c4247328e66e9", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.5", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:05" - } - } - }, - "Mounts": [] - } - ] - -**Query parameters**: - -- **all** – 1/True/true or 0/False/false, Show all containers. - Only running containers are shown by default (i.e., this defaults to false) -- **limit** – Show `limit` last created - containers, include non-running ones. -- **since** – Show only containers created since Id, include - non-running ones. -- **before** – Show only containers created before Id, include - non-running ones. -- **size** – 1/True/true or 0/False/false, Show the containers - sizes -- **filters** - a JSON encoded value of the filters (a `map[string][]string`) to process on the containers list. Available filters: - - `exited=`; -- containers with exit code of `` ; - - `status=`(`created`|`restarting`|`running`|`paused`|`exited`|`dead`) - - `label=key` or `label="key=value"` of a container label - - `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only) - - `ancestor`=(`[:]`, `` or ``) - - `before`=(`` or ``) - - `since`=(`` or ``) - - `volume`=(`` or ``) - - `network`=(`` or ``) - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **500** – server error - -### Create a container - -`POST /containers/create` - -Create a container - -**Example request**: - - POST /containers/create HTTP/1.1 - Content-Type: application/json - - { - "Hostname": "", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": true, - "AttachStderr": true, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": [ - "FOO=bar", - "BAZ=quux" - ], - "Cmd": [ - "date" - ], - "Entrypoint": "", - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "Volumes": { - "/volumes/data": {} - }, - "WorkingDir": "", - "NetworkDisabled": false, - "MacAddress": "12:34:56:78:9a:bc", - "ExposedPorts": { - "22/tcp": {} - }, - "StopSignal": "SIGTERM", - "HostConfig": { - "Binds": ["/tmp:/tmp"], - "Links": ["redis3:redis"], - "Memory": 0, - "MemorySwap": 0, - "MemoryReservation": 0, - "KernelMemory": 0, - "CpuPercent": 80, - "CpuShares": 512, - "CpuPeriod": 100000, - "CpuQuota": 50000, - "CpusetCpus": "0,1", - "CpusetMems": "0,1", - "IOMaximumBandwidth": 0, - "IOMaximumIOps": 0, - "BlkioWeight": 300, - "BlkioWeightDevice": [{}], - "BlkioDeviceReadBps": [{}], - "BlkioDeviceReadIOps": [{}], - "BlkioDeviceWriteBps": [{}], - "BlkioDeviceWriteIOps": [{}], - "MemorySwappiness": 60, - "OomKillDisable": false, - "OomScoreAdj": 500, - "PidMode": "", - "PidsLimit": -1, - "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] }, - "PublishAllPorts": false, - "Privileged": false, - "ReadonlyRootfs": false, - "Dns": ["8.8.8.8"], - "DnsOptions": [""], - "DnsSearch": [""], - "ExtraHosts": null, - "VolumesFrom": ["parent", "other:ro"], - "CapAdd": ["NET_ADMIN"], - "CapDrop": ["MKNOD"], - "GroupAdd": ["newgroup"], - "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 }, - "NetworkMode": "bridge", - "Devices": [], - "Sysctls": { "net.ipv4.ip_forward": "1" }, - "Ulimits": [{}], - "LogConfig": { "Type": "json-file", "Config": {} }, - "SecurityOpt": [], - "StorageOpt": {}, - "CgroupParent": "", - "VolumeDriver": "", - "ShmSize": 67108864 - }, - "NetworkingConfig": { - "EndpointsConfig": { - "isolated_nw" : { - "IPAMConfig": { - "IPv4Address":"172.20.30.33", - "IPv6Address":"2001:db8:abcd::3033", - "LinkLocalIPs":["169.254.34.68", "fe80::3468"] - }, - "Links":["container_1", "container_2"], - "Aliases":["server_x", "server_y"] - } - } - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Id":"e90e34656806", - "Warnings":[] - } - -**JSON parameters**: - -- **Hostname** - A string value containing the hostname to use for the - container. This must be a valid RFC 1123 hostname. -- **Domainname** - A string value containing the domain name to use - for the container. -- **User** - A string value specifying the user inside the container. -- **AttachStdin** - Boolean value, attaches to `stdin`. -- **AttachStdout** - Boolean value, attaches to `stdout`. -- **AttachStderr** - Boolean value, attaches to `stderr`. -- **Tty** - Boolean value, Attach standard streams to a `tty`, including `stdin` if it is not closed. -- **OpenStdin** - Boolean value, opens `stdin`, -- **StdinOnce** - Boolean value, close `stdin` after the 1 attached client disconnects. -- **Env** - A list of environment variables in the form of `["VAR=value"[,"VAR2=value2"]]` -- **Labels** - Adds a map of labels to a container. To specify a map: `{"key":"value"[,"key2":"value2"]}` -- **Cmd** - Command to run specified as a string or an array of strings. -- **Entrypoint** - Set the entry point for the container as a string or an array - of strings. -- **Image** - A string specifying the image name to use for the container. -- **Volumes** - An object mapping mount point paths (strings) inside the - container to empty objects. -- **WorkingDir** - A string specifying the working directory for commands to - run in. -- **NetworkDisabled** - Boolean value, when true disables networking for the - container -- **ExposedPorts** - An object mapping ports to an empty object in the form of: - `"ExposedPorts": { "/: {}" }` -- **StopSignal** - Signal to stop a container as a string or unsigned integer. `SIGTERM` by default. -- **HostConfig** - - **Binds** – A list of volume bindings for this container. Each volume binding is a string in one of these forms: - + `host-src:container-dest` to bind-mount a host path into the - container. Both `host-src`, and `container-dest` must be an - _absolute_ path. - + `host-src:container-dest:ro` to make the bind-mount read-only - inside the container. Both `host-src`, and `container-dest` must be - an _absolute_ path. - + `volume-name:container-dest` to bind-mount a volume managed by a - volume driver into the container. `container-dest` must be an - _absolute_ path. - + `volume-name:container-dest:ro` to mount the volume read-only - inside the container. `container-dest` must be an _absolute_ path. - - **Links** - A list of links for the container. Each link entry should be - in the form of `container_name:alias`. - - **Memory** - Memory limit in bytes. - - **MemorySwap** - Total memory limit (memory + swap); set `-1` to enable unlimited swap. - You must use this with `memory` and make the swap value larger than `memory`. - - **MemoryReservation** - Memory soft limit in bytes. - - **KernelMemory** - Kernel memory limit in bytes. - - **CpuPercent** - An integer value containing the usable percentage of the available CPUs. (Windows daemon only) - - **CpuShares** - An integer value containing the container's CPU Shares - (ie. the relative weight vs other containers). - - **CpuPeriod** - The length of a CPU period in microseconds. - - **CpuQuota** - Microseconds of CPU time that the container can get in a CPU period. - - **CpusetCpus** - String value containing the `cgroups CpusetCpus` to use. - - **CpusetMems** - Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. - - **IOMaximumBandwidth** - Maximum IO absolute rate in terms of IOps. - - **IOMaximumIOps** - Maximum IO absolute rate in terms of bytes per second. - - **BlkioWeight** - Block IO weight (relative weight) accepts a weight value between 10 and 1000. - - **BlkioWeightDevice** - Block IO weight (relative device weight) in the form of: `"BlkioWeightDevice": [{"Path": "device_path", "Weight": weight}]` - - **BlkioDeviceReadBps** - Limit read rate (bytes per second) from a device in the form of: `"BlkioDeviceReadBps": [{"Path": "device_path", "Rate": rate}]`, for example: - `"BlkioDeviceReadBps": [{"Path": "/dev/sda", "Rate": "1024"}]"` - - **BlkioDeviceWriteBps** - Limit write rate (bytes per second) to a device in the form of: `"BlkioDeviceWriteBps": [{"Path": "device_path", "Rate": rate}]`, for example: - `"BlkioDeviceWriteBps": [{"Path": "/dev/sda", "Rate": "1024"}]"` - - **BlkioDeviceReadIOps** - Limit read rate (IO per second) from a device in the form of: `"BlkioDeviceReadIOps": [{"Path": "device_path", "Rate": rate}]`, for example: - `"BlkioDeviceReadIOps": [{"Path": "/dev/sda", "Rate": "1000"}]` - - **BlkioDeviceWiiteIOps** - Limit write rate (IO per second) to a device in the form of: `"BlkioDeviceWriteIOps": [{"Path": "device_path", "Rate": rate}]`, for example: - `"BlkioDeviceWriteIOps": [{"Path": "/dev/sda", "Rate": "1000"}]` - - **MemorySwappiness** - Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. - - **OomKillDisable** - Boolean value, whether to disable OOM Killer for the container or not. - - **OomScoreAdj** - An integer value containing the score given to the container in order to tune OOM killer preferences. - - **PidMode** - Set the PID (Process) Namespace mode for the container; - `"container:"`: joins another container's PID namespace - `"host"`: use the host's PID namespace inside the container - - **PidsLimit** - Tune a container's pids limit. Set -1 for unlimited. - - **PortBindings** - A map of exposed container ports and the host port they - should map to. A JSON object in the form - `{ /: [{ "HostPort": "" }] }` - Take note that `port` is specified as a string and not an integer value. - - **PublishAllPorts** - Allocates a random host port for all of a container's - exposed ports. Specified as a boolean value. - - **Privileged** - Gives the container full access to the host. Specified as - a boolean value. - - **ReadonlyRootfs** - Mount the container's root filesystem as read only. - Specified as a boolean value. - - **Dns** - A list of DNS servers for the container to use. - - **DnsOptions** - A list of DNS options - - **DnsSearch** - A list of DNS search domains - - **ExtraHosts** - A list of hostnames/IP mappings to add to the - container's `/etc/hosts` file. Specified in the form `["hostname:IP"]`. - - **VolumesFrom** - A list of volumes to inherit from another container. - Specified in the form `[:]` - - **CapAdd** - A list of kernel capabilities to add to the container. - - **Capdrop** - A list of kernel capabilities to drop from the container. - - **GroupAdd** - A list of additional groups that the container process will run as - - **RestartPolicy** – The behavior to apply when the container exits. The - value is an object with a `Name` property of either `"always"` to - always restart, `"unless-stopped"` to restart always except when - user has manually stopped the container or `"on-failure"` to restart only when the container - exit code is non-zero. If `on-failure` is used, `MaximumRetryCount` - controls the number of times to retry before giving up. - The default is not to restart. (optional) - An ever increasing delay (double the previous delay, starting at 100mS) - is added before each restart to prevent flooding the server. - - **UsernsMode** - Sets the usernamespace mode for the container when usernamespace remapping option is enabled. - supported values are: `host`. - - **NetworkMode** - Sets the networking mode for the container. Supported - standard values are: `bridge`, `host`, `none`, and `container:`. Any other value is taken - as a custom network's name to which this container should connect to. - - **Devices** - A list of devices to add to the container specified as a JSON object in the - form - `{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}` - - **Ulimits** - A list of ulimits to set in the container, specified as - `{ "Name": , "Soft": , "Hard": }`, for example: - `Ulimits: { "Name": "nofile", "Soft": 1024, "Hard": 2048 }` - - **Sysctls** - A list of kernel parameters (sysctls) to set in the container, specified as - `{ : }`, for example: - `{ "net.ipv4.ip_forward": "1" }` - - **SecurityOpt**: A list of string values to customize labels for MLS - systems, such as SELinux. - - **StorageOpt**: Storage driver options per container. Options can be passed in the form - `{"size":"120G"}` - - **LogConfig** - Log configuration for the container, specified as a JSON object in the form - `{ "Type": "", "Config": {"key1": "val1"}}`. - Available types: `json-file`, `syslog`, `journald`, `gelf`, `fluentd`, `awslogs`, `splunk`, `etwlogs`, `none`. - `json-file` logging driver. - - **CgroupParent** - Path to `cgroups` under which the container's `cgroup` is created. If the path is not absolute, the path is considered to be relative to the `cgroups` path of the init process. Cgroups are created if they do not already exist. - - **VolumeDriver** - Driver that this container users to mount volumes. - - **ShmSize** - Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB. - -**Query parameters**: - -- **name** – Assign the specified name to the container. Must - match `/?[a-zA-Z0-9_-]+`. - -**Status codes**: - -- **201** – no error -- **400** – bad parameter -- **404** – no such container -- **406** – impossible to attach (container not running) -- **409** – conflict -- **500** – server error - -### Inspect a container - -`GET /containers/(id or name)/json` - -Return low-level information on the container `id` - -**Example request**: - - GET /containers/4fa6e0f0c678/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "AppArmorProfile": "", - "Args": [ - "-c", - "exit 9" - ], - "Config": { - "AttachStderr": true, - "AttachStdin": false, - "AttachStdout": true, - "Cmd": [ - "/bin/sh", - "-c", - "exit 9" - ], - "Domainname": "", - "Entrypoint": null, - "Env": [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "ExposedPorts": null, - "Hostname": "ba033ac44011", - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "MacAddress": "", - "NetworkDisabled": false, - "OnBuild": null, - "OpenStdin": false, - "StdinOnce": false, - "Tty": false, - "User": "", - "Volumes": { - "/volumes/data": {} - }, - "WorkingDir": "", - "StopSignal": "SIGTERM" - }, - "Created": "2015-01-06T15:47:31.485331387Z", - "Driver": "devicemapper", - "ExecIDs": null, - "HostConfig": { - "Binds": null, - "IOMaximumBandwidth": 0, - "IOMaximumIOps": 0, - "BlkioWeight": 0, - "BlkioWeightDevice": [{}], - "BlkioDeviceReadBps": [{}], - "BlkioDeviceWriteBps": [{}], - "BlkioDeviceReadIOps": [{}], - "BlkioDeviceWriteIOps": [{}], - "CapAdd": null, - "CapDrop": null, - "ContainerIDFile": "", - "CpusetCpus": "", - "CpusetMems": "", - "CpuPercent": 80, - "CpuShares": 0, - "CpuPeriod": 100000, - "Devices": [], - "Dns": null, - "DnsOptions": null, - "DnsSearch": null, - "ExtraHosts": null, - "IpcMode": "", - "Links": null, - "LxcConf": [], - "Memory": 0, - "MemorySwap": 0, - "MemoryReservation": 0, - "KernelMemory": 0, - "OomKillDisable": false, - "OomScoreAdj": 500, - "NetworkMode": "bridge", - "PidMode": "", - "PortBindings": {}, - "Privileged": false, - "ReadonlyRootfs": false, - "PublishAllPorts": false, - "RestartPolicy": { - "MaximumRetryCount": 2, - "Name": "on-failure" - }, - "LogConfig": { - "Config": null, - "Type": "json-file" - }, - "SecurityOpt": null, - "Sysctls": { - "net.ipv4.ip_forward": "1" - }, - "StorageOpt": null, - "VolumesFrom": null, - "Ulimits": [{}], - "VolumeDriver": "", - "ShmSize": 67108864 - }, - "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", - "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", - "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", - "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", - "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", - "MountLabel": "", - "Name": "/boring_euclid", - "NetworkSettings": { - "Bridge": "", - "SandboxID": "", - "HairpinMode": false, - "LinkLocalIPv6Address": "", - "LinkLocalIPv6PrefixLen": 0, - "Ports": null, - "SandboxKey": "", - "SecondaryIPAddresses": null, - "SecondaryIPv6Addresses": null, - "EndpointID": "", - "Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "IPAddress": "", - "IPPrefixLen": 0, - "IPv6Gateway": "", - "MacAddress": "", - "Networks": { - "bridge": { - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.2", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:12:00:02" - } - } - }, - "Path": "/bin/sh", - "ProcessLabel": "", - "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", - "RestartCount": 1, - "State": { - "Error": "", - "ExitCode": 9, - "FinishedAt": "2015-01-06T15:47:32.080254511Z", - "OOMKilled": false, - "Dead": false, - "Paused": false, - "Pid": 0, - "Restarting": false, - "Running": true, - "StartedAt": "2015-01-06T15:47:32.072697474Z", - "Status": "running" - }, - "Mounts": [ - { - "Name": "fac362...80535", - "Source": "/data", - "Destination": "/data", - "Driver": "local", - "Mode": "ro,Z", - "RW": false, - "Propagation": "" - } - ] - } - -**Example request, with size information**: - - GET /containers/4fa6e0f0c678/json?size=1 HTTP/1.1 - -**Example response, with size information**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - .... - "SizeRw": 0, - "SizeRootFs": 972, - .... - } - -**Query parameters**: - -- **size** – 1/True/true or 0/False/false, return container size information. Default is `false`. - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### List processes running inside a container - -`GET /containers/(id or name)/top` - -List processes running inside the container `id`. On Unix systems this -is done by running the `ps` command. This endpoint is not -supported on Windows. - -**Example request**: - - GET /containers/4fa6e0f0c678/top HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Titles" : [ - "UID", "PID", "PPID", "C", "STIME", "TTY", "TIME", "CMD" - ], - "Processes" : [ - [ - "root", "13642", "882", "0", "17:03", "pts/0", "00:00:00", "/bin/bash" - ], - [ - "root", "13735", "13642", "0", "17:06", "pts/0", "00:00:00", "sleep 10" - ] - ] - } - -**Example request**: - - GET /containers/4fa6e0f0c678/top?ps_args=aux HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Titles" : [ - "USER","PID","%CPU","%MEM","VSZ","RSS","TTY","STAT","START","TIME","COMMAND" - ] - "Processes" : [ - [ - "root","13642","0.0","0.1","18172","3184","pts/0","Ss","17:03","0:00","/bin/bash" - ], - [ - "root","13895","0.0","0.0","4348","692","pts/0","S+","17:15","0:00","sleep 10" - ] - ], - } - -**Query parameters**: - -- **ps_args** – `ps` arguments to use (e.g., `aux`), defaults to `-ef` - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Get container logs - -`GET /containers/(id or name)/logs` - -Get `stdout` and `stderr` logs from the container ``id`` - -> **Note**: -> This endpoint works only for containers with the `json-file` or `journald` logging drivers. - -**Example request**: - - GET /containers/4fa6e0f0c678/logs?stderr=1&stdout=1×tamps=1&follow=1&tail=10&since=1428990821 HTTP/1.1 - -**Example response**: - - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **details** - 1/True/true or 0/False/flase, Show extra details provided to logs. Default `false`. -- **follow** – 1/True/true or 0/False/false, return stream. Default `false`. -- **stdout** – 1/True/true or 0/False/false, show `stdout` log. Default `false`. -- **stderr** – 1/True/true or 0/False/false, show `stderr` log. Default `false`. -- **since** – UNIX timestamp (integer) to filter logs. Specifying a timestamp - will only output log-entries since that timestamp. Default: 0 (unfiltered) -- **timestamps** – 1/True/true or 0/False/false, print timestamps for - every log line. Default `false`. -- **tail** – Output specified number of lines at the end of logs: `all` or ``. Default all. - -**Status codes**: - -- **101** – no error, hints proxy about hijacking -- **200** – no error, no upgrade header found -- **404** – no such container -- **500** – server error - -### Inspect changes on a container's filesystem - -`GET /containers/(id or name)/changes` - -Inspect changes on container `id`'s filesystem - -**Example request**: - - GET /containers/4fa6e0f0c678/changes HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Path": "/dev", - "Kind": 0 - }, - { - "Path": "/dev/kmsg", - "Kind": 1 - }, - { - "Path": "/test", - "Kind": 1 - } - ] - -Values for `Kind`: - -- `0`: Modify -- `1`: Add -- `2`: Delete - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Export a container - -`GET /containers/(id or name)/export` - -Export the contents of container `id` - -**Example request**: - - GET /containers/4fa6e0f0c678/export HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/octet-stream - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Get container stats based on resource usage - -`GET /containers/(id or name)/stats` - -This endpoint returns a live stream of a container's resource usage statistics. - -**Example request**: - - GET /containers/redis1/stats HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "read" : "2015-01-08T22:57:31.547920715Z", - "pids_stats": { - "current": 3 - }, - "networks": { - "eth0": { - "rx_bytes": 5338, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 36, - "tx_bytes": 648, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 8 - }, - "eth5": { - "rx_bytes": 4641, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 26, - "tx_bytes": 690, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 9 - } - }, - "memory_stats" : { - "stats" : { - "total_pgmajfault" : 0, - "cache" : 0, - "mapped_file" : 0, - "total_inactive_file" : 0, - "pgpgout" : 414, - "rss" : 6537216, - "total_mapped_file" : 0, - "writeback" : 0, - "unevictable" : 0, - "pgpgin" : 477, - "total_unevictable" : 0, - "pgmajfault" : 0, - "total_rss" : 6537216, - "total_rss_huge" : 6291456, - "total_writeback" : 0, - "total_inactive_anon" : 0, - "rss_huge" : 6291456, - "hierarchical_memory_limit" : 67108864, - "total_pgfault" : 964, - "total_active_file" : 0, - "active_anon" : 6537216, - "total_active_anon" : 6537216, - "total_pgpgout" : 414, - "total_cache" : 0, - "inactive_anon" : 0, - "active_file" : 0, - "pgfault" : 964, - "inactive_file" : 0, - "total_pgpgin" : 477 - }, - "max_usage" : 6651904, - "usage" : 6537216, - "failcnt" : 0, - "limit" : 67108864 - }, - "blkio_stats" : {}, - "cpu_stats" : { - "cpu_usage" : { - "percpu_usage" : [ - 8646879, - 24472255, - 36438778, - 30657443 - ], - "usage_in_usermode" : 50000000, - "total_usage" : 100215355, - "usage_in_kernelmode" : 30000000 - }, - "system_cpu_usage" : 739306590000000, - "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0} - }, - "precpu_stats" : { - "cpu_usage" : { - "percpu_usage" : [ - 8646879, - 24350896, - 36438778, - 30657443 - ], - "usage_in_usermode" : 50000000, - "total_usage" : 100093996, - "usage_in_kernelmode" : 30000000 - }, - "system_cpu_usage" : 9492140000000, - "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0} - } - } - -The precpu_stats is the cpu statistic of last read, which is used for calculating the cpu usage percent. It is not the exact copy of the “cpu_stats” field. - -**Query parameters**: - -- **stream** – 1/True/true or 0/False/false, pull stats once then disconnect. Default `true`. - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Resize a container TTY - -`POST /containers/(id or name)/resize` - -Resize the TTY for container with `id`. The unit is number of characters. You must restart the container for the resize to take effect. - -**Example request**: - - POST /containers/4fa6e0f0c678/resize?h=40&w=80 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Query parameters**: - -- **h** – height of `tty` session -- **w** – width - -**Status codes**: - -- **200** – no error -- **404** – No such container -- **500** – Cannot resize container - -### Start a container - -`POST /containers/(id or name)/start` - -Start the container `id` - -**Example request**: - - POST /containers/e90e34656806/start HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **detachKeys** – Override the key sequence for detaching a - container. Format is a single character `[a-Z]` or `ctrl-` - where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. - -**Status codes**: - -- **204** – no error -- **304** – container already started -- **404** – no such container -- **500** – server error - -### Stop a container - -`POST /containers/(id or name)/stop` - -Stop the container `id` - -**Example request**: - - POST /containers/e90e34656806/stop?t=5 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **t** – number of seconds to wait before killing the container - -**Status codes**: - -- **204** – no error -- **304** – container already stopped -- **404** – no such container -- **500** – server error - -### Restart a container - -`POST /containers/(id or name)/restart` - -Restart the container `id` - -**Example request**: - - POST /containers/e90e34656806/restart?t=5 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **t** – number of seconds to wait before killing the container - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Kill a container - -`POST /containers/(id or name)/kill` - -Kill the container `id` - -**Example request**: - - POST /containers/e90e34656806/kill HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **signal** - Signal to send to the container: integer or string like `SIGINT`. - When not set, `SIGKILL` is assumed and the call waits for the container to exit. - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Update a container - -`POST /containers/(id or name)/update` - -Update configuration of one or more containers. - -**Example request**: - - POST /containers/e90e34656806/update HTTP/1.1 - Content-Type: application/json - - { - "BlkioWeight": 300, - "CpuShares": 512, - "CpuPeriod": 100000, - "CpuQuota": 50000, - "CpusetCpus": "0,1", - "CpusetMems": "0", - "Memory": 314572800, - "MemorySwap": 514288000, - "MemoryReservation": 209715200, - "KernelMemory": 52428800, - "RestartPolicy": { - "MaximumRetryCount": 4, - "Name": "on-failure" - }, - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Warnings": [] - } - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **404** – no such container -- **500** – server error - -### Rename a container - -`POST /containers/(id or name)/rename` - -Rename the container `id` to a `new_name` - -**Example request**: - - POST /containers/e90e34656806/rename?name=new_name HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **name** – new name for the container - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **409** - conflict name already assigned -- **500** – server error - -### Pause a container - -`POST /containers/(id or name)/pause` - -Pause the container `id` - -**Example request**: - - POST /containers/e90e34656806/pause HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Unpause a container - -`POST /containers/(id or name)/unpause` - -Unpause the container `id` - -**Example request**: - - POST /containers/e90e34656806/unpause HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Attach to a container - -`POST /containers/(id or name)/attach` - -Attach to the container `id` - -**Example request**: - - POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **detachKeys** – Override the key sequence for detaching a - container. Format is a single character `[a-Z]` or `ctrl-` - where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. -- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. -- **stream** – 1/True/true or 0/False/false, return stream. - Default `false`. -- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach - to `stdin`. Default `false`. -- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return - `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. -- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return - `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. - -**Status codes**: - -- **101** – no error, hints proxy about hijacking -- **200** – no error, no upgrade header found -- **400** – bad parameter -- **404** – no such container -- **409** - container is paused -- **500** – server error - -**Stream details**: - -When using the TTY setting is enabled in -[`POST /containers/create` -](docker_remote_api_v1.24.md#create-a-container), -the stream is the raw data from the process PTY and client's `stdin`. -When the TTY is disabled, then the stream is multiplexed to separate -`stdout` and `stderr`. - -The format is a **Header** and a **Payload** (frame). - -**HEADER** - -The header contains the information which the stream writes (`stdout` or -`stderr`). It also contains the size of the associated frame encoded in the -last four bytes (`uint32`). - -It is encoded on the first eight bytes like this: - - header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} - -`STREAM_TYPE` can be: - -- 0: `stdin` (is written on `stdout`) -- 1: `stdout` -- 2: `stderr` - -`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of -the `uint32` size encoded as big endian. - -**PAYLOAD** - -The payload is the raw stream. - -**IMPLEMENTATION** - -The simplest way to implement the Attach protocol is the following: - - 1. Read eight bytes. - 2. Choose `stdout` or `stderr` depending on the first byte. - 3. Extract the frame size from the last four bytes. - 4. Read the extracted size and output it on the correct output. - 5. Goto 1. - -### Attach to a container (websocket) - -`GET /containers/(id or name)/attach/ws` - -Attach to the container `id` via websocket - -Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455) - -**Example request** - - GET /containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1 - -**Example response** - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **detachKeys** – Override the key sequence for detaching a - container. Format is a single character `[a-Z]` or `ctrl-` - where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. -- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. -- **stream** – 1/True/true or 0/False/false, return stream. - Default `false`. -- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach - to `stdin`. Default `false`. -- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return - `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. -- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return - `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **404** – no such container -- **500** – server error - -### Wait a container - -`POST /containers/(id or name)/wait` - -Block until container `id` stops, then returns the exit code - -**Example request**: - - POST /containers/16253994b7c4/wait HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"StatusCode": 0} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Remove a container - -`DELETE /containers/(id or name)` - -Remove the container `id` from the filesystem - -**Example request**: - - DELETE /containers/16253994b7c4?v=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **v** – 1/True/true or 0/False/false, Remove the volumes - associated to the container. Default `false`. -- **force** - 1/True/true or 0/False/false, Kill then remove the container. - Default `false`. - -**Status codes**: - -- **204** – no error -- **400** – bad parameter -- **404** – no such container -- **409** – conflict -- **500** – server error - -### Retrieving information about files and folders in a container - -`HEAD /containers/(id or name)/archive` - -See the description of the `X-Docker-Container-Path-Stat` header in the -following section. - -### Get an archive of a filesystem resource in a container - -`GET /containers/(id or name)/archive` - -Get a tar archive of a resource in the filesystem of container `id`. - -**Query parameters**: - -- **path** - resource in the container's filesystem to archive. Required. - - If not an absolute path, it is relative to the container's root directory. - The resource specified by **path** must exist. To assert that the resource - is expected to be a directory, **path** should end in `/` or `/.` - (assuming a path separator of `/`). If **path** ends in `/.` then this - indicates that only the contents of the **path** directory should be - copied. A symlink is always resolved to its target. - - > **Note**: It is not possible to copy certain system files such as resources - > under `/proc`, `/sys`, `/dev`, and mounts created by the user in the - > container. - -**Example request**: - - GET /containers/8cce319429b2/archive?path=/root HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - X-Docker-Container-Path-Stat: eyJuYW1lIjoicm9vdCIsInNpemUiOjQwOTYsIm1vZGUiOjIxNDc0ODQwOTYsIm10aW1lIjoiMjAxNC0wMi0yN1QyMDo1MToyM1oiLCJsaW5rVGFyZ2V0IjoiIn0= - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -On success, a response header `X-Docker-Container-Path-Stat` will be set to a -base64-encoded JSON object containing some filesystem header information about -the archived resource. The above example value would decode to the following -JSON object (whitespace added for readability): - -```json -{ - "name": "root", - "size": 4096, - "mode": 2147484096, - "mtime": "2014-02-27T20:51:23Z", - "linkTarget": "" -} -``` - -A `HEAD` request can also be made to this endpoint if only this information is -desired. - -**Status codes**: - -- **200** - success, returns archive of copied resource -- **400** - client error, bad parameter, details in JSON response body, one of: - - must specify path parameter (**path** cannot be empty) - - not a directory (**path** was asserted to be a directory but exists as a - file) -- **404** - client error, resource not found, one of: - – no such container (container `id` does not exist) - - no such file or directory (**path** does not exist) -- **500** - server error - -### Extract an archive of files or folders to a directory in a container - -`PUT /containers/(id or name)/archive` - -Upload a tar archive to be extracted to a path in the filesystem of container -`id`. - -**Query parameters**: - -- **path** - path to a directory in the container - to extract the archive's contents into. Required. - - If not an absolute path, it is relative to the container's root directory. - The **path** resource must exist. -- **noOverwriteDirNonDir** - If "1", "true", or "True" then it will be an error - if unpacking the given content would cause an existing directory to be - replaced with a non-directory and vice versa. - -**Example request**: - - PUT /containers/8cce319429b2/archive?path=/vol1 HTTP/1.1 - Content-Type: application/x-tar - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** – the content was extracted successfully -- **400** - client error, bad parameter, details in JSON response body, one of: - - must specify path parameter (**path** cannot be empty) - - not a directory (**path** should be a directory but exists as a file) - - unable to overwrite existing directory with non-directory - (if **noOverwriteDirNonDir**) - - unable to overwrite existing non-directory with directory - (if **noOverwriteDirNonDir**) -- **403** - client error, permission denied, the volume - or container rootfs is marked as read-only. -- **404** - client error, resource not found, one of: - – no such container (container `id` does not exist) - - no such file or directory (**path** resource does not exist) -- **500** – server error - -## 3.2 Images - -### List Images - -`GET /images/json` - -**Example request**: - - GET /images/json?all=0 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "RepoTags": [ - "ubuntu:12.04", - "ubuntu:precise", - "ubuntu:latest" - ], - "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c", - "Created": 1365714795, - "Size": 131506275, - "VirtualSize": 131506275, - "Labels": {} - }, - { - "RepoTags": [ - "ubuntu:12.10", - "ubuntu:quantal" - ], - "ParentId": "27cf784147099545", - "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", - "Created": 1364102658, - "Size": 24653, - "VirtualSize": 180116135, - "Labels": { - "com.example.version": "v1" - } - } - ] - -**Example request, with digest information**: - - GET /images/json?digests=1 HTTP/1.1 - -**Example response, with digest information**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Created": 1420064636, - "Id": "4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125", - "ParentId": "ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2", - "RepoDigests": [ - "localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" - ], - "RepoTags": [ - "localhost:5000/test/busybox:latest", - "playdate:latest" - ], - "Size": 0, - "VirtualSize": 2429728, - "Labels": {} - } - ] - -The response shows a single image `Id` associated with two repositories -(`RepoTags`): `localhost:5000/test/busybox`: and `playdate`. A caller can use -either of the `RepoTags` values `localhost:5000/test/busybox:latest` or -`playdate:latest` to reference the image. - -You can also use `RepoDigests` values to reference an image. In this response, -the array has only one reference and that is to the -`localhost:5000/test/busybox` repository; the `playdate` repository has no -digest. You can reference this digest using the value: -`localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d...` - -See the `docker run` and `docker build` commands for examples of digest and tag -references on the command line. - -**Query parameters**: - -- **all** – 1/True/true or 0/False/false, default false -- **filters** – a JSON encoded value of the filters (a map[string][]string) to process on the images list. Available filters: - - `dangling=true` - - `label=key` or `label="key=value"` of an image label - - `before`=(`[:]`, `` or ``) - - `since`=(`[:]`, `` or ``) -- **filter** - only return images with the specified name - -### Build image from a Dockerfile - -`POST /build` - -Build an image from a Dockerfile - -**Example request**: - - POST /build HTTP/1.1 - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"stream": "Step 1..."} - {"stream": "..."} - {"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}} - -The input stream must be a `tar` archive compressed with one of the -following algorithms: `identity` (no compression), `gzip`, `bzip2`, `xz`. - -The archive must include a build instructions file, typically called -`Dockerfile` at the archive's root. The `dockerfile` parameter may be -used to specify a different build instructions file. To do this, its value must be -the path to the alternate build instructions file to use. - -The archive may include any number of other files, -which are accessible in the build context (See the [*ADD build -command*](../../reference/builder.md#add)). - -The build is canceled if the client drops the connection by quitting -or being killed. - -**Query parameters**: - -- **dockerfile** - Path within the build context to the `Dockerfile`. This is - ignored if `remote` is specified and points to an external `Dockerfile`. -- **t** – A name and optional tag to apply to the image in the `name:tag` format. - If you omit the `tag` the default `latest` value is assumed. - You can provide one or more `t` parameters. -- **remote** – A Git repository URI or HTTP/HTTPS context URI. If the - URI points to a single text file, the file's contents are placed into - a file called `Dockerfile` and the image is built from that file. If - the URI points to a tarball, the file is downloaded by the daemon and - the contents therein used as the context for the build. If the URI - points to a tarball and the `dockerfile` parameter is also specified, - there must be a file with the corresponding path inside the tarball. -- **q** – Suppress verbose build output. -- **nocache** – Do not use the cache when building the image. -- **pull** - Attempt to pull the image even if an older image exists locally. -- **rm** - Remove intermediate containers after a successful build (default behavior). -- **forcerm** - Always remove intermediate containers (includes `rm`). -- **memory** - Set memory limit for build. -- **memswap** - Total memory (memory + swap), `-1` to enable unlimited swap. -- **cpushares** - CPU shares (relative weight). -- **cpusetcpus** - CPUs in which to allow execution (e.g., `0-3`, `0,1`). -- **cpuperiod** - The length of a CPU period in microseconds. -- **cpuquota** - Microseconds of CPU time that the container can get in a CPU period. -- **buildargs** – JSON map of string pairs for build-time variables. Users pass - these values at build-time. Docker uses the `buildargs` as the environment - context for command(s) run via the Dockerfile's `RUN` instruction or for - variable expansion in other Dockerfile instructions. This is not meant for - passing secret values. [Read more about the buildargs instruction](../../reference/builder.md#arg) -- **shmsize** - Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB. -- **labels** – JSON map of string pairs for labels to set on the image. - -**Request Headers**: - -- **Content-type** – Set to `"application/tar"`. -- **X-Registry-Config** – A base64-url-safe-encoded Registry Auth Config JSON - object with the following structure: - - { - "docker.example.com": { - "username": "janedoe", - "password": "hunter2" - }, - "https://index.docker.io/v1/": { - "username": "mobydock", - "password": "conta1n3rize14" - } - } - - This object maps the hostname of a registry to an object containing the - "username" and "password" for that registry. Multiple registries may - be specified as the build may be based on an image requiring - authentication to pull from any arbitrary registry. Only the registry - domain name (and port if not the default "443") are required. However - (for legacy reasons) the "official" Docker, Inc. hosted registry must - be specified with both a "https://" prefix and a "/v1/" suffix even - though Docker will prefer to use the v2 registry API. - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Create an image - -`POST /images/create` - -Create an image either by pulling it from the registry or by importing it - -**Example request**: - - POST /images/create?fromImage=busybox&tag=latest HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "Pulling..."} - {"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}} - {"error": "Invalid..."} - ... - -When using this endpoint to pull an image from the registry, the -`X-Registry-Auth` header can be used to include -a base64-encoded AuthConfig object. - -**Query parameters**: - -- **fromImage** – Name of the image to pull. The name may include a tag or - digest. This parameter may only be used when pulling an image. - The pull is cancelled if the HTTP connection is closed. -- **fromSrc** – Source to import. The value may be a URL from which the image - can be retrieved or `-` to read the image from the request body. - This parameter may only be used when importing an image. -- **repo** – Repository name given to an image when it is imported. - The repo may include a tag. This parameter may only be used when importing - an image. -- **tag** – Tag or digest. If empty when pulling an image, this causes all tags - for the given image to be pulled. - -**Request Headers**: - -- **X-Registry-Auth** – base64-encoded AuthConfig object, containing either login information, or a token - - Credential based login: - - ``` - { - "username": "jdoe", - "password": "secret", - "email": "jdoe@acme.com" - } - ``` - - - Token based login: - - ``` - { - "registrytoken": "9cbaf023786cd7..." - } - ``` - -**Status codes**: - -- **200** – no error -- **500** – server error - - - -### Inspect an image - -`GET /images/(name)/json` - -Return low-level information on the image `name` - -**Example request**: - - GET /images/example/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Id" : "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c", - "Container" : "cb91e48a60d01f1e27028b4fc6819f4f290b3cf12496c8176ec714d0d390984a", - "Comment" : "", - "Os" : "linux", - "Architecture" : "amd64", - "Parent" : "sha256:91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", - "ContainerConfig" : { - "Tty" : false, - "Hostname" : "e611e15f9c9d", - "Volumes" : null, - "Domainname" : "", - "AttachStdout" : false, - "PublishService" : "", - "AttachStdin" : false, - "OpenStdin" : false, - "StdinOnce" : false, - "NetworkDisabled" : false, - "OnBuild" : [], - "Image" : "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", - "User" : "", - "WorkingDir" : "", - "Entrypoint" : null, - "MacAddress" : "", - "AttachStderr" : false, - "Labels" : { - "com.example.license" : "GPL", - "com.example.version" : "1.0", - "com.example.vendor" : "Acme" - }, - "Env" : [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "ExposedPorts" : null, - "Cmd" : [ - "/bin/sh", - "-c", - "#(nop) LABEL com.example.vendor=Acme com.example.license=GPL com.example.version=1.0" - ] - }, - "DockerVersion" : "1.9.0-dev", - "VirtualSize" : 188359297, - "Size" : 0, - "Author" : "", - "Created" : "2015-09-10T08:30:53.26995814Z", - "GraphDriver" : { - "Name" : "aufs", - "Data" : null - }, - "RepoDigests" : [ - "localhost:5000/test/busybox/example@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" - ], - "RepoTags" : [ - "example:1.0", - "example:latest", - "example:stable" - ], - "Config" : { - "Image" : "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", - "NetworkDisabled" : false, - "OnBuild" : [], - "StdinOnce" : false, - "PublishService" : "", - "AttachStdin" : false, - "OpenStdin" : false, - "Domainname" : "", - "AttachStdout" : false, - "Tty" : false, - "Hostname" : "e611e15f9c9d", - "Volumes" : null, - "Cmd" : [ - "/bin/bash" - ], - "ExposedPorts" : null, - "Env" : [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "Labels" : { - "com.example.vendor" : "Acme", - "com.example.version" : "1.0", - "com.example.license" : "GPL" - }, - "Entrypoint" : null, - "MacAddress" : "", - "AttachStderr" : false, - "WorkingDir" : "", - "User" : "" - }, - "RootFS": { - "Type": "layers", - "Layers": [ - "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6", - "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" - ] - } - } - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Get the history of an image - -`GET /images/(name)/history` - -Return the history of the image `name` - -**Example request**: - - GET /images/ubuntu/history HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", - "Created": 1398108230, - "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", - "Tags": [ - "ubuntu:lucid", - "ubuntu:10.04" - ], - "Size": 182964289, - "Comment": "" - }, - { - "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", - "Created": 1398108222, - "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", - "Tags": null, - "Size": 0, - "Comment": "" - }, - { - "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", - "Created": 1371157430, - "CreatedBy": "", - "Tags": [ - "scratch12:latest", - "scratch:latest" - ], - "Size": 0, - "Comment": "Imported from -" - } - ] - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Push an image on the registry - -`POST /images/(name)/push` - -Push the image `name` on the registry - -**Example request**: - - POST /images/test/push HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "Pushing..."} - {"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}} - {"error": "Invalid..."} - ... - -If you wish to push an image on to a private registry, that image must already have a tag -into a repository which references that registry `hostname` and `port`. This repository name should -then be used in the URL. This duplicates the command line's flow. - -The push is cancelled if the HTTP connection is closed. - -**Example request**: - - POST /images/registry.acme.com:5000/test/push HTTP/1.1 - - -**Query parameters**: - -- **tag** – The tag to associate with the image on the registry. This is optional. - -**Request Headers**: - -- **X-Registry-Auth** – base64-encoded AuthConfig object, containing either login information, or a token - - Credential based login: - - ``` - { - "username": "jdoe", - "password": "secret", - "email": "jdoe@acme.com", - } - ``` - - - Identity token based login: - - ``` - { - "identitytoken": "9cbaf023786cd7..." - } - ``` - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Tag an image into a repository - -`POST /images/(name)/tag` - -Tag the image `name` into a repository - -**Example request**: - - POST /images/test/tag?repo=myrepo&tag=v42 HTTP/1.1 - -**Example response**: - - HTTP/1.1 201 Created - -**Query parameters**: - -- **repo** – The repository to tag in -- **tag** - The new tag name - -**Status codes**: - -- **201** – no error -- **400** – bad parameter -- **404** – no such image -- **409** – conflict -- **500** – server error - -### Remove an image - -`DELETE /images/(name)` - -Remove the image `name` from the filesystem - -**Example request**: - - DELETE /images/test HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-type: application/json - - [ - {"Untagged": "3e2f21a89f"}, - {"Deleted": "3e2f21a89f"}, - {"Deleted": "53b4f83ac9"} - ] - -**Query parameters**: - -- **force** – 1/True/true or 0/False/false, default false -- **noprune** – 1/True/true or 0/False/false, default false - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **409** – conflict -- **500** – server error - -### Search images - -`GET /images/search` - -Search for an image on [Docker Hub](https://hub.docker.com). - -> **Note**: -> The response keys have changed from API v1.6 to reflect the JSON -> sent by the registry server to the docker daemon's request. - -**Example request**: - - GET /images/search?term=sshd HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "wma55/u1210sshd", - "star_count": 0 - }, - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "jdswinbank/sshd", - "star_count": 0 - }, - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "vgauthier/sshd", - "star_count": 0 - } - ... - ] - -**Query parameters**: - -- **term** – term to search -- **limit** – maximum returned search results -- **filters** – a JSON encoded value of the filters (a map[string][]string) to process on the images list. Available filters: - - `stars=` - - `is-automated=(true|false)` - - `is-official=(true|false)` - -**Status codes**: - -- **200** – no error -- **500** – server error - -## 3.3 Misc - -### Check auth configuration - -`POST /auth` - -Validate credentials for a registry and get identity token, -if available, for accessing the registry without password. - -**Example request**: - - POST /auth HTTP/1.1 - Content-Type: application/json - - { - "username": "hannibal", - "password": "xxxx", - "serveraddress": "https://index.docker.io/v1/" - } - -**Example response**: - - HTTP/1.1 200 OK - - { - "Status": "Login Succeeded", - "IdentityToken": "9cbaf023786cd7..." - } - -**Status codes**: - -- **200** – no error -- **204** – no error -- **500** – server error - -### Display system-wide information - -`GET /info` - -Display system-wide information - -**Example request**: - - GET /info HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Architecture": "x86_64", - "ClusterStore": "etcd://localhost:2379", - "CgroupDriver": "cgroupfs", - "Containers": 11, - "ContainersRunning": 7, - "ContainersStopped": 3, - "ContainersPaused": 1, - "CpuCfsPeriod": true, - "CpuCfsQuota": true, - "Debug": false, - "DockerRootDir": "/var/lib/docker", - "Driver": "btrfs", - "DriverStatus": [[""]], - "ExperimentalBuild": false, - "HttpProxy": "http://test:test@localhost:8080", - "HttpsProxy": "https://test:test@localhost:8080", - "ID": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS", - "IPv4Forwarding": true, - "Images": 16, - "IndexServerAddress": "https://index.docker.io/v1/", - "InitPath": "/usr/bin/docker", - "InitSha1": "", - "KernelMemory": true, - "KernelVersion": "3.12.0-1-amd64", - "Labels": [ - "storage=ssd" - ], - "MemTotal": 2099236864, - "MemoryLimit": true, - "NCPU": 1, - "NEventsListener": 0, - "NFd": 11, - "NGoroutines": 21, - "Name": "prod-server-42", - "NoProxy": "9.81.1.160", - "OomKillDisable": true, - "OSType": "linux", - "OperatingSystem": "Boot2Docker", - "Plugins": { - "Volume": [ - "local" - ], - "Network": [ - "null", - "host", - "bridge" - ] - }, - "RegistryConfig": { - "IndexConfigs": { - "docker.io": { - "Mirrors": null, - "Name": "docker.io", - "Official": true, - "Secure": true - } - }, - "InsecureRegistryCIDRs": [ - "127.0.0.0/8" - ] - }, - "SecurityOptions": [ - "apparmor", - "seccomp", - "selinux" - ], - "ServerVersion": "1.9.0", - "SwapLimit": false, - "SystemStatus": [["State", "Healthy"]], - "SystemTime": "2015-03-10T11:11:23.730591467-07:00" - } - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Show the docker version information - -`GET /version` - -Show the docker version information - -**Example request**: - - GET /version HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Version": "1.12.0", - "Os": "linux", - "KernelVersion": "3.19.0-23-generic", - "GoVersion": "go1.6.3", - "GitCommit": "deadbee", - "Arch": "amd64", - "ApiVersion": "1.24", - "BuildTime": "2016-06-14T07:09:13.444803460+00:00", - "Experimental": true - } - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Ping the docker server - -`GET /_ping` - -Ping the docker server - -**Example request**: - - GET /_ping HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: text/plain - - OK - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Create a new image from a container's changes - -`POST /commit` - -Create a new image from a container's changes - -**Example request**: - - POST /commit?container=44c004db4b17&comment=message&repo=myrepo HTTP/1.1 - Content-Type: application/json - - { - "Hostname": "", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": true, - "AttachStderr": true, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": null, - "Cmd": [ - "date" - ], - "Mounts": [ - { - "Source": "/data", - "Destination": "/data", - "Mode": "ro,Z", - "RW": false - } - ], - "Labels": { - "key1": "value1", - "key2": "value2" - }, - "WorkingDir": "", - "NetworkDisabled": false, - "ExposedPorts": { - "22/tcp": {} - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - {"Id": "596069db4bf5"} - -**JSON parameters**: - -- **config** - the container's configuration - -**Query parameters**: - -- **container** – source container -- **repo** – repository -- **tag** – tag -- **comment** – commit message -- **author** – author (e.g., "John Hannibal Smith - <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>") -- **pause** – 1/True/true or 0/False/false, whether to pause the container before committing -- **changes** – Dockerfile instructions to apply while committing - -**Status codes**: - -- **201** – no error -- **404** – no such container -- **500** – server error - -### Monitor Docker's events - -`GET /events` - -Get container events from docker, in real time via streaming. - -Docker containers report the following events: - - attach, commit, copy, create, destroy, detach, die, exec_create, exec_detach, exec_start, export, health_status, kill, oom, pause, rename, resize, restart, start, stop, top, unpause, update - -Docker images report the following events: - - delete, import, load, pull, push, save, tag, untag - -Docker volumes report the following events: - - create, mount, unmount, destroy - -Docker networks report the following events: - - create, connect, disconnect, destroy - -Docker daemon report the following event: - - reload - -**Example request**: - - GET /events?since=1374067924 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - Server: Docker/1.11.0 (linux) - Date: Fri, 29 Apr 2016 15:18:06 GMT - Transfer-Encoding: chunked - - { - "status": "pull", - "id": "alpine:latest", - "Type": "image", - "Action": "pull", - "Actor": { - "ID": "alpine:latest", - "Attributes": { - "name": "alpine" - } - }, - "time": 1461943101, - "timeNano": 1461943101301854122 - } - { - "status": "create", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "create", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943101, - "timeNano": 1461943101381709551 - } - { - "status": "attach", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "attach", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943101, - "timeNano": 1461943101383858412 - } - { - "Type": "network", - "Action": "connect", - "Actor": { - "ID": "7dc8ac97d5d29ef6c31b6052f3938c1e8f2749abbd17d1bd1febf2608db1b474", - "Attributes": { - "container": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "name": "bridge", - "type": "bridge" - } - }, - "time": 1461943101, - "timeNano": 1461943101394865557 - } - { - "status": "start", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "start", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943101, - "timeNano": 1461943101607533796 - } - { - "status": "resize", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "resize", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "height": "46", - "image": "alpine", - "name": "my-container", - "width": "204" - } - }, - "time": 1461943101, - "timeNano": 1461943101610269268 - } - { - "status": "die", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "die", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "exitCode": "0", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943105, - "timeNano": 1461943105079144137 - } - { - "Type": "network", - "Action": "disconnect", - "Actor": { - "ID": "7dc8ac97d5d29ef6c31b6052f3938c1e8f2749abbd17d1bd1febf2608db1b474", - "Attributes": { - "container": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "name": "bridge", - "type": "bridge" - } - }, - "time": 1461943105, - "timeNano": 1461943105230860245 - } - { - "status": "destroy", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "destroy", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943105, - "timeNano": 1461943105338056026 - } - -**Query parameters**: - -- **since** – Timestamp. Show all events created since timestamp and then stream -- **until** – Timestamp. Show events created until given timestamp and stop streaming -- **filters** – A json encoded value of the filters (a map[string][]string) to process on the event list. Available filters: - - `container=`; -- container to filter - - `event=`; -- event to filter - - `image=`; -- image to filter - - `label=`; -- image and container label to filter - - `type=`; -- either `container` or `image` or `volume` or `network` or `daemon` - - `volume=`; -- volume to filter - - `network=`; -- network to filter - - `daemon=`; -- daemon name or id to filter - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Get a tarball containing all images in a repository - -`GET /images/(name)/get` - -Get a tarball containing all images and metadata for the repository specified -by `name`. - -If `name` is a specific name and tag (e.g. ubuntu:latest), then only that image -(and its parents) are returned. If `name` is an image ID, similarly only that -image (and its parents) are returned, but with the exclusion of the -'repositories' file in the tarball, as there were no image names referenced. - -See the [image tarball format](docker_remote_api_v1.24.md#image-tarball-format) for more details. - -**Example request** - - GET /images/ubuntu/get - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - Binary data stream - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Get a tarball containing all images - -`GET /images/get` - -Get a tarball containing all images and metadata for one or more repositories. - -For each value of the `names` parameter: if it is a specific name and tag (e.g. -`ubuntu:latest`), then only that image (and its parents) are returned; if it is -an image ID, similarly only that image (and its parents) are returned and there -would be no names referenced in the 'repositories' file for this image ID. - -See the [image tarball format](docker_remote_api_v1.24.md#image-tarball-format) for more details. - -**Example request** - - GET /images/get?names=myname%2Fmyapp%3Alatest&names=busybox - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - Binary data stream - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Load a tarball with a set of images and tags into docker - -`POST /images/load` - -Load a set of images and tags into a Docker repository. -See the [image tarball format](docker_remote_api_v1.24.md#image-tarball-format) for more details. - -**Example request** - - POST /images/load - Content-Type: application/x-tar - - Tarball in body - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - Transfer-Encoding: chunked - - {"status":"Loading layer","progressDetail":{"current":32768,"total":1292800},"progress":"[= ] 32.77 kB/1.293 MB","id":"8ac8bfaff55a"} - {"status":"Loading layer","progressDetail":{"current":65536,"total":1292800},"progress":"[== ] 65.54 kB/1.293 MB","id":"8ac8bfaff55a"} - {"status":"Loading layer","progressDetail":{"current":98304,"total":1292800},"progress":"[=== ] 98.3 kB/1.293 MB","id":"8ac8bfaff55a"} - {"status":"Loading layer","progressDetail":{"current":131072,"total":1292800},"progress":"[===== ] 131.1 kB/1.293 MB","id":"8ac8bfaff55a"} - ... - {"stream":"Loaded image: busybox:latest\n"} - -**Example response**: - -If the "quiet" query parameter is set to `true` / `1` (`?quiet=1`), progress -details are suppressed, and only a confirmation message is returned as plain text -once the action completes. - - HTTP/1.1 200 OK - Content-Length: 29 - Content-Type: text/plain; charset=utf-8 - - Loaded image: busybox:latest - -**Query parameters**: - -- **quiet** – Boolean value, suppress progress details during load. Defaults - to `0` / `false` if omitted. - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Image tarball format - -An image tarball contains one directory per image layer (named using its long ID), -each containing these files: - -- `VERSION`: currently `1.0` - the file format version -- `json`: detailed layer information, similar to `docker inspect layer_id` -- `layer.tar`: A tarfile containing the filesystem changes in this layer - -The `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories -for storing attribute changes and deletions. - -If the tarball defines a repository, the tarball should also include a `repositories` file at -the root that contains a list of repository and tag names mapped to layer IDs. - -``` -{"hello-world": - {"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"} -} -``` - -### Exec Create - -`POST /containers/(id or name)/exec` - -Sets up an exec instance in a running container `id` - -**Example request**: - - POST /containers/e90e34656806/exec HTTP/1.1 - Content-Type: application/json - - { - "AttachStdin": true, - "AttachStdout": true, - "AttachStderr": true, - "Cmd": ["sh"], - "DetachKeys": "ctrl-p,ctrl-q", - "Privileged": true, - "Tty": true, - "User": "123:456" - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Id": "f90e34656806", - "Warnings":[] - } - -**JSON parameters**: - -- **AttachStdin** - Boolean value, attaches to `stdin` of the `exec` command. -- **AttachStdout** - Boolean value, attaches to `stdout` of the `exec` command. -- **AttachStderr** - Boolean value, attaches to `stderr` of the `exec` command. -- **DetachKeys** – Override the key sequence for detaching a - container. Format is a single character `[a-Z]` or `ctrl-` - where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. -- **Tty** - Boolean value to allocate a pseudo-TTY. -- **Cmd** - Command to run specified as a string or an array of strings. -- **Privileged** - Boolean value, runs the exec process with extended privileges. -- **User** - A string value specifying the user, and optionally, group to run - the exec process inside the container. Format is one of: `"user"`, - `"user:group"`, `"uid"`, or `"uid:gid"`. - -**Status codes**: - -- **201** – no error -- **404** – no such container -- **409** - container is paused -- **500** - server error - -### Exec Start - -`POST /exec/(id)/start` - -Starts a previously set up `exec` instance `id`. If `detach` is true, this API -returns after starting the `exec` command. Otherwise, this API sets up an -interactive session with the `exec` command. - -**Example request**: - - POST /exec/e90e34656806/start HTTP/1.1 - Content-Type: application/json - - { - "Detach": false, - "Tty": false - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/vnd.docker.raw-stream - - {% raw %} - {{ STREAM }} - {% endraw %} - -**JSON parameters**: - -- **Detach** - Detach from the `exec` command. -- **Tty** - Boolean value to allocate a pseudo-TTY. - -**Status codes**: - -- **200** – no error -- **404** – no such exec instance -- **409** - container is paused - -**Stream details**: - -Similar to the stream behavior of `POST /containers/(id or name)/attach` API - -### Exec Resize - -`POST /exec/(id)/resize` - -Resizes the `tty` session used by the `exec` command `id`. The unit is number of characters. -This API is valid only if `tty` was specified as part of creating and starting the `exec` command. - -**Example request**: - - POST /exec/e90e34656806/resize?h=40&w=80 HTTP/1.1 - Content-Type: text/plain - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: text/plain - -**Query parameters**: - -- **h** – height of `tty` session -- **w** – width - -**Status codes**: - -- **201** – no error -- **404** – no such exec instance - -### Exec Inspect - -`GET /exec/(id)/json` - -Return low-level information about the `exec` command `id`. - -**Example request**: - - GET /exec/11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "CanRemove": false, - "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", - "DetachKeys": "", - "ExitCode": 2, - "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", - "OpenStderr": true, - "OpenStdin": true, - "OpenStdout": true, - "ProcessConfig": { - "arguments": [ - "-c", - "exit 2" - ], - "entrypoint": "sh", - "privileged": false, - "tty": true, - "user": "1000" - }, - "Running": false - } - -**Status codes**: - -- **200** – no error -- **404** – no such exec instance -- **500** - server error - -## 3.4 Volumes - -### List volumes - -`GET /volumes` - -**Example request**: - - GET /volumes HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Volumes": [ - { - "Name": "tardis", - "Driver": "local", - "Mountpoint": "/var/lib/docker/volumes/tardis", - "Labels": null, - "Scope": "local" - } - ], - "Warnings": [] - } - -**Query parameters**: - -- **filters** - JSON encoded value of the filters (a `map[string][]string`) to process on the volumes list. Available filters: - - `name=` Matches all or part of a volume name. - - `dangling=` When set to `true` (or `1`), returns all volumes that are "dangling" (not in use by a container). When set to `false` (or `0`), only volumes that are in use by one or more containers are returned. - - `driver=` Matches all or part of a volume driver name. - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Create a volume - -`POST /volumes/create` - -Create a volume - -**Example request**: - - POST /volumes/create HTTP/1.1 - Content-Type: application/json - - { - "Name": "tardis", - "Labels": { - "com.example.some-label": "some-value", - "com.example.some-other-label": "some-other-value" - }, - "Driver": "custom" - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Name": "tardis", - "Driver": "custom", - "Mountpoint": "/var/lib/docker/volumes/tardis", - "Status": { - "hello": "world" - }, - "Labels": { - "com.example.some-label": "some-value", - "com.example.some-other-label": "some-other-value" - }, - "Scope": "local" - } - -**Status codes**: - -- **201** - no error -- **500** - server error - -**JSON parameters**: - -- **Name** - The new volume's name. If not specified, Docker generates a name. -- **Driver** - Name of the volume driver to use. Defaults to `local` for the name. -- **DriverOpts** - A mapping of driver options and values. These options are - passed directly to the driver and are driver specific. -- **Labels** - Labels to set on the volume, specified as a map: `{"key":"value","key2":"value2"}` - -**JSON fields in response**: - -Refer to the [inspect a volume](docker_remote_api_v1.24.md#inspect-a-volume) section or details about the -JSON fields returned in the response. - -### Inspect a volume - -`GET /volumes/(name)` - -Return low-level information on the volume `name` - -**Example request**: - - GET /volumes/tardis - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Name": "tardis", - "Driver": "custom", - "Mountpoint": "/var/lib/docker/volumes/tardis/_data", - "Status": { - "hello": "world" - }, - "Labels": { - "com.example.some-label": "some-value", - "com.example.some-other-label": "some-other-value" - }, - "Scope": "local" - } - -**Status codes**: - -- **200** - no error -- **404** - no such volume -- **500** - server error - -**JSON fields in response**: - -The following fields can be returned in the API response. Empty fields, or -fields that are not supported by the volume's driver may be omitted in the -response. - -- **Name** - Name of the volume. -- **Driver** - Name of the volume driver used by the volume. -- **Mountpoint** - Mount path of the volume on the host. -- **Status** - Low-level details about the volume, provided by the volume driver. - Details are returned as a map with key/value pairs: `{"key":"value","key2":"value2"}`. - The `Status` field is optional, and is omitted if the volume driver does not - support this feature. -- **Labels** - Labels set on the volume, specified as a map: `{"key":"value","key2":"value2"}`. -- **Scope** - Scope describes the level at which the volume exists, can be one of - `global` for cluster-wide or `local` for machine level. The default is `local`. - -### Remove a volume - -`DELETE /volumes/(name)` - -Instruct the driver to remove the volume (`name`). - -**Example request**: - - DELETE /volumes/tardis HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** - no error -- **404** - no such volume or volume driver -- **409** - volume is in use and cannot be removed -- **500** - server error - -## 3.5 Networks - -### List networks - -`GET /networks` - -**Example request**: - - GET /networks?filters={"type":{"custom":true}} HTTP/1.1 - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Type: application/json - -[ - { - "Name": "bridge", - "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", - "Scope": "local", - "Driver": "bridge", - "EnableIPv6": false, - "Internal": false, - "IPAM": { - "Driver": "default", - "Config": [ - { - "Subnet": "172.17.0.0/16" - } - ] - }, - "Containers": { - "39b69226f9d79f5634485fb236a23b2fe4e96a0a94128390a7fbbcc167065867": { - "EndpointID": "ed2419a97c1d9954d05b46e462e7002ea552f216e9b136b80a7db8d98b442eda", - "MacAddress": "02:42:ac:11:00:02", - "IPv4Address": "172.17.0.2/16", - "IPv6Address": "" - } - }, - "Options": { - "com.docker.network.bridge.default_bridge": "true", - "com.docker.network.bridge.enable_icc": "true", - "com.docker.network.bridge.enable_ip_masquerade": "true", - "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", - "com.docker.network.bridge.name": "docker0", - "com.docker.network.driver.mtu": "1500" - } - }, - { - "Name": "none", - "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", - "Scope": "local", - "Driver": "null", - "EnableIPv6": false, - "Internal": false, - "IPAM": { - "Driver": "default", - "Config": [] - }, - "Containers": {}, - "Options": {} - }, - { - "Name": "host", - "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", - "Scope": "local", - "Driver": "host", - "EnableIPv6": false, - "Internal": false, - "IPAM": { - "Driver": "default", - "Config": [] - }, - "Containers": {}, - "Options": {} - } -] -``` - -**Query parameters**: - -- **filters** - JSON encoded network list filter. The filter value is one of: - - `driver=` Matches a network's driver. - - `id=` Matches all or part of a network id. - - `label=` or `label==` of a network label. - - `name=` Matches all or part of a network name. - - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks. - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Inspect network - -`GET /networks/` - -**Example request**: - - GET /networks/7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99 HTTP/1.1 - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Type: application/json - -{ - "Name": "net01", - "Id": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99", - "Scope": "local", - "Driver": "bridge", - "EnableIPv6": false, - "IPAM": { - "Driver": "default", - "Config": [ - { - "Subnet": "172.19.0.0/16", - "Gateway": "172.19.0.1/16" - } - ], - "Options": { - "foo": "bar" - } - }, - "Internal": false, - "Containers": { - "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { - "Name": "test", - "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", - "MacAddress": "02:42:ac:13:00:02", - "IPv4Address": "172.19.0.2/16", - "IPv6Address": "" - } - }, - "Options": { - "com.docker.network.bridge.default_bridge": "true", - "com.docker.network.bridge.enable_icc": "true", - "com.docker.network.bridge.enable_ip_masquerade": "true", - "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", - "com.docker.network.bridge.name": "docker0", - "com.docker.network.driver.mtu": "1500" - }, - "Labels": { - "com.example.some-label": "some-value", - "com.example.some-other-label": "some-other-value" - } -} -``` - -**Status codes**: - -- **200** - no error -- **404** - network not found - -### Create a network - -`POST /networks/create` - -Create a network - -**Example request**: - -``` -POST /networks/create HTTP/1.1 -Content-Type: application/json - -{ - "Name":"isolated_nw", - "CheckDuplicate":false, - "Driver":"bridge", - "EnableIPv6": true, - "IPAM":{ - "Config":[ - { - "Subnet":"172.20.0.0/16", - "IPRange":"172.20.10.0/24", - "Gateway":"172.20.10.11" - }, - { - "Subnet":"2001:db8:abcd::/64", - "Gateway":"2001:db8:abcd::1011" - } - ], - "Options": { - "foo": "bar" - } - }, - "Internal":true, - "Options": { - "com.docker.network.bridge.default_bridge": "true", - "com.docker.network.bridge.enable_icc": "true", - "com.docker.network.bridge.enable_ip_masquerade": "true", - "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", - "com.docker.network.bridge.name": "docker0", - "com.docker.network.driver.mtu": "1500" - }, - "Labels": { - "com.example.some-label": "some-value", - "com.example.some-other-label": "some-other-value" - } -} -``` - -**Example response**: - -``` -HTTP/1.1 201 Created -Content-Type: application/json - -{ - "Id": "22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30", - "Warning": "" -} -``` - -**Status codes**: - -- **201** - no error -- **404** - plugin not found -- **500** - server error - -**JSON parameters**: - -- **Name** - The new network's name. this is a mandatory field -- **CheckDuplicate** - Requests daemon to check for networks with same name -- **Driver** - Name of the network driver plugin to use. Defaults to `bridge` driver -- **Internal** - Restrict external access to the network -- **IPAM** - Optional custom IP scheme for the network -- **EnableIPv6** - Enable IPv6 on the network -- **Options** - Network specific options to be used by the drivers -- **Labels** - Labels to set on the network, specified as a map: `{"key":"value" [,"key2":"value2"]}` - -### Connect a container to a network - -`POST /networks/(id)/connect` - -Connect a container to a network - -**Example request**: - -``` -POST /networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30/connect HTTP/1.1 -Content-Type: application/json - -{ - "Container":"3613f73ba0e4", - "EndpointConfig": { - "IPAMConfig": { - "IPv4Address":"172.24.56.89", - "IPv6Address":"2001:db8::5689" - } - } -} -``` - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** - no error -- **403** - operation not supported for swarm scoped networks -- **404** - network or container is not found -- **500** - Internal Server Error - -**JSON parameters**: - -- **container** - container-id/name to be connected to the network - -### Disconnect a container from a network - -`POST /networks/(id)/disconnect` - -Disconnect a container from a network - -**Example request**: - -``` -POST /networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30/disconnect HTTP/1.1 -Content-Type: application/json - -{ - "Container":"3613f73ba0e4", - "Force":false -} -``` - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** - no error -- **403** - operation not supported for swarm scoped networks -- **404** - network or container not found -- **500** - Internal Server Error - -**JSON parameters**: - -- **Container** - container-id/name to be disconnected from a network -- **Force** - Force the container to disconnect from a network - -### Remove a network - -`DELETE /networks/(id)` - -Instruct the driver to remove the network (`id`). - -**Example request**: - - DELETE /networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** - no error -- **404** - no such network -- **500** - server error - -## 3.6 Plugins (experimental) - -### List plugins - -`GET /plugins` - -Returns information about installed plugins. - -**Example request**: - - GET /plugins HTTP/1.1 - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Type: application/json - -[ - { - "Id": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078", - "Name": "tiborvass/no-remove", - "Tag": "latest", - "Active": true, - "Config": { - "Mounts": [ - { - "Name": "", - "Description": "", - "Settable": null, - "Source": "/data", - "Destination": "/data", - "Type": "bind", - "Options": [ - "shared", - "rbind" - ] - }, - { - "Name": "", - "Description": "", - "Settable": null, - "Source": null, - "Destination": "/foobar", - "Type": "tmpfs", - "Options": null - } - ], - "Env": [ - "DEBUG=1" - ], - "Args": null, - "Devices": null - }, - "Manifest": { - "ManifestVersion": "v0", - "Description": "A test plugin for Docker", - "Documentation": "https://docs.docker.com/engine/extend/plugins/", - "Interface": { - "Types": [ - "docker.volumedriver/1.0" - ], - "Socket": "plugins.sock" - }, - "Entrypoint": [ - "plugin-no-remove", - "/data" - ], - "Workdir": "", - "User": { - }, - "Network": { - "Type": "host" - }, - "Capabilities": null, - "Mounts": [ - { - "Name": "", - "Description": "", - "Settable": null, - "Source": "/data", - "Destination": "/data", - "Type": "bind", - "Options": [ - "shared", - "rbind" - ] - }, - { - "Name": "", - "Description": "", - "Settable": null, - "Source": null, - "Destination": "/foobar", - "Type": "tmpfs", - "Options": null - } - ], - "Devices": [ - { - "Name": "device", - "Description": "a host device to mount", - "Settable": null, - "Path": "/dev/cpu_dma_latency" - } - ], - "Env": [ - { - "Name": "DEBUG", - "Description": "If set, prints debug messages", - "Settable": null, - "Value": "1" - } - ], - "Args": { - "Name": "args", - "Description": "command line arguments", - "Settable": null, - "Value": [ - - ] - } - } - } -] -``` - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Install a plugin - -`POST /plugins/pull?name=` - -Pulls and installs a plugin. After the plugin is installed, it can be enabled -using the [`POST /plugins/(plugin name)/enable` endpoint](docker_remote_api_v1.24.md#enable-a-plugin). - -**Example request**: - -``` -POST /plugins/pull?name=tiborvass/no-remove:latest HTTP/1.1 -``` - -The `:latest` tag is optional, and is used as default if omitted. When using -this endpoint to pull a plugin from the registry, the `X-Registry-Auth` header -can be used to include a base64-encoded AuthConfig object. Refer to the [create -an image](docker_remote_api_v1.24.md#create-an-image) section for more details. - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Type: application/json -Content-Length: 175 - -[ - { - "Name": "network", - "Description": "", - "Value": [ - "host" - ] - }, - { - "Name": "mount", - "Description": "", - "Value": [ - "/data" - ] - }, - { - "Name": "device", - "Description": "", - "Value": [ - "/dev/cpu_dma_latency" - ] - } -] -``` - -**Query parameters**: - -- **name** - Name of the plugin to pull. The name may include a tag or digest. - This parameter is required. - -**Status codes**: - -- **200** - no error -- **500** - error parsing reference / not a valid repository/tag: repository - name must have at least one component -- **500** - plugin already exists - -### Inspect a plugin - -`GET /plugins/(plugin name)` - -Returns detailed information about an installed plugin. - -**Example request**: - -``` -GET /plugins/tiborvass/no-remove:latest HTTP/1.1 -``` - -The `:latest` tag is optional, and is used as default if omitted. - - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Type: application/json - -{ - "Id": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078", - "Name": "tiborvass/no-remove", - "Tag": "latest", - "Active": false, - "Config": { - "Mounts": [ - { - "Name": "", - "Description": "", - "Settable": null, - "Source": "/data", - "Destination": "/data", - "Type": "bind", - "Options": [ - "shared", - "rbind" - ] - }, - { - "Name": "", - "Description": "", - "Settable": null, - "Source": null, - "Destination": "/foobar", - "Type": "tmpfs", - "Options": null - } - ], - "Env": [ - "DEBUG=1" - ], - "Args": null, - "Devices": null - }, - "Manifest": { - "ManifestVersion": "v0", - "Description": "A test plugin for Docker", - "Documentation": "https://docs.docker.com/engine/extend/plugins/", - "Interface": { - "Types": [ - "docker.volumedriver/1.0" - ], - "Socket": "plugins.sock" - }, - "Entrypoint": [ - "plugin-no-remove", - "/data" - ], - "Workdir": "", - "User": { - }, - "Network": { - "Type": "host" - }, - "Capabilities": null, - "Mounts": [ - { - "Name": "", - "Description": "", - "Settable": null, - "Source": "/data", - "Destination": "/data", - "Type": "bind", - "Options": [ - "shared", - "rbind" - ] - }, - { - "Name": "", - "Description": "", - "Settable": null, - "Source": null, - "Destination": "/foobar", - "Type": "tmpfs", - "Options": null - } - ], - "Devices": [ - { - "Name": "device", - "Description": "a host device to mount", - "Settable": null, - "Path": "/dev/cpu_dma_latency" - } - ], - "Env": [ - { - "Name": "DEBUG", - "Description": "If set, prints debug messages", - "Settable": null, - "Value": "1" - } - ], - "Args": { - "Name": "args", - "Description": "command line arguments", - "Settable": null, - "Value": [ - - ] - } - } -} -``` - -**Status codes**: - -- **200** - no error -- **404** - plugin not installed - -### Enable a plugin - -`POST /plugins/(plugin name)/enable` - -Enables a plugin - -**Example request**: - -``` -POST /plugins/tiborvass/no-remove:latest/enable HTTP/1.1 -``` - -The `:latest` tag is optional, and is used as default if omitted. - - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Length: 0 -Content-Type: text/plain; charset=utf-8 -``` - -**Status codes**: - -- **200** - no error -- **500** - plugin is already enabled - -### Disable a plugin - -`POST /plugins/(plugin name)/disable` - -Disables a plugin - -**Example request**: - -``` -POST /plugins/tiborvass/no-remove:latest/disable HTTP/1.1 -``` - -The `:latest` tag is optional, and is used as default if omitted. - - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Length: 0 -Content-Type: text/plain; charset=utf-8 -``` - -**Status codes**: - -- **200** - no error -- **500** - plugin is already disabled - -### Remove a plugin - -`DELETE /plugins/(plugin name)` - -Removes a plugin - -**Example request**: - -``` -DELETE /plugins/tiborvass/no-remove:latest HTTP/1.1 -``` - -The `:latest` tag is optional, and is used as default if omitted. - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Length: 0 -Content-Type: text/plain; charset=utf-8 -``` - -**Status codes**: - -- **200** - no error -- **404** - plugin not installed -- **500** - plugin is active - - - -## 3.7 Nodes - -**Note**: Node operations require the engine to be part of a swarm. - -### List nodes - - -`GET /nodes` - -List nodes - -**Example request**: - - GET /nodes HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "ID": "24ifsmvkjbyhk", - "Version": { - "Index": 8 - }, - "CreatedAt": "2016-06-07T20:31:11.853781916Z", - "UpdatedAt": "2016-06-07T20:31:11.999868824Z", - "Spec": { - "Name": "my-node", - "Role": "manager", - "Availability": "active" - "Labels": { - "foo": "bar" - } - }, - "Description": { - "Hostname": "bf3067039e47", - "Platform": { - "Architecture": "x86_64", - "OS": "linux" - }, - "Resources": { - "NanoCPUs": 4000000000, - "MemoryBytes": 8272408576 - }, - "Engine": { - "EngineVersion": "1.12.0-dev", - "Labels": { - "foo": "bar", - } - "Plugins": [ - { - "Type": "Volume", - "Name": "local" - }, - { - "Type": "Network", - "Name": "bridge" - } - { - "Type": "Network", - "Name": "null" - } - { - "Type": "Network", - "Name": "overlay" - } - ] - } - }, - "Status": { - "State": "ready" - }, - "ManagerStatus": { - "Leader": true, - "Reachability": "reachable", - "Addr": "172.17.0.2:2377"" - } - } - ] - -**Query parameters**: - -- **filters** – a JSON encoded value of the filters (a `map[string][]string`) to process on the - nodes list. Available filters: - - `id=` - - `name=` - - `membership=`(`pending`|`accepted`|`rejected`)` - - `role=`(`worker`|`manager`)` - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Inspect a node - - -`GET /nodes/` - -Return low-level information on the node `id` - -**Example request**: - - GET /nodes/24ifsmvkjbyhk HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "ID": "24ifsmvkjbyhk", - "Version": { - "Index": 8 - }, - "CreatedAt": "2016-06-07T20:31:11.853781916Z", - "UpdatedAt": "2016-06-07T20:31:11.999868824Z", - "Spec": { - "Name": "my-node", - "Role": "manager", - "Availability": "active" - "Labels": { - "foo": "bar" - } - }, - "Description": { - "Hostname": "bf3067039e47", - "Platform": { - "Architecture": "x86_64", - "OS": "linux" - }, - "Resources": { - "NanoCPUs": 4000000000, - "MemoryBytes": 8272408576 - }, - "Engine": { - "EngineVersion": "1.12.0-dev", - "Labels": { - "foo": "bar", - } - "Plugins": [ - { - "Type": "Volume", - "Name": "local" - }, - { - "Type": "Network", - "Name": "bridge" - } - { - "Type": "Network", - "Name": "null" - } - { - "Type": "Network", - "Name": "overlay" - } - ] - } - }, - "Status": { - "State": "ready" - }, - "ManagerStatus": { - "Leader": true, - "Reachability": "reachable", - "Addr": "172.17.0.2:2377"" - } - } - -**Status codes**: - -- **200** – no error -- **404** – no such node -- **500** – server error - -### Remove a node - - -`DELETE /nodes/(id)` - -Remove a node [`id`] from the swarm. - -**Example request**: - - DELETE /nodes/24ifsmvkjbyhk HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Query parameters**: - -- **force** - 1/True/true or 0/False/false, Force remove an active node. - Default `false`. - -**Status codes**: - -- **200** – no error -- **404** – no such node -- **500** – server error - -### Update a node - - -`POST /nodes/(id)/update` - -Update the node `id`. - -The payload of the `POST` request is the new `NodeSpec` and -overrides the current `NodeSpec` for the specified node. - -If `Availability` or `Role` are omitted, this returns an -error. Any other field omitted resets the current value to either -an empty value or the default cluster-wide value. - -**Example Request** - - POST /nodes/24ifsmvkjbyhk/update?version=8 HTTP/1.1 - Content-Type: application/json - - { - "Availability": "active", - "Name": "node-name", - "Role": "manager", - "Labels": { - "foo": "bar" - } - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Query parameters**: - -- **version** – The version number of the node object being updated. This is - required to avoid conflicting writes. - -JSON Parameters: - -- **Annotations** – Optional medata to associate with the service. - - **Name** – User-defined name for the service. - - **Labels** – A map of labels to associate with the service (e.g., - `{"key":"value"[,"key2":"value2"]}`). -- **Role** - Role of the node (worker/manager). -- **Availability** - Availability of the node (active/pause/drain). - - -**Status codes**: - -- **200** – no error -- **404** – no such node -- **500** – server error - -## 3.8 Swarm - -### Inspect swarm - - -`GET /swarm` - -Inspect swarm - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "CreatedAt" : "2016-08-15T16:00:20.349727406Z", - "Spec" : { - "Dispatcher" : { - "HeartbeatPeriod" : 5000000000 - }, - "Orchestration" : { - "TaskHistoryRetentionLimit" : 10 - }, - "CAConfig" : { - "NodeCertExpiry" : 7776000000000000 - }, - "Raft" : { - "LogEntriesForSlowFollowers" : 500, - "HeartbeatTick" : 1, - "SnapshotInterval" : 10000, - "ElectionTick" : 3 - }, - "TaskDefaults" : {}, - "Name" : "default" - }, - "JoinTokens" : { - "Worker" : "SWMTKN-1-1h8aps2yszaiqmz2l3oc5392pgk8e49qhx2aj3nyv0ui0hez2a-6qmn92w6bu3jdvnglku58u11a", - "Manager" : "SWMTKN-1-1h8aps2yszaiqmz2l3oc5392pgk8e49qhx2aj3nyv0ui0hez2a-8llk83c4wm9lwioey2s316r9l" - }, - "ID" : "70ilmkj2f6sp2137c753w2nmt", - "UpdatedAt" : "2016-08-15T16:32:09.623207604Z", - "Version" : { - "Index" : 51 - } - } - -**Status codes**: - -- **200** - no error - -### Initialize a new swarm - - -`POST /swarm/init` - -Initialize a new swarm. The body of the HTTP response includes the node ID. - -**Example request**: - - POST /swarm/init HTTP/1.1 - Content-Type: application/json - - { - "ListenAddr": "0.0.0.0:2377", - "AdvertiseAddr": "192.168.1.1:2377", - "ForceNewCluster": false, - "Spec": { - "Orchestration": {}, - "Raft": {}, - "Dispatcher": {}, - "CAConfig": {} - } - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 28 - Content-Type: application/json - Date: Thu, 01 Sep 2016 21:49:13 GMT - Server: Docker/1.12.0 (linux) - - "7v2t30z9blmxuhnyo6s4cpenp" - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **406** – node is already part of a swarm - -JSON Parameters: - -- **ListenAddr** – Listen address used for inter-manager communication, as well as determining - the networking interface used for the VXLAN Tunnel Endpoint (VTEP). This can either be an - address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port - number, like `eth0:4567`. If the port number is omitted, the default swarm listening port is - used. -- **AdvertiseAddr** – Externally reachable address advertised to other nodes. This can either be - an address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port - number, like `eth0:4567`. If the port number is omitted, the port number from the listen - address is used. If `AdvertiseAddr` is not specified, it will be automatically detected when - possible. -- **ForceNewCluster** – Force creation of a new swarm. -- **Spec** – Configuration settings for the new swarm. - - **Orchestration** – Configuration settings for the orchestration aspects of the swarm. - - **TaskHistoryRetentionLimit** – Maximum number of tasks history stored. - - **Raft** – Raft related configuration. - - **SnapshotInterval** – Number of logs entries between snapshot. - - **KeepOldSnapshots** – Number of snapshots to keep beyond the current snapshot. - - **LogEntriesForSlowFollowers** – Number of log entries to keep around to sync up slow - followers after a snapshot is created. - - **HeartbeatTick** – Amount of ticks (in seconds) between each heartbeat. - - **ElectionTick** – Amount of ticks (in seconds) needed without a leader to trigger a new - election. - - **Dispatcher** – Configuration settings for the task dispatcher. - - **HeartbeatPeriod** – The delay for an agent to send a heartbeat to the dispatcher. - - **CAConfig** – Certificate authority configuration. - - **NodeCertExpiry** – Automatic expiry for nodes certificates. - - **ExternalCA** - Configuration for forwarding signing requests to an external - certificate authority. - - **Protocol** - Protocol for communication with the external CA - (currently only "cfssl" is supported). - - **URL** - URL where certificate signing requests should be sent. - - **Options** - An object with key/value pairs that are interpreted - as protocol-specific options for the external CA driver. - -### Join an existing swarm - -`POST /swarm/join` - -Join an existing swarm - -**Example request**: - - POST /swarm/join HTTP/1.1 - Content-Type: application/json - - { - "ListenAddr": "0.0.0.0:2377", - "AdvertiseAddr": "192.168.1.1:2377", - "RemoteAddrs": ["node1:2377"], - "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **406** – node is already part of a swarm - -JSON Parameters: - -- **ListenAddr** – Listen address used for inter-manager communication if the node gets promoted to - manager, as well as determining the networking interface used for the VXLAN Tunnel Endpoint (VTEP). -- **AdvertiseAddr** – Externally reachable address advertised to other nodes. This can either be - an address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port - number, like `eth0:4567`. If the port number is omitted, the port number from the listen - address is used. If `AdvertiseAddr` is not specified, it will be automatically detected when - possible. -- **RemoteAddr** – Address of any manager node already participating in the swarm. -- **JoinToken** – Secret token for joining this swarm. - -### Leave a swarm - - -`POST /swarm/leave` - -Leave a swarm - -**Example request**: - - POST /swarm/leave HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Query parameters**: - -- **force** - Boolean (0/1, false/true). Force leave swarm, even if this is the last manager or that it will break the cluster. - -**Status codes**: - -- **200** – no error -- **406** – node is not part of a swarm - -### Update a swarm - - -`POST /swarm/update` - -Update a swarm - -**Example request**: - - POST /swarm/update HTTP/1.1 - - { - "Name": "default", - "Orchestration": { - "TaskHistoryRetentionLimit": 10 - }, - "Raft": { - "SnapshotInterval": 10000, - "LogEntriesForSlowFollowers": 500, - "HeartbeatTick": 1, - "ElectionTick": 3 - }, - "Dispatcher": { - "HeartbeatPeriod": 5000000000 - }, - "CAConfig": { - "NodeCertExpiry": 7776000000000000 - }, - "JoinTokens": { - "Worker": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx", - "Manager": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" - } - } - - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Query parameters**: - -- **version** – The version number of the swarm object being updated. This is - required to avoid conflicting writes. -- **rotateWorkerToken** - Set to `true` (or `1`) to rotate the worker join token. -- **rotateManagerToken** - Set to `true` (or `1`) to rotate the manager join token. - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **406** – node is not part of a swarm - -JSON Parameters: - -- **Orchestration** – Configuration settings for the orchestration aspects of the swarm. - - **TaskHistoryRetentionLimit** – Maximum number of tasks history stored. -- **Raft** – Raft related configuration. - - **SnapshotInterval** – Number of logs entries between snapshot. - - **KeepOldSnapshots** – Number of snapshots to keep beyond the current snapshot. - - **LogEntriesForSlowFollowers** – Number of log entries to keep around to sync up slow - followers after a snapshot is created. - - **HeartbeatTick** – Amount of ticks (in seconds) between each heartbeat. - - **ElectionTick** – Amount of ticks (in seconds) needed without a leader to trigger a new - election. -- **Dispatcher** – Configuration settings for the task dispatcher. - - **HeartbeatPeriod** – The delay for an agent to send a heartbeat to the dispatcher. -- **CAConfig** – CA configuration. - - **NodeCertExpiry** – Automatic expiry for nodes certificates. - - **ExternalCA** - Configuration for forwarding signing requests to an external - certificate authority. - - **Protocol** - Protocol for communication with the external CA - (currently only "cfssl" is supported). - - **URL** - URL where certificate signing requests should be sent. - - **Options** - An object with key/value pairs that are interpreted - as protocol-specific options for the external CA driver. -- **JoinTokens** - Tokens that can be used by other nodes to join the swarm. - - **Worker** - Token to use for joining as a worker. - - **Manager** - Token to use for joining as a manager. - -## 3.9 Services - -**Note**: Service operations require to first be part of a swarm. - -### List services - - -`GET /services` - -List services - -**Example request**: - - GET /services HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "ID": "9mnpnzenvg8p8tdbtq4wvbkcz", - "Version": { - "Index": 19 - }, - "CreatedAt": "2016-06-07T21:05:51.880065305Z", - "UpdatedAt": "2016-06-07T21:07:29.962229872Z", - "Spec": { - "Name": "hopeful_cori", - "TaskTemplate": { - "ContainerSpec": { - "Image": "redis" - }, - "Resources": { - "Limits": {}, - "Reservations": {} - }, - "RestartPolicy": { - "Condition": "any", - "MaxAttempts": 0 - }, - "Placement": {} - }, - "Mode": { - "Replicated": { - "Replicas": 1 - } - }, - "UpdateConfig": { - "Parallelism": 1, - "FailureAction": "pause" - }, - "EndpointSpec": { - "Mode": "vip", - "Ports": [ - { - "Protocol": "tcp", - "TargetPort": 6379, - "PublishedPort": 30001 - } - ] - } - }, - "Endpoint": { - "Spec": { - "Mode": "vip", - "Ports": [ - { - "Protocol": "tcp", - "TargetPort": 6379, - "PublishedPort": 30001 - } - ] - }, - "Ports": [ - { - "Protocol": "tcp", - "TargetPort": 6379, - "PublishedPort": 30001 - } - ], - "VirtualIPs": [ - { - "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", - "Addr": "10.255.0.2/16" - }, - { - "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", - "Addr": "10.255.0.3/16" - } - ] - } - } - ] - -**Query parameters**: - -- **filters** – a JSON encoded value of the filters (a `map[string][]string`) to process on the - services list. Available filters: - - `id=` - - `name=` - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Create a service - -`POST /services/create` - -Create a service. When using this endpoint to create a service using a private -repository from the registry, the `X-Registry-Auth` header must be used to -include a base64-encoded AuthConfig object. Refer to the [create an -image](docker_remote_api_v1.24.md#create-an-image) section for more details. - -**Example request**: - - POST /services/create HTTP/1.1 - Content-Type: application/json - - { - "Name": "web", - "TaskTemplate": { - "ContainerSpec": { - "Image": "nginx:alpine", - "Mounts": [ - { - "ReadOnly": true, - "Source": "web-data", - "Target": "/usr/share/nginx/html", - "Type": "volume", - "VolumeOptions": { - "DriverConfig": { - }, - "Labels": { - "com.example.something": "something-value" - } - } - } - ], - "User": "33" - }, - "LogDriver": { - "Name": "json-file", - "Options": { - "max-file": "3", - "max-size": "10M" - } - }, - "Placement": {}, - "Resources": { - "Limits": { - "MemoryBytes": 104857600.0 - }, - "Reservations": { - } - }, - "RestartPolicy": { - "Condition": "on-failure", - "Delay": 10000000000.0, - "MaxAttempts": 10 - } - }, - "Mode": { - "Replicated": { - "Replicas": 4 - } - }, - "UpdateConfig": { - "Delay": 30000000000.0, - "Parallelism": 2, - "FailureAction": "pause" - }, - "EndpointSpec": { - "Ports": [ - { - "Protocol": "tcp", - "PublishedPort": 8080, - "TargetPort": 80 - } - ] - }, - "Labels": { - "foo": "bar" - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "ID":"ak7w3gjqoa3kuz8xcpnyy0pvl" - } - -**Status codes**: - -- **201** – no error -- **406** – server error or node is not part of a swarm -- **409** – name conflicts with an existing object - -**JSON Parameters**: - -- **Name** – User-defined name for the service. -- **Labels** – A map of labels to associate with the service (e.g., `{"key":"value"[,"key2":"value2"]}`). -- **TaskTemplate** – Specification of the tasks to start as part of the new service. - - **ContainerSpec** - Container settings for containers started as part of this task. - - **Image** – A string specifying the image name to use for the container. - - **Command** – The command to be run in the image. - - **Args** – Arguments to the command. - - **Env** – A list of environment variables in the form of `["VAR=value"[,"VAR2=value2"]]`. - - **Dir** – A string specifying the working directory for commands to run in. - - **User** – A string value specifying the user inside the container. - - **Labels** – A map of labels to associate with the service (e.g., - `{"key":"value"[,"key2":"value2"]}`). - - **Mounts** – Specification for mounts to be added to containers - created as part of the service. - - **Target** – Container path. - - **Source** – Mount source (e.g. a volume name, a host path). - - **Type** – The mount type (`bind`, or `volume`). - - **ReadOnly** – A boolean indicating whether the mount should be read-only. - - **BindOptions** - Optional configuration for the `bind` type. - - **Propagation** – A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`. - - **VolumeOptions** – Optional configuration for the `volume` type. - - **NoCopy** – A boolean indicating if volume should be - populated with the data from the target. (Default false) - - **Labels** – User-defined name and labels for the volume. - - **DriverConfig** – Map of driver-specific options. - - **Name** - Name of the driver to use to create the volume. - - **Options** - key/value map of driver specific options. - - **StopGracePeriod** – Amount of time to wait for the container to terminate before - forcefully killing it. - - **LogDriver** - Log configuration for containers created as part of the - service. - - **Name** - Name of the logging driver to use (`json-file`, `syslog`, - `journald`, `gelf`, `fluentd`, `awslogs`, `splunk`, `etwlogs`, `none`). - - **Options** - Driver-specific options. - - **Resources** – Resource requirements which apply to each individual container created as part - of the service. - - **Limits** – Define resources limits. - - **NanoCPUs** – CPU limit in units of 10-9 CPU shares. - - **MemoryBytes** – Memory limit in Bytes. - - **Reservation** – Define resources reservation. - - **NanoCPUs** – CPU reservation in units of 10-9 CPU shares. - - **MemoryBytes** – Memory reservation in Bytes. - - **RestartPolicy** – Specification for the restart policy which applies to containers created - as part of this service. - - **Condition** – Condition for restart (`none`, `on-failure`, or `any`). - - **Delay** – Delay between restart attempts. - - **Attempts** – Maximum attempts to restart a given container before giving up (default value - is 0, which is ignored). - - **Window** – Windows is the time window used to evaluate the restart policy (default value is - 0, which is unbounded). - - **Placement** – An array of constraints. -- **Mode** – Scheduling mode for the service (`replicated` or `global`, defaults to `replicated`). -- **UpdateConfig** – Specification for the update strategy of the service. - - **Parallelism** – Maximum number of tasks to be updated in one iteration (0 means unlimited - parallelism). - - **Delay** – Amount of time between updates. - - **FailureAction** - Action to take if an updated task fails to run, or stops running during the - update. Values are `continue` and `pause`. -- **Networks** – Array of network names or IDs to attach the service to. -- **EndpointSpec** – Properties that can be configured to access and load balance a service. - - **Mode** – The mode of resolution to use for internal load balancing - between tasks (`vip` or `dnsrr`). Defaults to `vip` if not provided. - - **Ports** – List of exposed ports that this service is accessible on from - the outside, in the form of: - `{"Protocol": <"tcp"|"udp">, "PublishedPort": , "TargetPort": }`. - Ports can only be provided if `vip` resolution mode is used. - -**Request Headers**: - -- **Content-type** – Set to `"application/json"`. -- **X-Registry-Auth** – base64-encoded AuthConfig object, containing either - login information, or a token. Refer to the [create an image](docker_remote_api_v1.24.md#create-an-image) - section for more details. - - -### Remove a service - - -`DELETE /services/(id or name)` - -Stop and remove the service `id` - -**Example request**: - - DELETE /services/16253994b7c4 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 No Content - -**Status codes**: - -- **200** – no error -- **404** – no such service -- **500** – server error - -### Inspect one or more services - - -`GET /services/(id or name)` - -Return information on the service `id`. - -**Example request**: - - GET /services/1cb4dnqcyx6m66g2t538x3rxha HTTP/1.1 - -**Example response**: - - { - "ID": "ak7w3gjqoa3kuz8xcpnyy0pvl", - "Version": { - "Index": 95 - }, - "CreatedAt": "2016-06-07T21:10:20.269723157Z", - "UpdatedAt": "2016-06-07T21:10:20.276301259Z", - "Spec": { - "Name": "redis", - "TaskTemplate": { - "ContainerSpec": { - "Image": "redis" - }, - "Resources": { - "Limits": {}, - "Reservations": {} - }, - "RestartPolicy": { - "Condition": "any", - "MaxAttempts": 0 - }, - "Placement": {} - }, - "Mode": { - "Replicated": { - "Replicas": 1 - } - }, - "UpdateConfig": { - "Parallelism": 1, - "FailureAction": "pause" - }, - "EndpointSpec": { - "Mode": "vip", - "Ports": [ - { - "Protocol": "tcp", - "TargetPort": 6379, - "PublishedPort": 30001 - } - ] - } - }, - "Endpoint": { - "Spec": { - "Mode": "vip", - "Ports": [ - { - "Protocol": "tcp", - "TargetPort": 6379, - "PublishedPort": 30001 - } - ] - }, - "Ports": [ - { - "Protocol": "tcp", - "TargetPort": 6379, - "PublishedPort": 30001 - } - ], - "VirtualIPs": [ - { - "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", - "Addr": "10.255.0.4/16" - } - ] - } - } - -**Status codes**: - -- **200** – no error -- **404** – no such service -- **500** – server error - -### Update a service - -`POST /services/(id or name)/update` - -Update a service. When using this endpoint to create a service using a -private repository from the registry, the `X-Registry-Auth` header can be used -to update the authentication information for that is stored for the service. -The header contains a base64-encoded AuthConfig object. Refer to the [create an -image](docker_remote_api_v1.24.md#create-an-image) section for more details. - -**Example request**: - - POST /services/1cb4dnqcyx6m66g2t538x3rxha/update?version=23 HTTP/1.1 - Content-Type: application/json - - { - "Name": "top", - "TaskTemplate": { - "ContainerSpec": { - "Image": "busybox", - "Args": [ - "top" - ] - }, - "Resources": { - "Limits": {}, - "Reservations": {} - }, - "RestartPolicy": { - "Condition": "any", - "MaxAttempts": 0 - }, - "Placement": {} - }, - "Mode": { - "Replicated": { - "Replicas": 1 - } - }, - "UpdateConfig": { - "Parallelism": 1 - }, - "EndpointSpec": { - "Mode": "vip" - } - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**JSON Parameters**: - -- **Name** – User-defined name for the service. -- **Labels** – A map of labels to associate with the service (e.g., `{"key":"value"[,"key2":"value2"]}`). -- **TaskTemplate** – Specification of the tasks to start as part of the new service. - - **ContainerSpec** - Container settings for containers started as part of this task. - - **Image** – A string specifying the image name to use for the container. - - **Command** – The command to be run in the image. - - **Args** – Arguments to the command. - - **Env** – A list of environment variables in the form of `["VAR=value"[,"VAR2=value2"]]`. - - **Dir** – A string specifying the working directory for commands to run in. - - **User** – A string value specifying the user inside the container. - - **Labels** – A map of labels to associate with the service (e.g., - `{"key":"value"[,"key2":"value2"]}`). - - **Mounts** – Specification for mounts to be added to containers created as part of the new - service. - - **Target** – Container path. - - **Source** – Mount source (e.g. a volume name, a host path). - - **Type** – The mount type (`bind`, or `volume`). - - **ReadOnly** – A boolean indicating whether the mount should be read-only. - - **BindOptions** - Optional configuration for the `bind` type - - **Propagation** – A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`. - - **VolumeOptions** – Optional configuration for the `volume` type. - - **NoCopy** – A boolean indicating if volume should be - populated with the data from the target. (Default false) - - **Labels** – User-defined name and labels for the volume. - - **DriverConfig** – Map of driver-specific options. - - **Name** - Name of the driver to use to create the volume - - **Options** - key/value map of driver specific options - - **StopGracePeriod** – Amount of time to wait for the container to terminate before - forcefully killing it. - - **Resources** – Resource requirements which apply to each individual container created as part - of the service. - - **Limits** – Define resources limits. - - **CPU** – CPU limit - - **Memory** – Memory limit - - **Reservation** – Define resources reservation. - - **CPU** – CPU reservation - - **Memory** – Memory reservation - - **RestartPolicy** – Specification for the restart policy which applies to containers created - as part of this service. - - **Condition** – Condition for restart (`none`, `on-failure`, or `any`). - - **Delay** – Delay between restart attempts. - - **MaxAttempts** – Maximum attempts to restart a given container before giving up (default value - is 0, which is ignored). - - **Window** – Windows is the time window used to evaluate the restart policy (default value is - 0, which is unbounded). - - **Placement** – An array of constraints. -- **Mode** – Scheduling mode for the service (`replicated` or `global`, defaults to `replicated`). -- **UpdateConfig** – Specification for the update strategy of the service. - - **Parallelism** – Maximum number of tasks to be updated in one iteration (0 means unlimited - parallelism). - - **Delay** – Amount of time between updates. -- **Networks** – Array of network names or IDs to attach the service to. -- **EndpointSpec** – Properties that can be configured to access and load balance a service. - - **Mode** – The mode of resolution to use for internal load balancing - between tasks (`vip` or `dnsrr`). Defaults to `vip` if not provided. - - **Ports** – List of exposed ports that this service is accessible on from - the outside, in the form of: - `{"Protocol": <"tcp"|"udp">, "PublishedPort": , "TargetPort": }`. - Ports can only be provided if `vip` resolution mode is used. - -**Query parameters**: - -- **version** – The version number of the service object being updated. This is - required to avoid conflicting writes. - -**Request Headers**: - -- **Content-type** – Set to `"application/json"`. -- **X-Registry-Auth** – base64-encoded AuthConfig object, containing either - login information, or a token. Refer to the [create an image](docker_remote_api_v1.24.md#create-an-image) - section for more details. - -**Status codes**: - -- **200** – no error -- **404** – no such service -- **500** – server error - -## 3.10 Tasks - -**Note**: Task operations require the engine to be part of a swarm. - -### List tasks - - -`GET /tasks` - -List tasks - -**Example request**: - - GET /tasks HTTP/1.1 - -**Example response**: - - [ - { - "ID": "0kzzo1i0y4jz6027t0k7aezc7", - "Version": { - "Index": 71 - }, - "CreatedAt": "2016-06-07T21:07:31.171892745Z", - "UpdatedAt": "2016-06-07T21:07:31.376370513Z", - "Spec": { - "ContainerSpec": { - "Image": "redis" - }, - "Resources": { - "Limits": {}, - "Reservations": {} - }, - "RestartPolicy": { - "Condition": "any", - "MaxAttempts": 0 - }, - "Placement": {} - }, - "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", - "Slot": 1, - "NodeID": "60gvrl6tm78dmak4yl7srz94v", - "Status": { - "Timestamp": "2016-06-07T21:07:31.290032978Z", - "State": "running", - "Message": "started", - "ContainerStatus": { - "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", - "PID": 677 - } - }, - "DesiredState": "running", - "NetworksAttachments": [ - { - "Network": { - "ID": "4qvuz4ko70xaltuqbt8956gd1", - "Version": { - "Index": 18 - }, - "CreatedAt": "2016-06-07T20:31:11.912919752Z", - "UpdatedAt": "2016-06-07T21:07:29.955277358Z", - "Spec": { - "Name": "ingress", - "Labels": { - "com.docker.swarm.internal": "true" - }, - "DriverConfiguration": {}, - "IPAMOptions": { - "Driver": {}, - "Configs": [ - { - "Subnet": "10.255.0.0/16", - "Gateway": "10.255.0.1" - } - ] - } - }, - "DriverState": { - "Name": "overlay", - "Options": { - "com.docker.network.driver.overlay.vxlanid_list": "256" - } - }, - "IPAMOptions": { - "Driver": { - "Name": "default" - }, - "Configs": [ - { - "Subnet": "10.255.0.0/16", - "Gateway": "10.255.0.1" - } - ] - } - }, - "Addresses": [ - "10.255.0.10/16" - ] - } - ], - }, - { - "ID": "1yljwbmlr8er2waf8orvqpwms", - "Version": { - "Index": 30 - }, - "CreatedAt": "2016-06-07T21:07:30.019104782Z", - "UpdatedAt": "2016-06-07T21:07:30.231958098Z", - "Name": "hopeful_cori", - "Spec": { - "ContainerSpec": { - "Image": "redis" - }, - "Resources": { - "Limits": {}, - "Reservations": {} - }, - "RestartPolicy": { - "Condition": "any", - "MaxAttempts": 0 - }, - "Placement": {} - }, - "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", - "Slot": 1, - "NodeID": "60gvrl6tm78dmak4yl7srz94v", - "Status": { - "Timestamp": "2016-06-07T21:07:30.202183143Z", - "State": "shutdown", - "Message": "shutdown", - "ContainerStatus": { - "ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" - } - }, - "DesiredState": "shutdown", - "NetworksAttachments": [ - { - "Network": { - "ID": "4qvuz4ko70xaltuqbt8956gd1", - "Version": { - "Index": 18 - }, - "CreatedAt": "2016-06-07T20:31:11.912919752Z", - "UpdatedAt": "2016-06-07T21:07:29.955277358Z", - "Spec": { - "Name": "ingress", - "Labels": { - "com.docker.swarm.internal": "true" - }, - "DriverConfiguration": {}, - "IPAMOptions": { - "Driver": {}, - "Configs": [ - { - "Subnet": "10.255.0.0/16", - "Gateway": "10.255.0.1" - } - ] - } - }, - "DriverState": { - "Name": "overlay", - "Options": { - "com.docker.network.driver.overlay.vxlanid_list": "256" - } - }, - "IPAMOptions": { - "Driver": { - "Name": "default" - }, - "Configs": [ - { - "Subnet": "10.255.0.0/16", - "Gateway": "10.255.0.1" - } - ] - } - }, - "Addresses": [ - "10.255.0.5/16" - ] - } - ] - } - ] - -**Query parameters**: - -- **filters** – a JSON encoded value of the filters (a `map[string][]string`) to process on the - services list. Available filters: - - `id=` - - `name=` - - `service=` - - `node=` - - `label=key` or `label="key=value"` - - `desired-state=(running | shutdown | accepted)` - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Inspect a task - - -`GET /tasks/(task id)` - -Get details on a task - -**Example request**: - - GET /tasks/0kzzo1i0y4jz6027t0k7aezc7 HTTP/1.1 - -**Example response**: - - { - "ID": "0kzzo1i0y4jz6027t0k7aezc7", - "Version": { - "Index": 71 - }, - "CreatedAt": "2016-06-07T21:07:31.171892745Z", - "UpdatedAt": "2016-06-07T21:07:31.376370513Z", - "Spec": { - "ContainerSpec": { - "Image": "redis" - }, - "Resources": { - "Limits": {}, - "Reservations": {} - }, - "RestartPolicy": { - "Condition": "any", - "MaxAttempts": 0 - }, - "Placement": {} - }, - "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", - "Slot": 1, - "NodeID": "60gvrl6tm78dmak4yl7srz94v", - "Status": { - "Timestamp": "2016-06-07T21:07:31.290032978Z", - "State": "running", - "Message": "started", - "ContainerStatus": { - "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", - "PID": 677 - } - }, - "DesiredState": "running", - "NetworksAttachments": [ - { - "Network": { - "ID": "4qvuz4ko70xaltuqbt8956gd1", - "Version": { - "Index": 18 - }, - "CreatedAt": "2016-06-07T20:31:11.912919752Z", - "UpdatedAt": "2016-06-07T21:07:29.955277358Z", - "Spec": { - "Name": "ingress", - "Labels": { - "com.docker.swarm.internal": "true" - }, - "DriverConfiguration": {}, - "IPAMOptions": { - "Driver": {}, - "Configs": [ - { - "Subnet": "10.255.0.0/16", - "Gateway": "10.255.0.1" - } - ] - } - }, - "DriverState": { - "Name": "overlay", - "Options": { - "com.docker.network.driver.overlay.vxlanid_list": "256" - } - }, - "IPAMOptions": { - "Driver": { - "Name": "default" - }, - "Configs": [ - { - "Subnet": "10.255.0.0/16", - "Gateway": "10.255.0.1" - } - ] - } - }, - "Addresses": [ - "10.255.0.10/16" - ] - } - ] - } - -**Status codes**: - -- **200** – no error -- **404** – unknown task -- **500** – server error - -# 4. Going further - -## 4.1 Inside `docker run` - -As an example, the `docker run` command line makes the following API calls: - -- Create the container - -- If the status code is 404, it means the image doesn't exist: - - Try to pull it. - - Then, retry to create the container. - -- Start the container. - -- If you are not in detached mode: -- Attach to the container, using `logs=1` (to have `stdout` and - `stderr` from the container's start) and `stream=1` - -- If in detached mode or only `stdin` is attached, display the container's id. - -## 4.2 Hijacking - -In this version of the API, `/attach`, uses hijacking to transport `stdin`, -`stdout`, and `stderr` on the same socket. - -To hint potential proxies about connection hijacking, Docker client sends -connection upgrade headers similarly to websocket. - - Upgrade: tcp - Connection: Upgrade - -When Docker daemon detects the `Upgrade` header, it switches its status code -from **200 OK** to **101 UPGRADED** and resends the same headers. - - -## 4.3 CORS Requests - -To set cross origin requests to the remote api please give values to -`--api-cors-header` when running Docker in daemon mode. Set * (asterisk) allows all, -default or blank means CORS disabled - - $ dockerd -H="192.168.1.9:2375" --api-cors-header="http://foo.bar" diff --git a/engine/reference/api/docker_remote_api_v1.25.md b/engine/reference/api/docker_remote_api_v1.25.md deleted file mode 100644 index dce8a166bd..0000000000 --- a/engine/reference/api/docker_remote_api_v1.25.md +++ /dev/null @@ -1,5295 +0,0 @@ ---- -redirect_from: - - /reference/api/docker_remote_api_v1.25/ -description: API Documentation for Docker -published: false -keywords: -- API, Docker, rcli, REST, documentation -title: Docker Remote API v1.25 ---- - -# 1. Brief introduction - - - The Remote API has replaced `rcli`. - - The daemon listens on `unix:///var/run/docker.sock` but you can - [Bind Docker to another host/port or a Unix socket](../commandline/dockerd.md#bind-docker-to-another-host-port-or-a-unix-socket). - - The API tends to be REST. However, for some complex commands, like `attach` - or `pull`, the HTTP connection is hijacked to transport `stdout`, - `stdin` and `stderr`. - - When the client API version is newer than the daemon's, these calls return an HTTP - `400 Bad Request` error message. - -# 2. Errors - -The Remote API uses standard HTTP status codes to indicate the success or failure of the API call. The body of the response will be JSON in the following format: - - { - "message": "page not found" - } - -The status codes that are returned for each endpoint are specified in the endpoint documentation below. - -# 3. Endpoints - -## 3.1 Containers - -### List containers - -`GET /containers/json` - -List containers - -**Example request**: - - GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Id": "8dfafdbc3a40", - "Names":["/boring_feynman"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 1", - "Created": 1367854155, - "State": "Exited", - "Status": "Exit 0", - "Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}], - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "SizeRw": 12288, - "SizeRootFs": 0, - "HostConfig": { - "NetworkMode": "default" - }, - "NetworkSettings": { - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "2cdc4edb1ded3631c81f57966563e5c8525b81121bb3706a9a9a3ae102711f3f", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.2", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:02" - } - } - }, - "Mounts": [ - { - "Name": "fac362...80535", - "Source": "/data", - "Destination": "/data", - "Driver": "local", - "Mode": "ro,Z", - "RW": false, - "Propagation": "" - } - ] - }, - { - "Id": "9cd87474be90", - "Names":["/coolName"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 222222", - "Created": 1367854155, - "State": "Exited", - "Status": "Exit 0", - "Ports": [], - "Labels": {}, - "SizeRw": 12288, - "SizeRootFs": 0, - "HostConfig": { - "NetworkMode": "default" - }, - "NetworkSettings": { - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "88eaed7b37b38c2a3f0c4bc796494fdf51b270c2d22656412a2ca5d559a64d7a", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.8", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:08" - } - } - }, - "Mounts": [] - }, - { - "Id": "3176a2479c92", - "Names":["/sleepy_dog"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 3333333333333333", - "Created": 1367854154, - "State": "Exited", - "Status": "Exit 0", - "Ports":[], - "Labels": {}, - "SizeRw":12288, - "SizeRootFs":0, - "HostConfig": { - "NetworkMode": "default" - }, - "NetworkSettings": { - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "8b27c041c30326d59cd6e6f510d4f8d1d570a228466f956edf7815508f78e30d", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.6", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:06" - } - } - }, - "Mounts": [] - }, - { - "Id": "4cb07b47f9fb", - "Names":["/running_cat"], - "Image": "ubuntu:latest", - "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", - "Command": "echo 444444444444444444444444444444444", - "Created": 1367854152, - "State": "Exited", - "Status": "Exit 0", - "Ports": [], - "Labels": {}, - "SizeRw": 12288, - "SizeRootFs": 0, - "HostConfig": { - "NetworkMode": "default" - }, - "NetworkSettings": { - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "d91c7b2f0644403d7ef3095985ea0e2370325cd2332ff3a3225c4247328e66e9", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.5", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:05" - } - } - }, - "Mounts": [] - } - ] - -**Query parameters**: - -- **all** – 1/True/true or 0/False/false, Show all containers. - Only running containers are shown by default (i.e., this defaults to false) -- **limit** – Show `limit` last created - containers, include non-running ones. -- **since** – Show only containers created since Id, include - non-running ones. -- **before** – Show only containers created before Id, include - non-running ones. -- **size** – 1/True/true or 0/False/false, Show the containers - sizes -- **filters** - a JSON encoded value of the filters (a `map[string][]string`) to process on the containers list. Available filters: - - `exited=`; -- containers with exit code of `` ; - - `status=`(`created`|`restarting`|`running`|`paused`|`exited`|`dead`) - - `label=key` or `label="key=value"` of a container label - - `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only) - - `ancestor`=(`[:]`, `` or ``) - - `before`=(`` or ``) - - `since`=(`` or ``) - - `volume`=(`` or ``) - - `network`=(`` or ``) - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **500** – server error - -### Create a container - -`POST /containers/create` - -Create a container - -**Example request**: - - POST /containers/create HTTP/1.1 - Content-Type: application/json - - { - "Hostname": "", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": true, - "AttachStderr": true, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": [ - "FOO=bar", - "BAZ=quux" - ], - "Cmd": [ - "date" - ], - "Entrypoint": "", - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "Volumes": { - "/volumes/data": {} - }, - "WorkingDir": "", - "NetworkDisabled": false, - "MacAddress": "12:34:56:78:9a:bc", - "ExposedPorts": { - "22/tcp": {} - }, - "StopSignal": "SIGTERM", - "HostConfig": { - "Binds": ["/tmp:/tmp"], - "Links": ["redis3:redis"], - "Memory": 0, - "MemorySwap": 0, - "MemoryReservation": 0, - "KernelMemory": 0, - "CpuPercent": 80, - "CpuShares": 512, - "CpuPeriod": 100000, - "CpuQuota": 50000, - "CpusetCpus": "0,1", - "CpusetMems": "0,1", - "IOMaximumBandwidth": 0, - "IOMaximumIOps": 0, - "BlkioWeight": 300, - "BlkioWeightDevice": [{}], - "BlkioDeviceReadBps": [{}], - "BlkioDeviceReadIOps": [{}], - "BlkioDeviceWriteBps": [{}], - "BlkioDeviceWriteIOps": [{}], - "MemorySwappiness": 60, - "OomKillDisable": false, - "OomScoreAdj": 500, - "PidMode": "", - "PidsLimit": -1, - "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] }, - "PublishAllPorts": false, - "Privileged": false, - "ReadonlyRootfs": false, - "Dns": ["8.8.8.8"], - "DnsOptions": [""], - "DnsSearch": [""], - "ExtraHosts": null, - "VolumesFrom": ["parent", "other:ro"], - "CapAdd": ["NET_ADMIN"], - "CapDrop": ["MKNOD"], - "GroupAdd": ["newgroup"], - "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 }, - "AutoRemove": true, - "NetworkMode": "bridge", - "Devices": [], - "Sysctls": { "net.ipv4.ip_forward": "1" }, - "Ulimits": [{}], - "LogConfig": { "Type": "json-file", "Config": {} }, - "SecurityOpt": [], - "StorageOpt": {}, - "CgroupParent": "", - "VolumeDriver": "", - "ShmSize": 67108864 - }, - "NetworkingConfig": { - "EndpointsConfig": { - "isolated_nw" : { - "IPAMConfig": { - "IPv4Address":"172.20.30.33", - "IPv6Address":"2001:db8:abcd::3033", - "LinkLocalIPs":["169.254.34.68", "fe80::3468"] - }, - "Links":["container_1", "container_2"], - "Aliases":["server_x", "server_y"] - } - } - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Id":"e90e34656806", - "Warnings":[] - } - -**JSON parameters**: - -- **Hostname** - A string value containing the hostname to use for the - container. This must be a valid RFC 1123 hostname. -- **Domainname** - A string value containing the domain name to use - for the container. -- **User** - A string value specifying the user inside the container. -- **AttachStdin** - Boolean value, attaches to `stdin`. -- **AttachStdout** - Boolean value, attaches to `stdout`. -- **AttachStderr** - Boolean value, attaches to `stderr`. -- **Tty** - Boolean value, Attach standard streams to a `tty`, including `stdin` if it is not closed. -- **OpenStdin** - Boolean value, opens `stdin`, -- **StdinOnce** - Boolean value, close `stdin` after the 1 attached client disconnects. -- **Env** - A list of environment variables in the form of `["VAR=value"[,"VAR2=value2"]]` -- **Labels** - Adds a map of labels to a container. To specify a map: `{"key":"value"[,"key2":"value2"]}` -- **Cmd** - Command to run specified as a string or an array of strings. -- **Entrypoint** - Set the entry point for the container as a string or an array - of strings. If the array consists of exactly one empty string (`[""]`) then the entry point - is reset to system default (i.e., the entry point used by docker when there is no `ENTRYPOINT` - instruction in the Dockerfile). -- **Image** - A string specifying the image name to use for the container. -- **Volumes** - An object mapping mount point paths (strings) inside the - container to empty objects. -- **WorkingDir** - A string specifying the working directory for commands to - run in. -- **NetworkDisabled** - Boolean value, when true disables networking for the - container -- **ExposedPorts** - An object mapping ports to an empty object in the form of: - `"ExposedPorts": { "/: {}" }` -- **StopSignal** - Signal to stop a container as a string or unsigned integer. `SIGTERM` by default. -- **HostConfig** - - **Binds** – A list of volume bindings for this container. Each volume binding is a string in one of these forms: - + `host-src:container-dest` to bind-mount a host path into the - container. Both `host-src`, and `container-dest` must be an - _absolute_ path. - + `host-src:container-dest:ro` to make the bind-mount read-only - inside the container. Both `host-src`, and `container-dest` must be - an _absolute_ path. - + `volume-name:container-dest` to bind-mount a volume managed by a - volume driver into the container. `container-dest` must be an - _absolute_ path. - + `volume-name:container-dest:ro` to mount the volume read-only - inside the container. `container-dest` must be an _absolute_ path. - - **Links** - A list of links for the container. Each link entry should be - in the form of `container_name:alias`. - - **Memory** - Memory limit in bytes. - - **MemorySwap** - Total memory limit (memory + swap); set `-1` to enable unlimited swap. - You must use this with `memory` and make the swap value larger than `memory`. - - **MemoryReservation** - Memory soft limit in bytes. - - **KernelMemory** - Kernel memory limit in bytes. - - **CpuPercent** - An integer value containing the usable percentage of the available CPUs. (Windows daemon only) - - **CpuShares** - An integer value containing the container's CPU Shares - (ie. the relative weight vs other containers). - - **CpuPeriod** - The length of a CPU period in microseconds. - - **CpuQuota** - Microseconds of CPU time that the container can get in a CPU period. - - **CpusetCpus** - String value containing the `cgroups CpusetCpus` to use. - - **CpusetMems** - Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. - - **IOMaximumBandwidth** - Maximum IO absolute rate in terms of IOps. - - **IOMaximumIOps** - Maximum IO absolute rate in terms of bytes per second. - - **BlkioWeight** - Block IO weight (relative weight) accepts a weight value between 10 and 1000. - - **BlkioWeightDevice** - Block IO weight (relative device weight) in the form of: `"BlkioWeightDevice": [{"Path": "device_path", "Weight": weight}]` - - **BlkioDeviceReadBps** - Limit read rate (bytes per second) from a device in the form of: `"BlkioDeviceReadBps": [{"Path": "device_path", "Rate": rate}]`, for example: - `"BlkioDeviceReadBps": [{"Path": "/dev/sda", "Rate": "1024"}]"` - - **BlkioDeviceWriteBps** - Limit write rate (bytes per second) to a device in the form of: `"BlkioDeviceWriteBps": [{"Path": "device_path", "Rate": rate}]`, for example: - `"BlkioDeviceWriteBps": [{"Path": "/dev/sda", "Rate": "1024"}]"` - - **BlkioDeviceReadIOps** - Limit read rate (IO per second) from a device in the form of: `"BlkioDeviceReadIOps": [{"Path": "device_path", "Rate": rate}]`, for example: - `"BlkioDeviceReadIOps": [{"Path": "/dev/sda", "Rate": "1000"}]` - - **BlkioDeviceWiiteIOps** - Limit write rate (IO per second) to a device in the form of: `"BlkioDeviceWriteIOps": [{"Path": "device_path", "Rate": rate}]`, for example: - `"BlkioDeviceWriteIOps": [{"Path": "/dev/sda", "Rate": "1000"}]` - - **MemorySwappiness** - Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. - - **OomKillDisable** - Boolean value, whether to disable OOM Killer for the container or not. - - **OomScoreAdj** - An integer value containing the score given to the container in order to tune OOM killer preferences. - - **PidMode** - Set the PID (Process) Namespace mode for the container; - `"container:"`: joins another container's PID namespace - `"host"`: use the host's PID namespace inside the container - - **PidsLimit** - Tune a container's pids limit. Set -1 for unlimited. - - **PortBindings** - A map of exposed container ports and the host port they - should map to. A JSON object in the form - `{ /: [{ "HostPort": "" }] }` - Take note that `port` is specified as a string and not an integer value. - - **PublishAllPorts** - Allocates a random host port for all of a container's - exposed ports. Specified as a boolean value. - - **Privileged** - Gives the container full access to the host. Specified as - a boolean value. - - **ReadonlyRootfs** - Mount the container's root filesystem as read only. - Specified as a boolean value. - - **Dns** - A list of DNS servers for the container to use. - - **DnsOptions** - A list of DNS options - - **DnsSearch** - A list of DNS search domains - - **ExtraHosts** - A list of hostnames/IP mappings to add to the - container's `/etc/hosts` file. Specified in the form `["hostname:IP"]`. - - **VolumesFrom** - A list of volumes to inherit from another container. - Specified in the form `[:]` - - **CapAdd** - A list of kernel capabilities to add to the container. - - **Capdrop** - A list of kernel capabilities to drop from the container. - - **GroupAdd** - A list of additional groups that the container process will run as - - **RestartPolicy** – The behavior to apply when the container exits. The - value is an object with a `Name` property of either `"always"` to - always restart, `"unless-stopped"` to restart always except when - user has manually stopped the container or `"on-failure"` to restart only when the container - exit code is non-zero. If `on-failure` is used, `MaximumRetryCount` - controls the number of times to retry before giving up. - The default is not to restart. (optional) - An ever increasing delay (double the previous delay, starting at 100mS) - is added before each restart to prevent flooding the server. - - **AutoRemove** - Boolean value, set to `true` to automatically remove the container on daemon side - when the container's process exits. Note that `RestartPolicy` other than `none` is exclusive to `AutoRemove`. - - **UsernsMode** - Sets the usernamespace mode for the container when usernamespace remapping option is enabled. - supported values are: `host`. - - **NetworkMode** - Sets the networking mode for the container. Supported - standard values are: `bridge`, `host`, `none`, and `container:`. Any other value is taken - as a custom network's name to which this container should connect to. - - **Devices** - A list of devices to add to the container specified as a JSON object in the - form - `{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}` - - **Ulimits** - A list of ulimits to set in the container, specified as - `{ "Name": , "Soft": , "Hard": }`, for example: - `Ulimits: { "Name": "nofile", "Soft": 1024, "Hard": 2048 }` - - **Sysctls** - A list of kernel parameters (sysctls) to set in the container, specified as - `{ : }`, for example: - `{ "net.ipv4.ip_forward": "1" }` - - **SecurityOpt**: A list of string values to customize labels for MLS - systems, such as SELinux. - - **StorageOpt**: Storage driver options per container. Options can be passed in the form - `{"size":"120G"}` - - **LogConfig** - Log configuration for the container, specified as a JSON object in the form - `{ "Type": "", "Config": {"key1": "val1"}}`. - Available types: `json-file`, `syslog`, `journald`, `gelf`, `fluentd`, `awslogs`, `splunk`, `etwlogs`, `none`. - `json-file` logging driver. - - **CgroupParent** - Path to `cgroups` under which the container's `cgroup` is created. If the path is not absolute, the path is considered to be relative to the `cgroups` path of the init process. Cgroups are created if they do not already exist. - - **VolumeDriver** - Driver that this container users to mount volumes. - - **ShmSize** - Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB. - -**Query parameters**: - -- **name** – Assign the specified name to the container. Must - match `/?[a-zA-Z0-9_-]+`. - -**Status codes**: - -- **201** – no error -- **400** – bad parameter -- **404** – no such container -- **406** – impossible to attach (container not running) -- **409** – conflict -- **500** – server error - -### Inspect a container - -`GET /containers/(id or name)/json` - -Return low-level information on the container `id` - -**Example request**: - - GET /containers/4fa6e0f0c678/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "AppArmorProfile": "", - "Args": [ - "-c", - "exit 9" - ], - "Config": { - "AttachStderr": true, - "AttachStdin": false, - "AttachStdout": true, - "Cmd": [ - "/bin/sh", - "-c", - "exit 9" - ], - "Domainname": "", - "Entrypoint": null, - "Env": [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "ExposedPorts": null, - "Hostname": "ba033ac44011", - "Image": "ubuntu", - "Labels": { - "com.example.vendor": "Acme", - "com.example.license": "GPL", - "com.example.version": "1.0" - }, - "MacAddress": "", - "NetworkDisabled": false, - "OnBuild": null, - "OpenStdin": false, - "StdinOnce": false, - "Tty": false, - "User": "", - "Volumes": { - "/volumes/data": {} - }, - "WorkingDir": "", - "StopSignal": "SIGTERM" - }, - "Created": "2015-01-06T15:47:31.485331387Z", - "Driver": "devicemapper", - "ExecIDs": null, - "HostConfig": { - "Binds": null, - "IOMaximumBandwidth": 0, - "IOMaximumIOps": 0, - "BlkioWeight": 0, - "BlkioWeightDevice": [{}], - "BlkioDeviceReadBps": [{}], - "BlkioDeviceWriteBps": [{}], - "BlkioDeviceReadIOps": [{}], - "BlkioDeviceWriteIOps": [{}], - "CapAdd": null, - "CapDrop": null, - "ContainerIDFile": "", - "CpusetCpus": "", - "CpusetMems": "", - "CpuPercent": 80, - "CpuShares": 0, - "CpuPeriod": 100000, - "Devices": [], - "Dns": null, - "DnsOptions": null, - "DnsSearch": null, - "ExtraHosts": null, - "IpcMode": "", - "Links": null, - "LxcConf": [], - "Memory": 0, - "MemorySwap": 0, - "MemoryReservation": 0, - "KernelMemory": 0, - "OomKillDisable": false, - "OomScoreAdj": 500, - "NetworkMode": "bridge", - "PidMode": "", - "PortBindings": {}, - "Privileged": false, - "ReadonlyRootfs": false, - "PublishAllPorts": false, - "RestartPolicy": { - "MaximumRetryCount": 2, - "Name": "on-failure" - }, - "AutoRemove": true, - "LogConfig": { - "Config": null, - "Type": "json-file" - }, - "SecurityOpt": null, - "Sysctls": { - "net.ipv4.ip_forward": "1" - }, - "StorageOpt": null, - "VolumesFrom": null, - "Ulimits": [{}], - "VolumeDriver": "", - "ShmSize": 67108864 - }, - "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", - "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", - "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", - "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", - "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", - "MountLabel": "", - "Name": "/boring_euclid", - "NetworkSettings": { - "Bridge": "", - "SandboxID": "", - "HairpinMode": false, - "LinkLocalIPv6Address": "", - "LinkLocalIPv6PrefixLen": 0, - "Ports": null, - "SandboxKey": "", - "SecondaryIPAddresses": null, - "SecondaryIPv6Addresses": null, - "EndpointID": "", - "Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "IPAddress": "", - "IPPrefixLen": 0, - "IPv6Gateway": "", - "MacAddress": "", - "Networks": { - "bridge": { - "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", - "EndpointID": "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.2", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:12:00:02" - } - } - }, - "Path": "/bin/sh", - "ProcessLabel": "", - "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", - "RestartCount": 1, - "State": { - "Error": "", - "ExitCode": 9, - "FinishedAt": "2015-01-06T15:47:32.080254511Z", - "OOMKilled": false, - "Dead": false, - "Paused": false, - "Pid": 0, - "Restarting": false, - "Running": true, - "StartedAt": "2015-01-06T15:47:32.072697474Z", - "Status": "running" - }, - "Mounts": [ - { - "Name": "fac362...80535", - "Source": "/data", - "Destination": "/data", - "Driver": "local", - "Mode": "ro,Z", - "RW": false, - "Propagation": "" - } - ] - } - -**Example request, with size information**: - - GET /containers/4fa6e0f0c678/json?size=1 HTTP/1.1 - -**Example response, with size information**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - .... - "SizeRw": 0, - "SizeRootFs": 972, - .... - } - -**Query parameters**: - -- **size** – 1/True/true or 0/False/false, return container size information. Default is `false`. - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### List processes running inside a container - -`GET /containers/(id or name)/top` - -List processes running inside the container `id`. On Unix systems this -is done by running the `ps` command. This endpoint is not -supported on Windows. - -**Example request**: - - GET /containers/4fa6e0f0c678/top HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Titles" : [ - "UID", "PID", "PPID", "C", "STIME", "TTY", "TIME", "CMD" - ], - "Processes" : [ - [ - "root", "13642", "882", "0", "17:03", "pts/0", "00:00:00", "/bin/bash" - ], - [ - "root", "13735", "13642", "0", "17:06", "pts/0", "00:00:00", "sleep 10" - ] - ] - } - -**Example request**: - - GET /containers/4fa6e0f0c678/top?ps_args=aux HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Titles" : [ - "USER","PID","%CPU","%MEM","VSZ","RSS","TTY","STAT","START","TIME","COMMAND" - ] - "Processes" : [ - [ - "root","13642","0.0","0.1","18172","3184","pts/0","Ss","17:03","0:00","/bin/bash" - ], - [ - "root","13895","0.0","0.0","4348","692","pts/0","S+","17:15","0:00","sleep 10" - ] - ], - } - -**Query parameters**: - -- **ps_args** – `ps` arguments to use (e.g., `aux`), defaults to `-ef` - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Get container logs - -`GET /containers/(id or name)/logs` - -Get `stdout` and `stderr` logs from the container ``id`` - -> **Note**: -> This endpoint works only for containers with the `json-file` or `journald` logging drivers. - -**Example request**: - - GET /containers/4fa6e0f0c678/logs?stderr=1&stdout=1×tamps=1&follow=1&tail=10&since=1428990821 HTTP/1.1 - -**Example response**: - - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **details** - 1/True/true or 0/False/flase, Show extra details provided to logs. Default `false`. -- **follow** – 1/True/true or 0/False/false, return stream. Default `false`. -- **stdout** – 1/True/true or 0/False/false, show `stdout` log. Default `false`. -- **stderr** – 1/True/true or 0/False/false, show `stderr` log. Default `false`. -- **since** – UNIX timestamp (integer) to filter logs. Specifying a timestamp - will only output log-entries since that timestamp. Default: 0 (unfiltered) -- **timestamps** – 1/True/true or 0/False/false, print timestamps for - every log line. Default `false`. -- **tail** – Output specified number of lines at the end of logs: `all` or ``. Default all. - -**Status codes**: - -- **101** – no error, hints proxy about hijacking -- **200** – no error, no upgrade header found -- **404** – no such container -- **500** – server error - -### Inspect changes on a container's filesystem - -`GET /containers/(id or name)/changes` - -Inspect changes on container `id`'s filesystem - -**Example request**: - - GET /containers/4fa6e0f0c678/changes HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Path": "/dev", - "Kind": 0 - }, - { - "Path": "/dev/kmsg", - "Kind": 1 - }, - { - "Path": "/test", - "Kind": 1 - } - ] - -Values for `Kind`: - -- `0`: Modify -- `1`: Add -- `2`: Delete - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Export a container - -`GET /containers/(id or name)/export` - -Export the contents of container `id` - -**Example request**: - - GET /containers/4fa6e0f0c678/export HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/octet-stream - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Get container stats based on resource usage - -`GET /containers/(id or name)/stats` - -This endpoint returns a live stream of a container's resource usage statistics. - -**Example request**: - - GET /containers/redis1/stats HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "read" : "2015-01-08T22:57:31.547920715Z", - "pids_stats": { - "current": 3 - }, - "networks": { - "eth0": { - "rx_bytes": 5338, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 36, - "tx_bytes": 648, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 8 - }, - "eth5": { - "rx_bytes": 4641, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 26, - "tx_bytes": 690, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 9 - } - }, - "memory_stats" : { - "stats" : { - "total_pgmajfault" : 0, - "cache" : 0, - "mapped_file" : 0, - "total_inactive_file" : 0, - "pgpgout" : 414, - "rss" : 6537216, - "total_mapped_file" : 0, - "writeback" : 0, - "unevictable" : 0, - "pgpgin" : 477, - "total_unevictable" : 0, - "pgmajfault" : 0, - "total_rss" : 6537216, - "total_rss_huge" : 6291456, - "total_writeback" : 0, - "total_inactive_anon" : 0, - "rss_huge" : 6291456, - "hierarchical_memory_limit" : 67108864, - "total_pgfault" : 964, - "total_active_file" : 0, - "active_anon" : 6537216, - "total_active_anon" : 6537216, - "total_pgpgout" : 414, - "total_cache" : 0, - "inactive_anon" : 0, - "active_file" : 0, - "pgfault" : 964, - "inactive_file" : 0, - "total_pgpgin" : 477 - }, - "max_usage" : 6651904, - "usage" : 6537216, - "failcnt" : 0, - "limit" : 67108864 - }, - "blkio_stats" : {}, - "cpu_stats" : { - "cpu_usage" : { - "percpu_usage" : [ - 8646879, - 24472255, - 36438778, - 30657443 - ], - "usage_in_usermode" : 50000000, - "total_usage" : 100215355, - "usage_in_kernelmode" : 30000000 - }, - "system_cpu_usage" : 739306590000000, - "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0} - }, - "precpu_stats" : { - "cpu_usage" : { - "percpu_usage" : [ - 8646879, - 24350896, - 36438778, - 30657443 - ], - "usage_in_usermode" : 50000000, - "total_usage" : 100093996, - "usage_in_kernelmode" : 30000000 - }, - "system_cpu_usage" : 9492140000000, - "throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0} - } - } - -The precpu_stats is the cpu statistic of last read, which is used for calculating the cpu usage percent. It is not the exact copy of the “cpu_stats” field. - -**Query parameters**: - -- **stream** – 1/True/true or 0/False/false, pull stats once then disconnect. Default `true`. - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Resize a container TTY - -`POST /containers/(id or name)/resize` - -Resize the TTY for container with `id`. The unit is number of characters. You must restart the container for the resize to take effect. - -**Example request**: - - POST /containers/4fa6e0f0c678/resize?h=40&w=80 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Query parameters**: - -- **h** – height of `tty` session -- **w** – width - -**Status codes**: - -- **200** – no error -- **404** – No such container -- **500** – Cannot resize container - -### Start a container - -`POST /containers/(id or name)/start` - -Start the container `id` - -**Example request**: - - POST /containers/e90e34656806/start HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **detachKeys** – Override the key sequence for detaching a - container. Format is a single character `[a-Z]` or `ctrl-` - where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. - -**Status codes**: - -- **204** – no error -- **304** – container already started -- **404** – no such container -- **500** – server error - -### Stop a container - -`POST /containers/(id or name)/stop` - -Stop the container `id` - -**Example request**: - - POST /containers/e90e34656806/stop?t=5 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **t** – number of seconds to wait before killing the container - -**Status codes**: - -- **204** – no error -- **304** – container already stopped -- **404** – no such container -- **500** – server error - -### Restart a container - -`POST /containers/(id or name)/restart` - -Restart the container `id` - -**Example request**: - - POST /containers/e90e34656806/restart?t=5 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **t** – number of seconds to wait before killing the container - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Kill a container - -`POST /containers/(id or name)/kill` - -Kill the container `id` - -**Example request**: - - POST /containers/e90e34656806/kill HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **signal** - Signal to send to the container: integer or string like `SIGINT`. - When not set, `SIGKILL` is assumed and the call waits for the container to exit. - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Update a container - -`POST /containers/(id or name)/update` - -Update configuration of one or more containers. - -**Example request**: - - POST /containers/e90e34656806/update HTTP/1.1 - Content-Type: application/json - - { - "BlkioWeight": 300, - "CpuShares": 512, - "CpuPeriod": 100000, - "CpuQuota": 50000, - "CpusetCpus": "0,1", - "CpusetMems": "0", - "Memory": 314572800, - "MemorySwap": 514288000, - "MemoryReservation": 209715200, - "KernelMemory": 52428800, - "RestartPolicy": { - "MaximumRetryCount": 4, - "Name": "on-failure" - }, - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Warnings": [] - } - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **404** – no such container -- **500** – server error - -### Rename a container - -`POST /containers/(id or name)/rename` - -Rename the container `id` to a `new_name` - -**Example request**: - - POST /containers/e90e34656806/rename?name=new_name HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **name** – new name for the container - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **409** - conflict name already assigned -- **500** – server error - -### Pause a container - -`POST /containers/(id or name)/pause` - -Pause the container `id` - -**Example request**: - - POST /containers/e90e34656806/pause HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Unpause a container - -`POST /containers/(id or name)/unpause` - -Unpause the container `id` - -**Example request**: - - POST /containers/e90e34656806/unpause HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** – no error -- **404** – no such container -- **500** – server error - -### Attach to a container - -`POST /containers/(id or name)/attach` - -Attach to the container `id` - -**Example request**: - - POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **detachKeys** – Override the key sequence for detaching a - container. Format is a single character `[a-Z]` or `ctrl-` - where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. -- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. -- **stream** – 1/True/true or 0/False/false, return stream. - Default `false`. -- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach - to `stdin`. Default `false`. -- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return - `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. -- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return - `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. - -**Status codes**: - -- **101** – no error, hints proxy about hijacking -- **200** – no error, no upgrade header found -- **400** – bad parameter -- **404** – no such container -- **409** - container is paused -- **500** – server error - -**Stream details**: - -When using the TTY setting is enabled in -[`POST /containers/create` -](docker_remote_api_v1.25.md#create-a-container), -the stream is the raw data from the process PTY and client's `stdin`. -When the TTY is disabled, then the stream is multiplexed to separate -`stdout` and `stderr`. - -The format is a **Header** and a **Payload** (frame). - -**HEADER** - -The header contains the information which the stream writes (`stdout` or -`stderr`). It also contains the size of the associated frame encoded in the -last four bytes (`uint32`). - -It is encoded on the first eight bytes like this: - - header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} - -`STREAM_TYPE` can be: - -- 0: `stdin` (is written on `stdout`) -- 1: `stdout` -- 2: `stderr` - -`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of -the `uint32` size encoded as big endian. - -**PAYLOAD** - -The payload is the raw stream. - -**IMPLEMENTATION** - -The simplest way to implement the Attach protocol is the following: - - 1. Read eight bytes. - 2. Choose `stdout` or `stderr` depending on the first byte. - 3. Extract the frame size from the last four bytes. - 4. Read the extracted size and output it on the correct output. - 5. Goto 1. - -### Attach to a container (websocket) - -`GET /containers/(id or name)/attach/ws` - -Attach to the container `id` via websocket - -Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455) - -**Example request** - - GET /containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1 - -**Example response** - - {% raw %} - {{ STREAM }} - {% endraw %} - -**Query parameters**: - -- **detachKeys** – Override the key sequence for detaching a - container. Format is a single character `[a-Z]` or `ctrl-` - where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. -- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. -- **stream** – 1/True/true or 0/False/false, return stream. - Default `false`. -- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach - to `stdin`. Default `false`. -- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return - `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. -- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return - `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **404** – no such container -- **500** – server error - -### Wait a container - -`POST /containers/(id or name)/wait` - -Block until container `id` stops, then returns the exit code - -**Example request**: - - POST /containers/16253994b7c4/wait HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"StatusCode": 0} - -**Status codes**: - -- **200** – no error -- **404** – no such container -- **500** – server error - -### Remove a container - -`DELETE /containers/(id or name)` - -Remove the container `id` from the filesystem - -**Example request**: - - DELETE /containers/16253994b7c4?v=1 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Query parameters**: - -- **v** – 1/True/true or 0/False/false, Remove the volumes - associated to the container. Default `false`. -- **force** - 1/True/true or 0/False/false, Kill then remove the container. - Default `false`. - -**Status codes**: - -- **204** – no error -- **400** – bad parameter -- **404** – no such container -- **409** – conflict -- **500** – server error - -### Retrieving information about files and folders in a container - -`HEAD /containers/(id or name)/archive` - -See the description of the `X-Docker-Container-Path-Stat` header in the -following section. - -### Get an archive of a filesystem resource in a container - -`GET /containers/(id or name)/archive` - -Get a tar archive of a resource in the filesystem of container `id`. - -**Query parameters**: - -- **path** - resource in the container's filesystem to archive. Required. - - If not an absolute path, it is relative to the container's root directory. - The resource specified by **path** must exist. To assert that the resource - is expected to be a directory, **path** should end in `/` or `/.` - (assuming a path separator of `/`). If **path** ends in `/.` then this - indicates that only the contents of the **path** directory should be - copied. A symlink is always resolved to its target. - - > **Note**: It is not possible to copy certain system files such as resources - > under `/proc`, `/sys`, `/dev`, and mounts created by the user in the - > container. - -**Example request**: - - GET /containers/8cce319429b2/archive?path=/root HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - X-Docker-Container-Path-Stat: eyJuYW1lIjoicm9vdCIsInNpemUiOjQwOTYsIm1vZGUiOjIxNDc0ODQwOTYsIm10aW1lIjoiMjAxNC0wMi0yN1QyMDo1MToyM1oiLCJsaW5rVGFyZ2V0IjoiIn0= - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -On success, a response header `X-Docker-Container-Path-Stat` will be set to a -base64-encoded JSON object containing some filesystem header information about -the archived resource. The above example value would decode to the following -JSON object (whitespace added for readability): - -```json -{ - "name": "root", - "size": 4096, - "mode": 2147484096, - "mtime": "2014-02-27T20:51:23Z", - "linkTarget": "" -} -``` - -A `HEAD` request can also be made to this endpoint if only this information is -desired. - -**Status codes**: - -- **200** - success, returns archive of copied resource -- **400** - client error, bad parameter, details in JSON response body, one of: - - must specify path parameter (**path** cannot be empty) - - not a directory (**path** was asserted to be a directory but exists as a - file) -- **404** - client error, resource not found, one of: - – no such container (container `id` does not exist) - - no such file or directory (**path** does not exist) -- **500** - server error - -### Extract an archive of files or folders to a directory in a container - -`PUT /containers/(id or name)/archive` - -Upload a tar archive to be extracted to a path in the filesystem of container -`id`. - -**Query parameters**: - -- **path** - path to a directory in the container - to extract the archive's contents into. Required. - - If not an absolute path, it is relative to the container's root directory. - The **path** resource must exist. -- **noOverwriteDirNonDir** - If "1", "true", or "True" then it will be an error - if unpacking the given content would cause an existing directory to be - replaced with a non-directory and vice versa. - -**Example request**: - - PUT /containers/8cce319429b2/archive?path=/vol1 HTTP/1.1 - Content-Type: application/x-tar - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** – the content was extracted successfully -- **400** - client error, bad parameter, details in JSON response body, one of: - - must specify path parameter (**path** cannot be empty) - - not a directory (**path** should be a directory but exists as a file) - - unable to overwrite existing directory with non-directory - (if **noOverwriteDirNonDir**) - - unable to overwrite existing non-directory with directory - (if **noOverwriteDirNonDir**) -- **403** - client error, permission denied, the volume - or container rootfs is marked as read-only. -- **404** - client error, resource not found, one of: - – no such container (container `id` does not exist) - - no such file or directory (**path** resource does not exist) -- **500** – server error - -## 3.2 Images - -### List Images - -`GET /images/json` - -**Example request**: - - GET /images/json?all=0 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "RepoTags": [ - "ubuntu:12.04", - "ubuntu:precise", - "ubuntu:latest" - ], - "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c", - "Created": 1365714795, - "Size": 131506275, - "VirtualSize": 131506275, - "Labels": {} - }, - { - "RepoTags": [ - "ubuntu:12.10", - "ubuntu:quantal" - ], - "ParentId": "27cf784147099545", - "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", - "Created": 1364102658, - "Size": 24653, - "VirtualSize": 180116135, - "Labels": { - "com.example.version": "v1" - } - } - ] - -**Example request, with digest information**: - - GET /images/json?digests=1 HTTP/1.1 - -**Example response, with digest information**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Created": 1420064636, - "Id": "4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125", - "ParentId": "ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2", - "RepoDigests": [ - "localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" - ], - "RepoTags": [ - "localhost:5000/test/busybox:latest", - "playdate:latest" - ], - "Size": 0, - "VirtualSize": 2429728, - "Labels": {} - } - ] - -The response shows a single image `Id` associated with two repositories -(`RepoTags`): `localhost:5000/test/busybox`: and `playdate`. A caller can use -either of the `RepoTags` values `localhost:5000/test/busybox:latest` or -`playdate:latest` to reference the image. - -You can also use `RepoDigests` values to reference an image. In this response, -the array has only one reference and that is to the -`localhost:5000/test/busybox` repository; the `playdate` repository has no -digest. You can reference this digest using the value: -`localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d...` - -See the `docker run` and `docker build` commands for examples of digest and tag -references on the command line. - -**Query parameters**: - -- **all** – 1/True/true or 0/False/false, default false -- **filters** – a JSON encoded value of the filters (a map[string][]string) to process on the images list. Available filters: - - `dangling=true` - - `label=key` or `label="key=value"` of an image label - - `before`=(`[:]`, `` or ``) - - `since`=(`[:]`, `` or ``) -- **filter** - only return images with the specified name - -### Build image from a Dockerfile - -`POST /build` - -Build an image from a Dockerfile - -**Example request**: - - POST /build HTTP/1.1 - - {% raw %} - {{ TAR STREAM }} - {% endraw %} - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"stream": "Step 1..."} - {"stream": "..."} - {"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}} - -The input stream must be a `tar` archive compressed with one of the -following algorithms: `identity` (no compression), `gzip`, `bzip2`, `xz`. - -The archive must include a build instructions file, typically called -`Dockerfile` at the archive's root. The `dockerfile` parameter may be -used to specify a different build instructions file. To do this, its value must be -the path to the alternate build instructions file to use. - -The archive may include any number of other files, -which are accessible in the build context (See the [*ADD build -command*](../../reference/builder.md#add)). - -The build is canceled if the client drops the connection by quitting -or being killed. - -**Query parameters**: - -- **dockerfile** - Path within the build context to the `Dockerfile`. This is - ignored if `remote` is specified and points to an external `Dockerfile`. -- **t** – A name and optional tag to apply to the image in the `name:tag` format. - If you omit the `tag` the default `latest` value is assumed. - You can provide one or more `t` parameters. -- **remote** – A Git repository URI or HTTP/HTTPS context URI. If the - URI points to a single text file, the file's contents are placed into - a file called `Dockerfile` and the image is built from that file. If - the URI points to a tarball, the file is downloaded by the daemon and - the contents therein used as the context for the build. If the URI - points to a tarball and the `dockerfile` parameter is also specified, - there must be a file with the corresponding path inside the tarball. -- **q** – Suppress verbose build output. -- **nocache** – Do not use the cache when building the image. -- **pull** - Attempt to pull the image even if an older image exists locally. -- **rm** - Remove intermediate containers after a successful build (default behavior). -- **forcerm** - Always remove intermediate containers (includes `rm`). -- **memory** - Set memory limit for build. -- **memswap** - Total memory (memory + swap), `-1` to enable unlimited swap. -- **cpushares** - CPU shares (relative weight). -- **cpusetcpus** - CPUs in which to allow execution (e.g., `0-3`, `0,1`). -- **cpuperiod** - The length of a CPU period in microseconds. -- **cpuquota** - Microseconds of CPU time that the container can get in a CPU period. -- **buildargs** – JSON map of string pairs for build-time variables. Users pass - these values at build-time. Docker uses the `buildargs` as the environment - context for command(s) run via the Dockerfile's `RUN` instruction or for - variable expansion in other Dockerfile instructions. This is not meant for - passing secret values. [Read more about the buildargs instruction](../../reference/builder.md#arg) -- **shmsize** - Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB. -- **labels** – JSON map of string pairs for labels to set on the image. - -**Request Headers**: - -- **Content-type** – Set to `"application/tar"`. -- **X-Registry-Config** – A base64-url-safe-encoded Registry Auth Config JSON - object with the following structure: - - { - "docker.example.com": { - "username": "janedoe", - "password": "hunter2" - }, - "https://index.docker.io/v1/": { - "username": "mobydock", - "password": "conta1n3rize14" - } - } - - This object maps the hostname of a registry to an object containing the - "username" and "password" for that registry. Multiple registries may - be specified as the build may be based on an image requiring - authentication to pull from any arbitrary registry. Only the registry - domain name (and port if not the default "443") are required. However - (for legacy reasons) the "official" Docker, Inc. hosted registry must - be specified with both a "https://" prefix and a "/v1/" suffix even - though Docker will prefer to use the v2 registry API. - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Create an image - -`POST /images/create` - -Create an image either by pulling it from the registry or by importing it - -**Example request**: - - POST /images/create?fromImage=busybox&tag=latest HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status":"Pulling from library/busybox","id":"latest"} - {"status":"Pulling fs layer","progressDetail":{},"id":"8ddc19f16526"} - {"status":"Downloading","progressDetail":{"current":15881,"total":667590},"progress":"[=\u003e ] 15.88 kB/667.6 kB","id":"8ddc19f16526"} - {"status":"Downloading","progressDetail":{"current":556269,"total":667590},"progress":"[=========================================\u003e ] 556.3 kB/667.6 kB","id":"8ddc19f16526"} - {"status":"Download complete","progressDetail":{},"id":"8ddc19f16526"} - {"status":"Extracting","progressDetail":{"current":32768,"total":667590},"progress":"[==\u003e ] 32.77 kB/667.6 kB","id":"8ddc19f16526"} - {"status":"Extracting","progressDetail":{"current":491520,"total":667590},"progress":"[====================================\u003e ] 491.5 kB/667.6 kB","id":"8ddc19f16526"} - {"status":"Extracting","progressDetail":{"current":667590,"total":667590},"progress":"[==================================================\u003e] 667.6 kB/667.6 kB","id":"8ddc19f16526"} - {"status":"Extracting","progressDetail":{"current":667590,"total":667590},"progress":"[==================================================\u003e] 667.6 kB/667.6 kB","id":"8ddc19f16526"} - {"status":"Pull complete","progressDetail":{},"id":"8ddc19f16526"} - {"status":"Digest: sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6"} - {"status":"Status: Downloaded newer image for busybox:latest"} - ... - -When using this endpoint to pull an image from the registry, the -`X-Registry-Auth` header can be used to include -a base64-encoded AuthConfig object. - -**Query parameters**: - -- **fromImage** – Name of the image to pull. The name may include a tag or - digest. This parameter may only be used when pulling an image. - The pull is cancelled if the HTTP connection is closed. -- **fromSrc** – Source to import. The value may be a URL from which the image - can be retrieved or `-` to read the image from the request body. - This parameter may only be used when importing an image. -- **repo** – Repository name given to an image when it is imported. - The repo may include a tag. This parameter may only be used when importing - an image. -- **tag** – Tag or digest. If empty when pulling an image, this causes all tags - for the given image to be pulled. - -**Request Headers**: - -- **X-Registry-Auth** – base64-encoded AuthConfig object, containing either login information, or a token - - Credential based login: - - ``` - { - "username": "jdoe", - "password": "secret", - "email": "jdoe@acme.com" - } - ``` - - - Token based login: - - ``` - { - "registrytoken": "9cbaf023786cd7..." - } - ``` - -**Status codes**: - -- **200** – no error -- **500** – server error - - - -### Inspect an image - -`GET /images/(name)/json` - -Return low-level information on the image `name` - -**Example request**: - - GET /images/example/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Id" : "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c", - "Container" : "cb91e48a60d01f1e27028b4fc6819f4f290b3cf12496c8176ec714d0d390984a", - "Comment" : "", - "Os" : "linux", - "Architecture" : "amd64", - "Parent" : "sha256:91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", - "ContainerConfig" : { - "Tty" : false, - "Hostname" : "e611e15f9c9d", - "Volumes" : null, - "Domainname" : "", - "AttachStdout" : false, - "PublishService" : "", - "AttachStdin" : false, - "OpenStdin" : false, - "StdinOnce" : false, - "NetworkDisabled" : false, - "OnBuild" : [], - "Image" : "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", - "User" : "", - "WorkingDir" : "", - "Entrypoint" : null, - "MacAddress" : "", - "AttachStderr" : false, - "Labels" : { - "com.example.license" : "GPL", - "com.example.version" : "1.0", - "com.example.vendor" : "Acme" - }, - "Env" : [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "ExposedPorts" : null, - "Cmd" : [ - "/bin/sh", - "-c", - "#(nop) LABEL com.example.vendor=Acme com.example.license=GPL com.example.version=1.0" - ] - }, - "DockerVersion" : "1.9.0-dev", - "VirtualSize" : 188359297, - "Size" : 0, - "Author" : "", - "Created" : "2015-09-10T08:30:53.26995814Z", - "GraphDriver" : { - "Name" : "aufs", - "Data" : null - }, - "RepoDigests" : [ - "localhost:5000/test/busybox/example@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" - ], - "RepoTags" : [ - "example:1.0", - "example:latest", - "example:stable" - ], - "Config" : { - "Image" : "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", - "NetworkDisabled" : false, - "OnBuild" : [], - "StdinOnce" : false, - "PublishService" : "", - "AttachStdin" : false, - "OpenStdin" : false, - "Domainname" : "", - "AttachStdout" : false, - "Tty" : false, - "Hostname" : "e611e15f9c9d", - "Volumes" : null, - "Cmd" : [ - "/bin/bash" - ], - "ExposedPorts" : null, - "Env" : [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "Labels" : { - "com.example.vendor" : "Acme", - "com.example.version" : "1.0", - "com.example.license" : "GPL" - }, - "Entrypoint" : null, - "MacAddress" : "", - "AttachStderr" : false, - "WorkingDir" : "", - "User" : "" - }, - "RootFS": { - "Type": "layers", - "Layers": [ - "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6", - "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" - ] - } - } - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Get the history of an image - -`GET /images/(name)/history` - -Return the history of the image `name` - -**Example request**: - - GET /images/ubuntu/history HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", - "Created": 1398108230, - "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", - "Tags": [ - "ubuntu:lucid", - "ubuntu:10.04" - ], - "Size": 182964289, - "Comment": "" - }, - { - "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", - "Created": 1398108222, - "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", - "Tags": null, - "Size": 0, - "Comment": "" - }, - { - "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", - "Created": 1371157430, - "CreatedBy": "", - "Tags": [ - "scratch12:latest", - "scratch:latest" - ], - "Size": 0, - "Comment": "Imported from -" - } - ] - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Push an image on the registry - -`POST /images/(name)/push` - -Push the image `name` on the registry - -**Example request**: - - POST /images/test/push HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - {"status": "Pushing..."} - {"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}} - {"error": "Invalid..."} - ... - -If you wish to push an image on to a private registry, that image must already have a tag -into a repository which references that registry `hostname` and `port`. This repository name should -then be used in the URL. This duplicates the command line's flow. - -The push is cancelled if the HTTP connection is closed. - -**Example request**: - - POST /images/registry.acme.com:5000/test/push HTTP/1.1 - - -**Query parameters**: - -- **tag** – The tag to associate with the image on the registry. This is optional. - -**Request Headers**: - -- **X-Registry-Auth** – base64-encoded AuthConfig object, containing either login information, or a token - - Credential based login: - - ``` - { - "username": "jdoe", - "password": "secret", - "email": "jdoe@acme.com", - } - ``` - - - Identity token based login: - - ``` - { - "identitytoken": "9cbaf023786cd7..." - } - ``` - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **500** – server error - -### Tag an image into a repository - -`POST /images/(name)/tag` - -Tag the image `name` into a repository - -**Example request**: - - POST /images/test/tag?repo=myrepo&tag=v42 HTTP/1.1 - -**Example response**: - - HTTP/1.1 201 Created - -**Query parameters**: - -- **repo** – The repository to tag in -- **tag** - The new tag name - -**Status codes**: - -- **201** – no error -- **400** – bad parameter -- **404** – no such image -- **409** – conflict -- **500** – server error - -### Remove an image - -`DELETE /images/(name)` - -Remove the image `name` from the filesystem - -**Example request**: - - DELETE /images/test HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-type: application/json - - [ - {"Untagged": "3e2f21a89f"}, - {"Deleted": "3e2f21a89f"}, - {"Deleted": "53b4f83ac9"} - ] - -**Query parameters**: - -- **force** – 1/True/true or 0/False/false, default false -- **noprune** – 1/True/true or 0/False/false, default false - -**Status codes**: - -- **200** – no error -- **404** – no such image -- **409** – conflict -- **500** – server error - -### Search images - -`GET /images/search` - -Search for an image on [Docker Hub](https://hub.docker.com). - -> **Note**: -> The response keys have changed from API v1.6 to reflect the JSON -> sent by the registry server to the docker daemon's request. - -**Example request**: - - GET /images/search?term=sshd HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "wma55/u1210sshd", - "star_count": 0 - }, - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "jdswinbank/sshd", - "star_count": 0 - }, - { - "description": "", - "is_official": false, - "is_automated": false, - "name": "vgauthier/sshd", - "star_count": 0 - } - ... - ] - -**Query parameters**: - -- **term** – term to search -- **limit** – maximum returned search results -- **filters** – a JSON encoded value of the filters (a map[string][]string) to process on the images list. Available filters: - - `stars=` - - `is-automated=(true|false)` - - `is-official=(true|false)` - -**Status codes**: - -- **200** – no error -- **500** – server error - -## 3.3 Misc - -### Check auth configuration - -`POST /auth` - -Validate credentials for a registry and get identity token, -if available, for accessing the registry without password. - -**Example request**: - - POST /auth HTTP/1.1 - Content-Type: application/json - - { - "username": "hannibal", - "password": "xxxx", - "serveraddress": "https://index.docker.io/v1/" - } - -**Example response**: - - HTTP/1.1 200 OK - - { - "Status": "Login Succeeded", - "IdentityToken": "9cbaf023786cd7..." - } - -**Status codes**: - -- **200** – no error -- **204** – no error -- **500** – server error - -### Display system-wide information - -`GET /info` - -Display system-wide information - -**Example request**: - - GET /info HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Architecture": "x86_64", - "ClusterStore": "etcd://localhost:2379", - "CgroupDriver": "cgroupfs", - "Containers": 11, - "ContainersRunning": 7, - "ContainersStopped": 3, - "ContainersPaused": 1, - "CpuCfsPeriod": true, - "CpuCfsQuota": true, - "Debug": false, - "DockerRootDir": "/var/lib/docker", - "Driver": "btrfs", - "DriverStatus": [[""]], - "ExperimentalBuild": false, - "HttpProxy": "http://test:test@localhost:8080", - "HttpsProxy": "https://test:test@localhost:8080", - "ID": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS", - "IPv4Forwarding": true, - "Images": 16, - "IndexServerAddress": "https://index.docker.io/v1/", - "InitPath": "/usr/bin/docker", - "InitSha1": "", - "KernelMemory": true, - "KernelVersion": "3.12.0-1-amd64", - "Labels": [ - "storage=ssd" - ], - "MemTotal": 2099236864, - "MemoryLimit": true, - "NCPU": 1, - "NEventsListener": 0, - "NFd": 11, - "NGoroutines": 21, - "Name": "prod-server-42", - "NoProxy": "9.81.1.160", - "OomKillDisable": true, - "OSType": "linux", - "OperatingSystem": "Boot2Docker", - "Plugins": { - "Volume": [ - "local" - ], - "Network": [ - "null", - "host", - "bridge" - ] - }, - "RegistryConfig": { - "IndexConfigs": { - "docker.io": { - "Mirrors": null, - "Name": "docker.io", - "Official": true, - "Secure": true - } - }, - "InsecureRegistryCIDRs": [ - "127.0.0.0/8" - ] - }, - "SecurityOptions": [ - "apparmor", - "seccomp", - "selinux" - ], - "ServerVersion": "1.9.0", - "SwapLimit": false, - "SystemStatus": [["State", "Healthy"]], - "SystemTime": "2015-03-10T11:11:23.730591467-07:00" - } - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Show the docker version information - -`GET /version` - -Show the docker version information - -**Example request**: - - GET /version HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Version": "1.13.0", - "Os": "linux", - "KernelVersion": "3.19.0-23-generic", - "GoVersion": "go1.6.3", - "GitCommit": "deadbee", - "Arch": "amd64", - "ApiVersion": "1.25", - "BuildTime": "2016-06-14T07:09:13.444803460+00:00", - "Experimental": true - } - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Ping the docker server - -`GET /_ping` - -Ping the docker server - -**Example request**: - - GET /_ping HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: text/plain - - OK - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Create a new image from a container's changes - -`POST /commit` - -Create a new image from a container's changes - -**Example request**: - - POST /commit?container=44c004db4b17&comment=message&repo=myrepo HTTP/1.1 - Content-Type: application/json - - { - "Hostname": "", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": true, - "AttachStderr": true, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": null, - "Cmd": [ - "date" - ], - "Mounts": [ - { - "Source": "/data", - "Destination": "/data", - "Mode": "ro,Z", - "RW": false - } - ], - "Labels": { - "key1": "value1", - "key2": "value2" - }, - "WorkingDir": "", - "NetworkDisabled": false, - "ExposedPorts": { - "22/tcp": {} - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - {"Id": "596069db4bf5"} - -**JSON parameters**: - -- **config** - the container's configuration - -**Query parameters**: - -- **container** – source container -- **repo** – repository -- **tag** – tag -- **comment** – commit message -- **author** – author (e.g., "John Hannibal Smith - <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>") -- **pause** – 1/True/true or 0/False/false, whether to pause the container before committing -- **changes** – Dockerfile instructions to apply while committing - -**Status codes**: - -- **201** – no error -- **404** – no such container -- **500** – server error - -### Monitor Docker's events - -`GET /events` - -Get container events from docker, in real time via streaming. - -Docker containers report the following events: - - attach, commit, copy, create, destroy, detach, die, exec_create, exec_detach, exec_start, export, kill, oom, pause, rename, resize, restart, start, stop, top, unpause, update - -Docker images report the following events: - - delete, import, load, pull, push, save, tag, untag - -Docker volumes report the following events: - - create, mount, unmount, destroy - -Docker networks report the following events: - - create, connect, disconnect, destroy - -Docker daemon report the following event: - - reload - -**Example request**: - - GET /events?since=1374067924 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - Server: Docker/1.11.0 (linux) - Date: Fri, 29 Apr 2016 15:18:06 GMT - Transfer-Encoding: chunked - - { - "status": "pull", - "id": "alpine:latest", - "Type": "image", - "Action": "pull", - "Actor": { - "ID": "alpine:latest", - "Attributes": { - "name": "alpine" - } - }, - "time": 1461943101, - "timeNano": 1461943101301854122 - } - { - "status": "create", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "create", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943101, - "timeNano": 1461943101381709551 - } - { - "status": "attach", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "attach", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943101, - "timeNano": 1461943101383858412 - } - { - "Type": "network", - "Action": "connect", - "Actor": { - "ID": "7dc8ac97d5d29ef6c31b6052f3938c1e8f2749abbd17d1bd1febf2608db1b474", - "Attributes": { - "container": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "name": "bridge", - "type": "bridge" - } - }, - "time": 1461943101, - "timeNano": 1461943101394865557 - } - { - "status": "start", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "start", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943101, - "timeNano": 1461943101607533796 - } - { - "status": "resize", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "resize", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "height": "46", - "image": "alpine", - "name": "my-container", - "width": "204" - } - }, - "time": 1461943101, - "timeNano": 1461943101610269268 - } - { - "status": "die", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "die", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "exitCode": "0", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943105, - "timeNano": 1461943105079144137 - } - { - "Type": "network", - "Action": "disconnect", - "Actor": { - "ID": "7dc8ac97d5d29ef6c31b6052f3938c1e8f2749abbd17d1bd1febf2608db1b474", - "Attributes": { - "container": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "name": "bridge", - "type": "bridge" - } - }, - "time": 1461943105, - "timeNano": 1461943105230860245 - } - { - "status": "destroy", - "id": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "from": "alpine", - "Type": "container", - "Action": "destroy", - "Actor": { - "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743", - "Attributes": { - "com.example.some-label": "some-label-value", - "image": "alpine", - "name": "my-container" - } - }, - "time": 1461943105, - "timeNano": 1461943105338056026 - } - -**Query parameters**: - -- **since** – Timestamp. Show all events created since timestamp and then stream -- **until** – Timestamp. Show events created until given timestamp and stop streaming -- **filters** – A json encoded value of the filters (a map[string][]string) to process on the event list. Available filters: - - `container=`; -- container to filter - - `event=`; -- event to filter - - `image=`; -- image to filter - - `label=`; -- image and container label to filter - - `type=`; -- either `container` or `image` or `volume` or `network` or `daemon` - - `volume=`; -- volume to filter - - `network=`; -- network to filter - - `daemon=`; -- daemon name or id to filter - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Get a tarball containing all images in a repository - -`GET /images/(name)/get` - -Get a tarball containing all images and metadata for the repository specified -by `name`. - -If `name` is a specific name and tag (e.g. ubuntu:latest), then only that image -(and its parents) are returned. If `name` is an image ID, similarly only that -image (and its parents) are returned, but with the exclusion of the -'repositories' file in the tarball, as there were no image names referenced. - -See the [image tarball format](docker_remote_api_v1.25.md#image-tarball-format) for more details. - -**Example request** - - GET /images/ubuntu/get - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - Binary data stream - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Get a tarball containing all images - -`GET /images/get` - -Get a tarball containing all images and metadata for one or more repositories. - -For each value of the `names` parameter: if it is a specific name and tag (e.g. -`ubuntu:latest`), then only that image (and its parents) are returned; if it is -an image ID, similarly only that image (and its parents) are returned and there -would be no names referenced in the 'repositories' file for this image ID. - -See the [image tarball format](docker_remote_api_v1.25.md#image-tarball-format) for more details. - -**Example request** - - GET /images/get?names=myname%2Fmyapp%3Alatest&names=busybox - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/x-tar - - Binary data stream - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Load a tarball with a set of images and tags into docker - -`POST /images/load` - -Load a set of images and tags into a Docker repository. -See the [image tarball format](docker_remote_api_v1.25.md#image-tarball-format) for more details. - -**Example request** - - POST /images/load - Content-Type: application/x-tar - - Tarball in body - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - Transfer-Encoding: chunked - - {"status":"Loading layer","progressDetail":{"current":32768,"total":1292800},"progress":"[= ] 32.77 kB/1.293 MB","id":"8ac8bfaff55a"} - {"status":"Loading layer","progressDetail":{"current":65536,"total":1292800},"progress":"[== ] 65.54 kB/1.293 MB","id":"8ac8bfaff55a"} - {"status":"Loading layer","progressDetail":{"current":98304,"total":1292800},"progress":"[=== ] 98.3 kB/1.293 MB","id":"8ac8bfaff55a"} - {"status":"Loading layer","progressDetail":{"current":131072,"total":1292800},"progress":"[===== ] 131.1 kB/1.293 MB","id":"8ac8bfaff55a"} - ... - {"stream":"Loaded image: busybox:latest\n"} - -**Example response**: - -If the "quiet" query parameter is set to `true` / `1` (`?quiet=1`), progress -details are suppressed, and only a confirmation message is returned once the -action completes. - - HTTP/1.1 200 OK - Content-Type: application/json - Transfer-Encoding: chunked - - {"stream":"Loaded image: busybox:latest\n"} - -**Query parameters**: - -- **quiet** – Boolean value, suppress progress details during load. Defaults - to `0` / `false` if omitted. - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Image tarball format - -An image tarball contains one directory per image layer (named using its long ID), -each containing these files: - -- `VERSION`: currently `1.0` - the file format version -- `json`: detailed layer information, similar to `docker inspect layer_id` -- `layer.tar`: A tarfile containing the filesystem changes in this layer - -The `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories -for storing attribute changes and deletions. - -If the tarball defines a repository, the tarball should also include a `repositories` file at -the root that contains a list of repository and tag names mapped to layer IDs. - -``` -{"hello-world": - {"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"} -} -``` - -### Exec Create - -`POST /containers/(id or name)/exec` - -Sets up an exec instance in a running container `id` - -**Example request**: - - POST /containers/e90e34656806/exec HTTP/1.1 - Content-Type: application/json - - { - "AttachStdin": true, - "AttachStdout": true, - "AttachStderr": true, - "Cmd": ["sh"], - "DetachKeys": "ctrl-p,ctrl-q", - "Privileged": true, - "Tty": true, - "User": "123:456" - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Id": "f90e34656806", - "Warnings":[] - } - -**JSON parameters**: - -- **AttachStdin** - Boolean value, attaches to `stdin` of the `exec` command. -- **AttachStdout** - Boolean value, attaches to `stdout` of the `exec` command. -- **AttachStderr** - Boolean value, attaches to `stderr` of the `exec` command. -- **DetachKeys** – Override the key sequence for detaching a - container. Format is a single character `[a-Z]` or `ctrl-` - where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. -- **Tty** - Boolean value to allocate a pseudo-TTY. -- **Cmd** - Command to run specified as a string or an array of strings. -- **Privileged** - Boolean value, runs the exec process with extended privileges. -- **User** - A string value specifying the user, and optionally, group to run - the exec process inside the container. Format is one of: `"user"`, - `"user:group"`, `"uid"`, or `"uid:gid"`. - -**Status codes**: - -- **201** – no error -- **404** – no such container -- **409** - container is paused -- **500** - server error - -### Exec Start - -`POST /exec/(id)/start` - -Starts a previously set up `exec` instance `id`. If `detach` is true, this API -returns after starting the `exec` command. Otherwise, this API sets up an -interactive session with the `exec` command. - -**Example request**: - - POST /exec/e90e34656806/start HTTP/1.1 - Content-Type: application/json - - { - "Detach": false, - "Tty": false - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/vnd.docker.raw-stream - - {% raw %} - {{ STREAM }} - {% endraw %} - -**JSON parameters**: - -- **Detach** - Detach from the `exec` command. -- **Tty** - Boolean value to allocate a pseudo-TTY. - -**Status codes**: - -- **200** – no error -- **404** – no such exec instance -- **409** - container is paused - -**Stream details**: - -Similar to the stream behavior of `POST /containers/(id or name)/attach` API - -### Exec Resize - -`POST /exec/(id)/resize` - -Resizes the `tty` session used by the `exec` command `id`. The unit is number of characters. -This API is valid only if `tty` was specified as part of creating and starting the `exec` command. - -**Example request**: - - POST /exec/e90e34656806/resize?h=40&w=80 HTTP/1.1 - Content-Type: text/plain - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: text/plain - -**Query parameters**: - -- **h** – height of `tty` session -- **w** – width - -**Status codes**: - -- **201** – no error -- **404** – no such exec instance - -### Exec Inspect - -`GET /exec/(id)/json` - -Return low-level information about the `exec` command `id`. - -**Example request**: - - GET /exec/11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39/json HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "CanRemove": false, - "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", - "DetachKeys": "", - "ExitCode": 2, - "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", - "OpenStderr": true, - "OpenStdin": true, - "OpenStdout": true, - "ProcessConfig": { - "arguments": [ - "-c", - "exit 2" - ], - "entrypoint": "sh", - "privileged": false, - "tty": true, - "user": "1000" - }, - "Running": false - } - -**Status codes**: - -- **200** – no error -- **404** – no such exec instance -- **500** - server error - -## 3.4 Volumes - -### List volumes - -`GET /volumes` - -**Example request**: - - GET /volumes HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Volumes": [ - { - "Name": "tardis", - "Driver": "local", - "Mountpoint": "/var/lib/docker/volumes/tardis", - "Labels":{ - "com.example.some-label": "some-value", - "com.example.some-other-label": "some-other-value" - }, - "Scope": "local" - } - ], - "Warnings": [] - } - -**Query parameters**: - -- **filters** - JSON encoded value of the filters (a `map[string][]string`) to process on the volumes list. Available filters: - - `name=` Matches all or part of a volume name. - - `dangling=` When set to `true` (or `1`), returns all volumes that are "dangling" (not in use by a container). When set to `false` (or `0`), only volumes that are in use by one or more containers are returned. - - `driver=` Matches all or part of a volume driver name. - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Create a volume - -`POST /volumes/create` - -Create a volume - -**Example request**: - - POST /volumes/create HTTP/1.1 - Content-Type: application/json - - { - "Name": "tardis", - "Labels": { - "com.example.some-label": "some-value", - "com.example.some-other-label": "some-other-value" - }, - "Driver": "custom" - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "Name": "tardis", - "Driver": "custom", - "Mountpoint": "/var/lib/docker/volumes/tardis", - "Status": { - "hello": "world" - }, - "Labels": { - "com.example.some-label": "some-value", - "com.example.some-other-label": "some-other-value" - }, - "Scope": "local" - } - -**Status codes**: - -- **201** - no error -- **500** - server error - -**JSON parameters**: - -- **Name** - The new volume's name. If not specified, Docker generates a name. -- **Driver** - Name of the volume driver to use. Defaults to `local` for the name. -- **DriverOpts** - A mapping of driver options and values. These options are - passed directly to the driver and are driver specific. -- **Labels** - Labels to set on the volume, specified as a map: `{"key":"value","key2":"value2"}` - -**JSON fields in response**: - -Refer to the [inspect a volume](docker_remote_api_v1.25.md#inspect-a-volume) section or details about the -JSON fields returned in the response. - -### Inspect a volume - -`GET /volumes/(name)` - -Return low-level information on the volume `name` - -**Example request**: - - GET /volumes/tardis - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "Name": "tardis", - "Driver": "custom", - "Mountpoint": "/var/lib/docker/volumes/tardis/_data", - "Status": { - "hello": "world" - }, - "Labels": { - "com.example.some-label": "some-value", - "com.example.some-other-label": "some-other-value" - }, - "Scope": "local" - } - -**Status codes**: - -- **200** - no error -- **404** - no such volume -- **500** - server error - -**JSON fields in response**: - -The following fields can be returned in the API response. Empty fields, or -fields that are not supported by the volume's driver may be omitted in the -response. - -- **Name** - Name of the volume. -- **Driver** - Name of the volume driver used by the volume. -- **Mountpoint** - Mount path of the volume on the host. -- **Status** - Low-level details about the volume, provided by the volume driver. - Details are returned as a map with key/value pairs: `{"key":"value","key2":"value2"}`. - The `Status` field is optional, and is omitted if the volume driver does not - support this feature. -- **Labels** - Labels set on the volume, specified as a map: `{"key":"value","key2":"value2"}`. -- **Scope** - Scope describes the level at which the volume exists, can be one of - `global` for cluster-wide or `local` for machine level. The default is `local`. - -### Remove a volume - -`DELETE /volumes/(name)` - -Instruct the driver to remove the volume (`name`). - -**Example request**: - - DELETE /volumes/tardis HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** - no error -- **404** - no such volume or volume driver -- **409** - volume is in use and cannot be removed -- **500** - server error - -## 3.5 Networks - -### List networks - -`GET /networks` - -**Example request**: - - GET /networks?filters={"type":{"custom":true}} HTTP/1.1 - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Type: application/json - -[ - { - "Name": "bridge", - "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", - "Scope": "local", - "Driver": "bridge", - "EnableIPv6": false, - "Internal": false, - "IPAM": { - "Driver": "default", - "Config": [ - { - "Subnet": "172.17.0.0/16" - } - ] - }, - "Containers": { - "39b69226f9d79f5634485fb236a23b2fe4e96a0a94128390a7fbbcc167065867": { - "EndpointID": "ed2419a97c1d9954d05b46e462e7002ea552f216e9b136b80a7db8d98b442eda", - "MacAddress": "02:42:ac:11:00:02", - "IPv4Address": "172.17.0.2/16", - "IPv6Address": "" - } - }, - "Options": { - "com.docker.network.bridge.default_bridge": "true", - "com.docker.network.bridge.enable_icc": "true", - "com.docker.network.bridge.enable_ip_masquerade": "true", - "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", - "com.docker.network.bridge.name": "docker0", - "com.docker.network.driver.mtu": "1500" - } - }, - { - "Name": "none", - "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", - "Scope": "local", - "Driver": "null", - "EnableIPv6": false, - "Internal": false, - "IPAM": { - "Driver": "default", - "Config": [] - }, - "Containers": {}, - "Options": {} - }, - { - "Name": "host", - "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", - "Scope": "local", - "Driver": "host", - "EnableIPv6": false, - "Internal": false, - "IPAM": { - "Driver": "default", - "Config": [] - }, - "Containers": {}, - "Options": {} - } -] -``` - -**Query parameters**: - -- **filters** - JSON encoded network list filter. The filter value is one of: - - `driver=` Matches a network's driver. - - `id=` Matches all or part of a network id. - - `label=` or `label==` of a network label. - - `name=` Matches all or part of a network name. - - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks. - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Inspect network - -`GET /networks/` - -**Example request**: - - GET /networks/7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99 HTTP/1.1 - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Type: application/json - -{ - "Name": "net01", - "Id": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99", - "Scope": "local", - "Driver": "bridge", - "EnableIPv6": false, - "IPAM": { - "Driver": "default", - "Config": [ - { - "Subnet": "172.19.0.0/16", - "Gateway": "172.19.0.1" - } - ], - "Options": { - "foo": "bar" - } - }, - "Internal": false, - "Containers": { - "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { - "Name": "test", - "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", - "MacAddress": "02:42:ac:13:00:02", - "IPv4Address": "172.19.0.2/16", - "IPv6Address": "" - } - }, - "Options": { - "com.docker.network.bridge.default_bridge": "true", - "com.docker.network.bridge.enable_icc": "true", - "com.docker.network.bridge.enable_ip_masquerade": "true", - "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", - "com.docker.network.bridge.name": "docker0", - "com.docker.network.driver.mtu": "1500" - }, - "Labels": { - "com.example.some-label": "some-value", - "com.example.some-other-label": "some-other-value" - } -} -``` - -**Status codes**: - -- **200** - no error -- **404** - network not found - -### Create a network - -`POST /networks/create` - -Create a network - -**Example request**: - -``` -POST /networks/create HTTP/1.1 -Content-Type: application/json - -{ - "Name":"isolated_nw", - "CheckDuplicate":false, - "Driver":"bridge", - "EnableIPv6": true, - "IPAM":{ - "Config":[ - { - "Subnet":"172.20.0.0/16", - "IPRange":"172.20.10.0/24", - "Gateway":"172.20.10.11" - }, - { - "Subnet":"2001:db8:abcd::/64", - "Gateway":"2001:db8:abcd::1011" - } - ], - "Options": { - "foo": "bar" - } - }, - "Internal":true, - "Options": { - "com.docker.network.bridge.default_bridge": "true", - "com.docker.network.bridge.enable_icc": "true", - "com.docker.network.bridge.enable_ip_masquerade": "true", - "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", - "com.docker.network.bridge.name": "docker0", - "com.docker.network.driver.mtu": "1500" - }, - "Labels": { - "com.example.some-label": "some-value", - "com.example.some-other-label": "some-other-value" - } -} -``` - -**Example response**: - -``` -HTTP/1.1 201 Created -Content-Type: application/json - -{ - "Id": "22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30", - "Warning": "" -} -``` - -**Status codes**: - -- **201** - no error -- **404** - plugin not found -- **500** - server error - -**JSON parameters**: - -- **Name** - The new network's name. this is a mandatory field -- **CheckDuplicate** - Requests daemon to check for networks with same name -- **Driver** - Name of the network driver plugin to use. Defaults to `bridge` driver -- **Internal** - Restrict external access to the network -- **IPAM** - Optional custom IP scheme for the network -- **EnableIPv6** - Enable IPv6 on the network -- **Options** - Network specific options to be used by the drivers -- **Labels** - Labels to set on the network, specified as a map: `{"key":"value" [,"key2":"value2"]}` - -### Connect a container to a network - -`POST /networks/(id)/connect` - -Connect a container to a network - -**Example request**: - -``` -POST /networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30/connect HTTP/1.1 -Content-Type: application/json - -{ - "Container":"3613f73ba0e4", - "EndpointConfig": { - "IPAMConfig": { - "IPv4Address":"172.24.56.89", - "IPv6Address":"2001:db8::5689" - } - } -} -``` - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** - no error -- **403** - operation not supported for swarm scoped networks -- **404** - network or container is not found -- **500** - Internal Server Error - -**JSON parameters**: - -- **container** - container-id/name to be connected to the network - -### Disconnect a container from a network - -`POST /networks/(id)/disconnect` - -Disconnect a container from a network - -**Example request**: - -``` -POST /networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30/disconnect HTTP/1.1 -Content-Type: application/json - -{ - "Container":"3613f73ba0e4", - "Force":false -} -``` - -**Example response**: - - HTTP/1.1 200 OK - -**Status codes**: - -- **200** - no error -- **403** - operation not supported for swarm scoped networks -- **404** - network or container not found -- **500** - Internal Server Error - -**JSON parameters**: - -- **Container** - container-id/name to be disconnected from a network -- **Force** - Force the container to disconnect from a network - -### Remove a network - -`DELETE /networks/(id)` - -Instruct the driver to remove the network (`id`). - -**Example request**: - - DELETE /networks/22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30 HTTP/1.1 - -**Example response**: - - HTTP/1.1 204 No Content - -**Status codes**: - -- **204** - no error -- **404** - no such network -- **500** - server error - -## 3.6 Plugins - -### List plugins - -`GET /plugins` - -Returns information about installed plugins. - -**Example request**: - - GET /plugins HTTP/1.1 - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Type: application/json - -[ - { - "Id": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078", - "Name": "tiborvass/no-remove", - "Tag": "latest", - "Active": true, - "Config": { - "Mounts": [ - { - "Name": "", - "Description": "", - "Settable": null, - "Source": "/data", - "Destination": "/data", - "Type": "bind", - "Options": [ - "shared", - "rbind" - ] - }, - { - "Name": "", - "Description": "", - "Settable": null, - "Source": null, - "Destination": "/foobar", - "Type": "tmpfs", - "Options": null - } - ], - "Env": [ - "DEBUG=1" - ], - "Args": null, - "Devices": null - }, - "Manifest": { - "ManifestVersion": "v0", - "Description": "A test plugin for Docker", - "Documentation": "https://docs.docker.com/engine/extend/plugins/", - "Interface": { - "Types": [ - "docker.volumedriver/1.0" - ], - "Socket": "plugins.sock" - }, - "Entrypoint": [ - "plugin-no-remove", - "/data" - ], - "Workdir": "", - "User": { - }, - "Network": { - "Type": "host" - }, - "Capabilities": null, - "Mounts": [ - { - "Name": "", - "Description": "", - "Settable": null, - "Source": "/data", - "Destination": "/data", - "Type": "bind", - "Options": [ - "shared", - "rbind" - ] - }, - { - "Name": "", - "Description": "", - "Settable": null, - "Source": null, - "Destination": "/foobar", - "Type": "tmpfs", - "Options": null - } - ], - "Devices": [ - { - "Name": "device", - "Description": "a host device to mount", - "Settable": null, - "Path": "/dev/cpu_dma_latency" - } - ], - "Env": [ - { - "Name": "DEBUG", - "Description": "If set, prints debug messages", - "Settable": null, - "Value": "1" - } - ], - "Args": { - "Name": "args", - "Description": "command line arguments", - "Settable": null, - "Value": [ - - ] - } - } - } -] -``` - -**Status codes**: - -- **200** - no error -- **500** - server error - -### Install a plugin - -`POST /plugins/pull?name=` - -Pulls and installs a plugin. After the plugin is installed, it can be enabled -using the [`POST /plugins/(plugin name)/enable` endpoint](docker_remote_api_v1.25.md#enable-a-plugin). - -**Example request**: - -``` -POST /plugins/pull?name=tiborvass/no-remove:latest HTTP/1.1 -``` - -The `:latest` tag is optional, and is used as default if omitted. When using -this endpoint to pull a plugin from the registry, the `X-Registry-Auth` header -can be used to include a base64-encoded AuthConfig object. Refer to the [create -an image](docker_remote_api_v1.25.md#create-an-image) section for more details. - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Type: application/json -Content-Length: 175 - -[ - { - "Name": "network", - "Description": "", - "Value": [ - "host" - ] - }, - { - "Name": "mount", - "Description": "", - "Value": [ - "/data" - ] - }, - { - "Name": "device", - "Description": "", - "Value": [ - "/dev/cpu_dma_latency" - ] - } -] -``` - -**Query parameters**: - -- **name** - Name of the plugin to pull. The name may include a tag or digest. - This parameter is required. - -**Status codes**: - -- **200** - no error -- **500** - error parsing reference / not a valid repository/tag: repository - name must have at least one component -- **500** - plugin already exists - -### Inspect a plugin - -`GET /plugins/(plugin name)` - -Returns detailed information about an installed plugin. - -**Example request**: - -``` -GET /plugins/tiborvass/no-remove:latest HTTP/1.1 -``` - -The `:latest` tag is optional, and is used as default if omitted. - - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Type: application/json - -{ - "Id": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078", - "Name": "tiborvass/no-remove", - "Tag": "latest", - "Active": false, - "Config": { - "Mounts": [ - { - "Name": "", - "Description": "", - "Settable": null, - "Source": "/data", - "Destination": "/data", - "Type": "bind", - "Options": [ - "shared", - "rbind" - ] - }, - { - "Name": "", - "Description": "", - "Settable": null, - "Source": null, - "Destination": "/foobar", - "Type": "tmpfs", - "Options": null - } - ], - "Env": [ - "DEBUG=1" - ], - "Args": null, - "Devices": null - }, - "Manifest": { - "ManifestVersion": "v0", - "Description": "A test plugin for Docker", - "Documentation": "https://docs.docker.com/engine/extend/plugins/", - "Interface": { - "Types": [ - "docker.volumedriver/1.0" - ], - "Socket": "plugins.sock" - }, - "Entrypoint": [ - "plugin-no-remove", - "/data" - ], - "Workdir": "", - "User": { - }, - "Network": { - "Type": "host" - }, - "Capabilities": null, - "Mounts": [ - { - "Name": "", - "Description": "", - "Settable": null, - "Source": "/data", - "Destination": "/data", - "Type": "bind", - "Options": [ - "shared", - "rbind" - ] - }, - { - "Name": "", - "Description": "", - "Settable": null, - "Source": null, - "Destination": "/foobar", - "Type": "tmpfs", - "Options": null - } - ], - "Devices": [ - { - "Name": "device", - "Description": "a host device to mount", - "Settable": null, - "Path": "/dev/cpu_dma_latency" - } - ], - "Env": [ - { - "Name": "DEBUG", - "Description": "If set, prints debug messages", - "Settable": null, - "Value": "1" - } - ], - "Args": { - "Name": "args", - "Description": "command line arguments", - "Settable": null, - "Value": [ - - ] - } - } -} -``` - -**Status codes**: - -- **200** - no error -- **404** - plugin not installed - - - -### Enable a plugin - -`POST /plugins/(plugin name)/enable` - -Enables a plugin - -**Example request**: - -``` -POST /plugins/tiborvass/no-remove:latest/enable HTTP/1.1 -``` - -The `:latest` tag is optional, and is used as default if omitted. - - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Length: 0 -Content-Type: text/plain; charset=utf-8 -``` - -**Status codes**: - -- **200** - no error -- **500** - plugin is already enabled - -### Disable a plugin - -`POST /plugins/(plugin name)/disable` - -Disables a plugin - -**Example request**: - -``` -POST /plugins/tiborvass/no-remove:latest/disable HTTP/1.1 -``` - -The `:latest` tag is optional, and is used as default if omitted. - - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Length: 0 -Content-Type: text/plain; charset=utf-8 -``` - -**Status codes**: - -- **200** - no error -- **500** - plugin is already disabled - -### Remove a plugin - -`DELETE /plugins/(plugin name)` - -Removes a plugin - -**Example request**: - -``` -DELETE /plugins/tiborvass/no-remove:latest HTTP/1.1 -``` - -The `:latest` tag is optional, and is used as default if omitted. - -**Example response**: - -``` -HTTP/1.1 200 OK -Content-Length: 0 -Content-Type: text/plain; charset=utf-8 -``` - -**Query parameters**: - -- **force** - Boolean value, set to `1` / `True` / `true` to force removing the - plugin. Forcing removal disables the plugin before removing, but may result - in issues if the plugin is in use by a container. - -**Status codes**: - -- **200** - no error -- **404** - plugin not installed -- **500** - plugin is active - - - -## 3.7 Nodes - -**Note**: Node operations require the engine to be part of a swarm. - -### List nodes - - -`GET /nodes` - -List nodes - -**Example request**: - - GET /nodes HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "ID": "24ifsmvkjbyhk", - "Version": { - "Index": 8 - }, - "CreatedAt": "2016-06-07T20:31:11.853781916Z", - "UpdatedAt": "2016-06-07T20:31:11.999868824Z", - "Spec": { - "Name": "my-node", - "Role": "manager", - "Availability": "active" - "Labels": { - "foo": "bar" - } - }, - "Description": { - "Hostname": "bf3067039e47", - "Platform": { - "Architecture": "x86_64", - "OS": "linux" - }, - "Resources": { - "NanoCPUs": 4000000000, - "MemoryBytes": 8272408576 - }, - "Engine": { - "EngineVersion": "1.12.0-dev", - "Labels": { - "foo": "bar", - } - "Plugins": [ - { - "Type": "Volume", - "Name": "local" - }, - { - "Type": "Network", - "Name": "bridge" - } - { - "Type": "Network", - "Name": "null" - } - { - "Type": "Network", - "Name": "overlay" - } - ] - } - }, - "Status": { - "State": "ready" - }, - "ManagerStatus": { - "Leader": true, - "Reachability": "reachable", - "Addr": "172.17.0.2:2377"" - } - } - ] - -**Query parameters**: - -- **filters** – a JSON encoded value of the filters (a `map[string][]string`) to process on the - nodes list. Available filters: - - `id=` - - `name=` - - `membership=`(`pending`|`accepted`|`rejected`)` - - `role=`(`worker`|`manager`)` - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Inspect a node - - -`GET /nodes/` - -Return low-level information on the node `id` - -**Example request**: - - GET /nodes/24ifsmvkjbyhk HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "ID": "24ifsmvkjbyhk", - "Version": { - "Index": 8 - }, - "CreatedAt": "2016-06-07T20:31:11.853781916Z", - "UpdatedAt": "2016-06-07T20:31:11.999868824Z", - "Spec": { - "Name": "my-node", - "Role": "manager", - "Availability": "active" - "Labels": { - "foo": "bar" - } - }, - "Description": { - "Hostname": "bf3067039e47", - "Platform": { - "Architecture": "x86_64", - "OS": "linux" - }, - "Resources": { - "NanoCPUs": 4000000000, - "MemoryBytes": 8272408576 - }, - "Engine": { - "EngineVersion": "1.12.0-dev", - "Labels": { - "foo": "bar", - } - "Plugins": [ - { - "Type": "Volume", - "Name": "local" - }, - { - "Type": "Network", - "Name": "bridge" - } - { - "Type": "Network", - "Name": "null" - } - { - "Type": "Network", - "Name": "overlay" - } - ] - } - }, - "Status": { - "State": "ready" - }, - "ManagerStatus": { - "Leader": true, - "Reachability": "reachable", - "Addr": "172.17.0.2:2377"" - } - } - -**Status codes**: - -- **200** – no error -- **404** – no such node -- **500** – server error - -### Remove a node - - -`DELETE /nodes/(id)` - -Remove a node [`id`] from the swarm. - -**Example request**: - - DELETE /nodes/24ifsmvkjbyhk HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Query parameters**: - -- **force** - 1/True/true or 0/False/false, Force remove an active node. - Default `false`. - -**Status codes**: - -- **200** – no error -- **404** – no such node -- **500** – server error - -### Update a node - - -`POST /nodes/(id)/update` - -Update the node `id`. - -The payload of the `POST` request is the new `NodeSpec` and -overrides the current `NodeSpec` for the specified node. - -If `Availability` or `Role` are omitted, this returns an -error. Any other field omitted resets the current value to either -an empty value or the default cluster-wide value. - -**Example Request** - - POST /nodes/24ifsmvkjbyhk/update?version=8 HTTP/1.1 - Content-Type: application/json - - { - "Availability": "active", - "Name": "node-name", - "Role": "manager", - "Labels": { - "foo": "bar" - } - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Query parameters**: - -- **version** – The version number of the node object being updated. This is - required to avoid conflicting writes. - -JSON Parameters: - -- **Annotations** – Optional medata to associate with the service. - - **Name** – User-defined name for the service. - - **Labels** – A map of labels to associate with the service (e.g., - `{"key":"value"[,"key2":"value2"]}`). -- **Role** - Role of the node (worker/manager). -- **Availability** - Availability of the node (active/pause/drain). - - -**Status codes**: - -- **200** – no error -- **404** – no such node -- **500** – server error - -## 3.8 Swarm - -### Inspect swarm - - -`GET /swarm` - -Inspect swarm - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "CreatedAt" : "2016-08-15T16:00:20.349727406Z", - "Spec" : { - "Dispatcher" : { - "HeartbeatPeriod" : 5000000000 - }, - "Orchestration" : { - "TaskHistoryRetentionLimit" : 10 - }, - "CAConfig" : { - "NodeCertExpiry" : 7776000000000000 - }, - "Raft" : { - "LogEntriesForSlowFollowers" : 500, - "HeartbeatTick" : 1, - "SnapshotInterval" : 10000, - "ElectionTick" : 3 - }, - "TaskDefaults" : {}, - "Name" : "default" - }, - "JoinTokens" : { - "Worker" : "SWMTKN-1-1h8aps2yszaiqmz2l3oc5392pgk8e49qhx2aj3nyv0ui0hez2a-6qmn92w6bu3jdvnglku58u11a", - "Manager" : "SWMTKN-1-1h8aps2yszaiqmz2l3oc5392pgk8e49qhx2aj3nyv0ui0hez2a-8llk83c4wm9lwioey2s316r9l" - }, - "ID" : "70ilmkj2f6sp2137c753w2nmt", - "UpdatedAt" : "2016-08-15T16:32:09.623207604Z", - "Version" : { - "Index" : 51 - } - } - -**Status codes**: - -- **200** - no error - -### Initialize a new swarm - - -`POST /swarm/init` - -Initialize a new swarm. The body of the HTTP response includes the node ID. - -**Example request**: - - POST /swarm/init HTTP/1.1 - Content-Type: application/json - - { - "ListenAddr": "0.0.0.0:2377", - "AdvertiseAddr": "192.168.1.1:2377", - "ForceNewCluster": false, - "Spec": { - "Orchestration": {}, - "Raft": {}, - "Dispatcher": {}, - "CAConfig": {} - } - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 28 - Content-Type: application/json - Date: Thu, 01 Sep 2016 21:49:13 GMT - Server: Docker/1.12.0 (linux) - - "7v2t30z9blmxuhnyo6s4cpenp" - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **406** – node is already part of a swarm - -JSON Parameters: - -- **ListenAddr** – Listen address used for inter-manager communication, as well as determining - the networking interface used for the VXLAN Tunnel Endpoint (VTEP). This can either be an - address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port - number, like `eth0:4567`. If the port number is omitted, the default swarm listening port is - used. -- **AdvertiseAddr** – Externally reachable address advertised to other nodes. This can either be - an address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port - number, like `eth0:4567`. If the port number is omitted, the port number from the listen - address is used. If `AdvertiseAddr` is not specified, it will be automatically detected when - possible. -- **ForceNewCluster** – Force creation of a new swarm. -- **Spec** – Configuration settings for the new swarm. - - **Orchestration** – Configuration settings for the orchestration aspects of the swarm. - - **TaskHistoryRetentionLimit** – Maximum number of tasks history stored. - - **Raft** – Raft related configuration. - - **SnapshotInterval** – Number of logs entries between snapshot. - - **KeepOldSnapshots** – Number of snapshots to keep beyond the current snapshot. - - **LogEntriesForSlowFollowers** – Number of log entries to keep around to sync up slow - followers after a snapshot is created. - - **HeartbeatTick** – Amount of ticks (in seconds) between each heartbeat. - - **ElectionTick** – Amount of ticks (in seconds) needed without a leader to trigger a new - election. - - **Dispatcher** – Configuration settings for the task dispatcher. - - **HeartbeatPeriod** – The delay for an agent to send a heartbeat to the dispatcher. - - **CAConfig** – Certificate authority configuration. - - **NodeCertExpiry** – Automatic expiry for nodes certificates. - - **ExternalCA** - Configuration for forwarding signing requests to an external - certificate authority. - - **Protocol** - Protocol for communication with the external CA - (currently only "cfssl" is supported). - - **URL** - URL where certificate signing requests should be sent. - - **Options** - An object with key/value pairs that are interpreted - as protocol-specific options for the external CA driver. - -### Join an existing swarm - -`POST /swarm/join` - -Join an existing swarm - -**Example request**: - - POST /swarm/join HTTP/1.1 - Content-Type: application/json - - { - "ListenAddr": "0.0.0.0:2377", - "AdvertiseAddr": "192.168.1.1:2377", - "RemoteAddrs": ["node1:2377"], - "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **406** – node is already part of a swarm - -JSON Parameters: - -- **ListenAddr** – Listen address used for inter-manager communication if the node gets promoted to - manager, as well as determining the networking interface used for the VXLAN Tunnel Endpoint (VTEP). -- **AdvertiseAddr** – Externally reachable address advertised to other nodes. This can either be - an address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port - number, like `eth0:4567`. If the port number is omitted, the port number from the listen - address is used. If `AdvertiseAddr` is not specified, it will be automatically detected when - possible. -- **RemoteAddr** – Address of any manager node already participating in the swarm. -- **JoinToken** – Secret token for joining this swarm. - -### Leave a swarm - - -`POST /swarm/leave` - -Leave a swarm - -**Example request**: - - POST /swarm/leave HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Query parameters**: - -- **force** - Boolean (0/1, false/true). Force leave swarm, even if this is the last manager or that it will break the cluster. - -**Status codes**: - -- **200** – no error -- **406** – node is not part of a swarm - -### Update a swarm - - -`POST /swarm/update` - -Update a swarm - -**Example request**: - - POST /swarm/update HTTP/1.1 - - { - "Name": "default", - "Orchestration": { - "TaskHistoryRetentionLimit": 10 - }, - "Raft": { - "SnapshotInterval": 10000, - "LogEntriesForSlowFollowers": 500, - "HeartbeatTick": 1, - "ElectionTick": 3 - }, - "Dispatcher": { - "HeartbeatPeriod": 5000000000 - }, - "CAConfig": { - "NodeCertExpiry": 7776000000000000 - }, - "JoinTokens": { - "Worker": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx", - "Manager": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" - } - } - - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**Query parameters**: - -- **version** – The version number of the swarm object being updated. This is - required to avoid conflicting writes. -- **rotateWorkerToken** - Set to `true` (or `1`) to rotate the worker join token. -- **rotateManagerToken** - Set to `true` (or `1`) to rotate the manager join token. - -**Status codes**: - -- **200** – no error -- **400** – bad parameter -- **406** – node is not part of a swarm - -JSON Parameters: - -- **Orchestration** – Configuration settings for the orchestration aspects of the swarm. - - **TaskHistoryRetentionLimit** – Maximum number of tasks history stored. -- **Raft** – Raft related configuration. - - **SnapshotInterval** – Number of logs entries between snapshot. - - **KeepOldSnapshots** – Number of snapshots to keep beyond the current snapshot. - - **LogEntriesForSlowFollowers** – Number of log entries to keep around to sync up slow - followers after a snapshot is created. - - **HeartbeatTick** – Amount of ticks (in seconds) between each heartbeat. - - **ElectionTick** – Amount of ticks (in seconds) needed without a leader to trigger a new - election. -- **Dispatcher** – Configuration settings for the task dispatcher. - - **HeartbeatPeriod** – The delay for an agent to send a heartbeat to the dispatcher. -- **CAConfig** – CA configuration. - - **NodeCertExpiry** – Automatic expiry for nodes certificates. - - **ExternalCA** - Configuration for forwarding signing requests to an external - certificate authority. - - **Protocol** - Protocol for communication with the external CA - (currently only "cfssl" is supported). - - **URL** - URL where certificate signing requests should be sent. - - **Options** - An object with key/value pairs that are interpreted - as protocol-specific options for the external CA driver. -- **JoinTokens** - Tokens that can be used by other nodes to join the swarm. - - **Worker** - Token to use for joining as a worker. - - **Manager** - Token to use for joining as a manager. - -## 3.9 Services - -**Note**: Service operations require to first be part of a swarm. - -### List services - - -`GET /services` - -List services - -**Example request**: - - GET /services HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 OK - Content-Type: application/json - - [ - { - "ID": "9mnpnzenvg8p8tdbtq4wvbkcz", - "Version": { - "Index": 19 - }, - "CreatedAt": "2016-06-07T21:05:51.880065305Z", - "UpdatedAt": "2016-06-07T21:07:29.962229872Z", - "Spec": { - "Name": "hopeful_cori", - "TaskTemplate": { - "ContainerSpec": { - "Image": "redis" - }, - "Resources": { - "Limits": {}, - "Reservations": {} - }, - "RestartPolicy": { - "Condition": "any", - "MaxAttempts": 0 - }, - "Placement": {} - }, - "Mode": { - "Replicated": { - "Replicas": 1 - } - }, - "UpdateConfig": { - "Parallelism": 1, - "FailureAction": "pause" - }, - "EndpointSpec": { - "Mode": "vip", - "Ports": [ - { - "Protocol": "tcp", - "TargetPort": 6379, - "PublishedPort": 30001 - } - ] - } - }, - "Endpoint": { - "Spec": { - "Mode": "vip", - "Ports": [ - { - "Protocol": "tcp", - "TargetPort": 6379, - "PublishedPort": 30001 - } - ] - }, - "Ports": [ - { - "Protocol": "tcp", - "TargetPort": 6379, - "PublishedPort": 30001 - } - ], - "VirtualIPs": [ - { - "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", - "Addr": "10.255.0.2/16" - }, - { - "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", - "Addr": "10.255.0.3/16" - } - ] - } - } - ] - -**Query parameters**: - -- **filters** – a JSON encoded value of the filters (a `map[string][]string`) to process on the - services list. Available filters: - - `id=` - - `name=` - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Create a service - -`POST /services/create` - -Create a service. When using this endpoint to create a service using a private -repository from the registry, the `X-Registry-Auth` header must be used to -include a base64-encoded AuthConfig object. Refer to the [create an -image](docker_remote_api_v1.25.md#create-an-image) section for more details. - -**Example request**: - - POST /services/create HTTP/1.1 - Content-Type: application/json - - { - "Name": "web", - "TaskTemplate": { - "ContainerSpec": { - "Image": "nginx:alpine", - "Mounts": [ - { - "ReadOnly": true, - "Source": "web-data", - "Target": "/usr/share/nginx/html", - "Type": "volume", - "VolumeOptions": { - "DriverConfig": { - }, - "Labels": { - "com.example.something": "something-value" - } - } - } - ], - "User": "33" - }, - "LogDriver": { - "Name": "json-file", - "Options": { - "max-file": "3", - "max-size": "10M" - } - }, - "Placement": {}, - "Resources": { - "Limits": { - "MemoryBytes": 104857600.0 - }, - "Reservations": { - } - }, - "RestartPolicy": { - "Condition": "on-failure", - "Delay": 10000000000.0, - "MaxAttempts": 10 - } - }, - "Mode": { - "Replicated": { - "Replicas": 4 - } - }, - "UpdateConfig": { - "Delay": 30000000000.0, - "Parallelism": 2, - "FailureAction": "pause" - }, - "EndpointSpec": { - "Ports": [ - { - "Protocol": "tcp", - "PublishedPort": 8080, - "TargetPort": 80 - } - ] - }, - "Labels": { - "foo": "bar" - } - } - -**Example response**: - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "ID":"ak7w3gjqoa3kuz8xcpnyy0pvl" - } - -**Status codes**: - -- **201** – no error -- **406** – server error or node is not part of a swarm -- **409** – name conflicts with an existing object - -**JSON Parameters**: - -- **Name** – User-defined name for the service. -- **Labels** – A map of labels to associate with the service (e.g., `{"key":"value"[,"key2":"value2"]}`). -- **TaskTemplate** – Specification of the tasks to start as part of the new service. - - **ContainerSpec** - Container settings for containers started as part of this task. - - **Image** – A string specifying the image name to use for the container. - - **Command** – The command to be run in the image. - - **Args** – Arguments to the command. - - **Env** – A list of environment variables in the form of `["VAR=value"[,"VAR2=value2"]]`. - - **Dir** – A string specifying the working directory for commands to run in. - - **User** – A string value specifying the user inside the container. - - **Labels** – A map of labels to associate with the service (e.g., - `{"key":"value"[,"key2":"value2"]}`). - - **Mounts** – Specification for mounts to be added to containers - created as part of the service. - - **Target** – Container path. - - **Source** – Mount source (e.g. a volume name, a host path). - - **Type** – The mount type (`bind`, or `volume`). - - **ReadOnly** – A boolean indicating whether the mount should be read-only. - - **BindOptions** - Optional configuration for the `bind` type. - - **Propagation** – A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`. - - **VolumeOptions** – Optional configuration for the `volume` type. - - **NoCopy** – A boolean indicating if volume should be - populated with the data from the target. (Default false) - - **Labels** – User-defined name and labels for the volume. - - **DriverConfig** – Map of driver-specific options. - - **Name** - Name of the driver to use to create the volume. - - **Options** - key/value map of driver specific options. - - **StopGracePeriod** – Amount of time to wait for the container to terminate before - forcefully killing it. - - **LogDriver** - Log configuration for containers created as part of the - service. - - **Name** - Name of the logging driver to use (`json-file`, `syslog`, - `journald`, `gelf`, `fluentd`, `awslogs`, `splunk`, `etwlogs`, `none`). - - **Options** - Driver-specific options. - - **Resources** – Resource requirements which apply to each individual container created as part - of the service. - - **Limits** – Define resources limits. - - **NanoCPUs** – CPU limit in units of 10-9 CPU shares. - - **MemoryBytes** – Memory limit in Bytes. - - **Reservation** – Define resources reservation. - - **NanoCPUs** – CPU reservation in units of 10-9 CPU shares. - - **MemoryBytes** – Memory reservation in Bytes. - - **RestartPolicy** – Specification for the restart policy which applies to containers created - as part of this service. - - **Condition** – Condition for restart (`none`, `on-failure`, or `any`). - - **Delay** – Delay between restart attempts. - - **Attempts** – Maximum attempts to restart a given container before giving up (default value - is 0, which is ignored). - - **Window** – Windows is the time window used to evaluate the restart policy (default value is - 0, which is unbounded). - - **Placement** – An array of constraints. -- **Mode** – Scheduling mode for the service (`replicated` or `global`, defaults to `replicated`). -- **UpdateConfig** – Specification for the update strategy of the service. - - **Parallelism** – Maximum number of tasks to be updated in one iteration (0 means unlimited - parallelism). - - **Delay** – Amount of time between updates. - - **FailureAction** - Action to take if an updated task fails to run, or stops running during the - update. Values are `continue` and `pause`. -- **Networks** – Array of network names or IDs to attach the service to. -- **EndpointSpec** – Properties that can be configured to access and load balance a service. - - **Mode** – The mode of resolution to use for internal load balancing - between tasks (`vip` or `dnsrr`). Defaults to `vip` if not provided. - - **Ports** – List of exposed ports that this service is accessible on from - the outside, in the form of: - `{"Protocol": <"tcp"|"udp">, "PublishedPort": , "TargetPort": }`. - Ports can only be provided if `vip` resolution mode is used. - -**Request Headers**: - -- **Content-type** – Set to `"application/json"`. -- **X-Registry-Auth** – base64-encoded AuthConfig object, containing either - login information, or a token. Refer to the [create an image](docker_remote_api_v1.25.md#create-an-image) - section for more details. - - -### Remove a service - - -`DELETE /services/(id or name)` - -Stop and remove the service `id` - -**Example request**: - - DELETE /services/16253994b7c4 HTTP/1.1 - -**Example response**: - - HTTP/1.1 200 No Content - -**Status codes**: - -- **200** – no error -- **404** – no such service -- **500** – server error - -### Inspect one or more services - - -`GET /services/(id or name)` - -Return information on the service `id`. - -**Example request**: - - GET /services/1cb4dnqcyx6m66g2t538x3rxha HTTP/1.1 - -**Example response**: - - { - "ID": "ak7w3gjqoa3kuz8xcpnyy0pvl", - "Version": { - "Index": 95 - }, - "CreatedAt": "2016-06-07T21:10:20.269723157Z", - "UpdatedAt": "2016-06-07T21:10:20.276301259Z", - "Spec": { - "Name": "redis", - "TaskTemplate": { - "ContainerSpec": { - "Image": "redis" - }, - "Resources": { - "Limits": {}, - "Reservations": {} - }, - "RestartPolicy": { - "Condition": "any", - "MaxAttempts": 0 - }, - "Placement": {} - }, - "Mode": { - "Replicated": { - "Replicas": 1 - } - }, - "UpdateConfig": { - "Parallelism": 1, - "FailureAction": "pause" - }, - "EndpointSpec": { - "Mode": "vip", - "Ports": [ - { - "Protocol": "tcp", - "TargetPort": 6379, - "PublishedPort": 30001 - } - ] - } - }, - "Endpoint": { - "Spec": { - "Mode": "vip", - "Ports": [ - { - "Protocol": "tcp", - "TargetPort": 6379, - "PublishedPort": 30001 - } - ] - }, - "Ports": [ - { - "Protocol": "tcp", - "TargetPort": 6379, - "PublishedPort": 30001 - } - ], - "VirtualIPs": [ - { - "NetworkID": "4qvuz4ko70xaltuqbt8956gd1", - "Addr": "10.255.0.4/16" - } - ] - } - } - -**Status codes**: - -- **200** – no error -- **404** – no such service -- **500** – server error - -### Update a service - -`POST /services/(id or name)/update` - -Update a service. When using this endpoint to create a service using a -private repository from the registry, the `X-Registry-Auth` header can be used -to update the authentication information for that is stored for the service. -The header contains a base64-encoded AuthConfig object. Refer to the [create an -image](docker_remote_api_v1.25.md#create-an-image) section for more details. - -**Example request**: - - POST /services/1cb4dnqcyx6m66g2t538x3rxha/update?version=23 HTTP/1.1 - Content-Type: application/json - - { - "Name": "top", - "TaskTemplate": { - "ContainerSpec": { - "Image": "busybox", - "Args": [ - "top" - ] - }, - "Resources": { - "Limits": {}, - "Reservations": {} - }, - "RestartPolicy": { - "Condition": "any", - "MaxAttempts": 0 - }, - "Placement": {} - }, - "Mode": { - "Replicated": { - "Replicas": 1 - } - }, - "UpdateConfig": { - "Parallelism": 1 - }, - "EndpointSpec": { - "Mode": "vip" - } - } - -**Example response**: - - HTTP/1.1 200 OK - Content-Length: 0 - Content-Type: text/plain; charset=utf-8 - -**JSON Parameters**: - -- **Name** – User-defined name for the service. -- **Labels** – A map of labels to associate with the service (e.g., `{"key":"value"[,"key2":"value2"]}`). -- **TaskTemplate** – Specification of the tasks to start as part of the new service. - - **ContainerSpec** - Container settings for containers started as part of this task. - - **Image** – A string specifying the image name to use for the container. - - **Command** – The command to be run in the image. - - **Args** – Arguments to the command. - - **Env** – A list of environment variables in the form of `["VAR=value"[,"VAR2=value2"]]`. - - **Dir** – A string specifying the working directory for commands to run in. - - **User** – A string value specifying the user inside the container. - - **Labels** – A map of labels to associate with the service (e.g., - `{"key":"value"[,"key2":"value2"]}`). - - **Mounts** – Specification for mounts to be added to containers created as part of the new - service. - - **Target** – Container path. - - **Source** – Mount source (e.g. a volume name, a host path). - - **Type** – The mount type (`bind`, or `volume`). - - **ReadOnly** – A boolean indicating whether the mount should be read-only. - - **BindOptions** - Optional configuration for the `bind` type - - **Propagation** – A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`. - - **VolumeOptions** – Optional configuration for the `volume` type. - - **NoCopy** – A boolean indicating if volume should be - populated with the data from the target. (Default false) - - **Labels** – User-defined name and labels for the volume. - - **DriverConfig** – Map of driver-specific options. - - **Name** - Name of the driver to use to create the volume - - **Options** - key/value map of driver specific options - - **StopGracePeriod** – Amount of time to wait for the container to terminate before - forcefully killing it. - - **Resources** – Resource requirements which apply to each individual container created as part - of the service. - - **Limits** – Define resources limits. - - **CPU** – CPU limit - - **Memory** – Memory limit - - **Reservation** – Define resources reservation. - - **CPU** – CPU reservation - - **Memory** – Memory reservation - - **RestartPolicy** – Specification for the restart policy which applies to containers created - as part of this service. - - **Condition** – Condition for restart (`none`, `on-failure`, or `any`). - - **Delay** – Delay between restart attempts. - - **MaxAttempts** – Maximum attempts to restart a given container before giving up (default value - is 0, which is ignored). - - **Window** – Windows is the time window used to evaluate the restart policy (default value is - 0, which is unbounded). - - **Placement** – An array of constraints. -- **Mode** – Scheduling mode for the service (`replicated` or `global`, defaults to `replicated`). -- **UpdateConfig** – Specification for the update strategy of the service. - - **Parallelism** – Maximum number of tasks to be updated in one iteration (0 means unlimited - parallelism). - - **Delay** – Amount of time between updates. -- **Networks** – Array of network names or IDs to attach the service to. -- **EndpointSpec** – Properties that can be configured to access and load balance a service. - - **Mode** – The mode of resolution to use for internal load balancing - between tasks (`vip` or `dnsrr`). Defaults to `vip` if not provided. - - **Ports** – List of exposed ports that this service is accessible on from - the outside, in the form of: - `{"Protocol": <"tcp"|"udp">, "PublishedPort": , "TargetPort": }`. - Ports can only be provided if `vip` resolution mode is used. - -**Query parameters**: - -- **version** – The version number of the service object being updated. This is - required to avoid conflicting writes. - -**Request Headers**: - -- **Content-type** – Set to `"application/json"`. -- **X-Registry-Auth** – base64-encoded AuthConfig object, containing either - login information, or a token. Refer to the [create an image](docker_remote_api_v1.25.md#create-an-image) - section for more details. - -**Status codes**: - -- **200** – no error -- **404** – no such service -- **500** – server error - -## 3.10 Tasks - -**Note**: Task operations require the engine to be part of a swarm. - -### List tasks - - -`GET /tasks` - -List tasks - -**Example request**: - - GET /tasks HTTP/1.1 - -**Example response**: - - [ - { - "ID": "0kzzo1i0y4jz6027t0k7aezc7", - "Version": { - "Index": 71 - }, - "CreatedAt": "2016-06-07T21:07:31.171892745Z", - "UpdatedAt": "2016-06-07T21:07:31.376370513Z", - "Spec": { - "ContainerSpec": { - "Image": "redis" - }, - "Resources": { - "Limits": {}, - "Reservations": {} - }, - "RestartPolicy": { - "Condition": "any", - "MaxAttempts": 0 - }, - "Placement": {} - }, - "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", - "Slot": 1, - "NodeID": "60gvrl6tm78dmak4yl7srz94v", - "Status": { - "Timestamp": "2016-06-07T21:07:31.290032978Z", - "State": "running", - "Message": "started", - "ContainerStatus": { - "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", - "PID": 677 - } - }, - "DesiredState": "running", - "NetworksAttachments": [ - { - "Network": { - "ID": "4qvuz4ko70xaltuqbt8956gd1", - "Version": { - "Index": 18 - }, - "CreatedAt": "2016-06-07T20:31:11.912919752Z", - "UpdatedAt": "2016-06-07T21:07:29.955277358Z", - "Spec": { - "Name": "ingress", - "Labels": { - "com.docker.swarm.internal": "true" - }, - "DriverConfiguration": {}, - "IPAMOptions": { - "Driver": {}, - "Configs": [ - { - "Subnet": "10.255.0.0/16", - "Gateway": "10.255.0.1" - } - ] - } - }, - "DriverState": { - "Name": "overlay", - "Options": { - "com.docker.network.driver.overlay.vxlanid_list": "256" - } - }, - "IPAMOptions": { - "Driver": { - "Name": "default" - }, - "Configs": [ - { - "Subnet": "10.255.0.0/16", - "Gateway": "10.255.0.1" - } - ] - } - }, - "Addresses": [ - "10.255.0.10/16" - ] - } - ], - }, - { - "ID": "1yljwbmlr8er2waf8orvqpwms", - "Version": { - "Index": 30 - }, - "CreatedAt": "2016-06-07T21:07:30.019104782Z", - "UpdatedAt": "2016-06-07T21:07:30.231958098Z", - "Name": "hopeful_cori", - "Spec": { - "ContainerSpec": { - "Image": "redis" - }, - "Resources": { - "Limits": {}, - "Reservations": {} - }, - "RestartPolicy": { - "Condition": "any", - "MaxAttempts": 0 - }, - "Placement": {} - }, - "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", - "Slot": 1, - "NodeID": "60gvrl6tm78dmak4yl7srz94v", - "Status": { - "Timestamp": "2016-06-07T21:07:30.202183143Z", - "State": "shutdown", - "Message": "shutdown", - "ContainerStatus": { - "ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" - } - }, - "DesiredState": "shutdown", - "NetworksAttachments": [ - { - "Network": { - "ID": "4qvuz4ko70xaltuqbt8956gd1", - "Version": { - "Index": 18 - }, - "CreatedAt": "2016-06-07T20:31:11.912919752Z", - "UpdatedAt": "2016-06-07T21:07:29.955277358Z", - "Spec": { - "Name": "ingress", - "Labels": { - "com.docker.swarm.internal": "true" - }, - "DriverConfiguration": {}, - "IPAMOptions": { - "Driver": {}, - "Configs": [ - { - "Subnet": "10.255.0.0/16", - "Gateway": "10.255.0.1" - } - ] - } - }, - "DriverState": { - "Name": "overlay", - "Options": { - "com.docker.network.driver.overlay.vxlanid_list": "256" - } - }, - "IPAMOptions": { - "Driver": { - "Name": "default" - }, - "Configs": [ - { - "Subnet": "10.255.0.0/16", - "Gateway": "10.255.0.1" - } - ] - } - }, - "Addresses": [ - "10.255.0.5/16" - ] - } - ] - } - ] - -**Query parameters**: - -- **filters** – a JSON encoded value of the filters (a `map[string][]string`) to process on the - services list. Available filters: - - `id=` - - `name=` - - `service=` - - `node=` - - `label=key` or `label="key=value"` - - `desired-state=(running | shutdown | accepted)` - -**Status codes**: - -- **200** – no error -- **500** – server error - -### Inspect a task - - -`GET /tasks/(task id)` - -Get details on a task - -**Example request**: - - GET /tasks/0kzzo1i0y4jz6027t0k7aezc7 HTTP/1.1 - -**Example response**: - - { - "ID": "0kzzo1i0y4jz6027t0k7aezc7", - "Version": { - "Index": 71 - }, - "CreatedAt": "2016-06-07T21:07:31.171892745Z", - "UpdatedAt": "2016-06-07T21:07:31.376370513Z", - "Spec": { - "ContainerSpec": { - "Image": "redis" - }, - "Resources": { - "Limits": {}, - "Reservations": {} - }, - "RestartPolicy": { - "Condition": "any", - "MaxAttempts": 0 - }, - "Placement": {} - }, - "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", - "Slot": 1, - "NodeID": "60gvrl6tm78dmak4yl7srz94v", - "Status": { - "Timestamp": "2016-06-07T21:07:31.290032978Z", - "State": "running", - "Message": "started", - "ContainerStatus": { - "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", - "PID": 677 - } - }, - "DesiredState": "running", - "NetworksAttachments": [ - { - "Network": { - "ID": "4qvuz4ko70xaltuqbt8956gd1", - "Version": { - "Index": 18 - }, - "CreatedAt": "2016-06-07T20:31:11.912919752Z", - "UpdatedAt": "2016-06-07T21:07:29.955277358Z", - "Spec": { - "Name": "ingress", - "Labels": { - "com.docker.swarm.internal": "true" - }, - "DriverConfiguration": {}, - "IPAMOptions": { - "Driver": {}, - "Configs": [ - { - "Subnet": "10.255.0.0/16", - "Gateway": "10.255.0.1" - } - ] - } - }, - "DriverState": { - "Name": "overlay", - "Options": { - "com.docker.network.driver.overlay.vxlanid_list": "256" - } - }, - "IPAMOptions": { - "Driver": { - "Name": "default" - }, - "Configs": [ - { - "Subnet": "10.255.0.0/16", - "Gateway": "10.255.0.1" - } - ] - } - }, - "Addresses": [ - "10.255.0.10/16" - ] - } - ] - } - -**Status codes**: - -- **200** – no error -- **404** – unknown task -- **500** – server error - -# 4. Going further - -## 4.1 Inside `docker run` - -As an example, the `docker run` command line makes the following API calls: - -- Create the container - -- If the status code is 404, it means the image doesn't exist: - - Try to pull it. - - Then, retry to create the container. - -- Start the container. - -- If you are not in detached mode: -- Attach to the container, using `logs=1` (to have `stdout` and - `stderr` from the container's start) and `stream=1` - -- If in detached mode or only `stdin` is attached, display the container's id. - -## 4.2 Hijacking - -In this version of the API, `/attach`, uses hijacking to transport `stdin`, -`stdout`, and `stderr` on the same socket. - -To hint potential proxies about connection hijacking, Docker client sends -connection upgrade headers similarly to websocket. - - Upgrade: tcp - Connection: Upgrade - -When Docker daemon detects the `Upgrade` header, it switches its status code -from **200 OK** to **101 UPGRADED** and resends the same headers. - - -## 4.3 CORS Requests - -To set cross origin requests to the remote api please give values to -`--api-cors-header` when running Docker in daemon mode. Set * (asterisk) allows all, -default or blank means CORS disabled - - $ dockerd -H="192.168.1.9:2375" --api-cors-header="http://foo.bar" diff --git a/engine/reference/api/hub_registry_spec.md b/engine/reference/api/hub_registry_spec.md deleted file mode 100644 index 31c3596818..0000000000 --- a/engine/reference/api/hub_registry_spec.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -redirect_from: - - /reference/api/hub_registry_spec/ -description: Documentation for docker Registry and Registry API -published: false -keywords: -- docker, registry, api, hub -title: Docker Hub and Registry v1 ---- - -This API is deprecated as of 1.7. To view the old version, see the [go -here](/v1.7/docker/reference/api/hub_registry_spec/) in -the 1.7 documentation. If you want an overview of the current features in -Docker Hub or other image management features see the [image management -overview](../../userguide/eng-image/image_management.md) in the current documentation set. diff --git a/engine/reference/api/images/event_state.gliffy b/engine/reference/api/images/event_state.gliffy deleted file mode 100644 index fcf080da5f..0000000000 --- a/engine/reference/api/images/event_state.gliffy +++ /dev/null @@ -1 +0,0 @@ -{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":1193,"height":556,"nodeIndex":370,"autoFit":true,"exportBorder":false,"gridOn":true,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"maxWidth":5000,"maxHeight":5000,"themeData":null,"viewportType":"default","fitBB":{"min":{"x":26.46762966848334,"y":100},"max":{"x":1192.861928406027,"y":555.2340187157677}},"printModel":{"pageSize":"Letter","portrait":true,"fitToOnePage":false,"displayPageBreaks":false},"objects":[{"x":373.99998474121094,"y":389.93402099609375,"rotation":0.0,"id":355,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":0,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":191,"py":0.7071067811865475,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":-0.663724900050094,"endArrowRotation":-0.6637248993502937,"interpolationType":"quadratic","cornerRadius":null,"controlPath":[[22.0,-17.0],[94.00000762939453,-17.0],[94.00000762939453,-61.64974974863185],[166.00001525878906,-61.64974974863185]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":359,"width":75.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.5,"linePerpValue":0.0,"cardinalityType":null,"html":"

docker start

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":275.99998474121094,"y":323.93402099609375,"rotation":0.0,"id":344,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":127,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":335,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":193,"py":0.0,"px":0.7071067811865476}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":105.08369488824782,"endArrowRotation":91.96866662391399,"interpolationType":"quadratic","cornerRadius":null,"controlPath":[[22.531977827253513,30.06597900390625],[22.531977827253513,51.06597900390625],[-52.96697615221987,51.06597900390625],[-52.96697615221987,106.06597900390625]],"lockSegments":{"1":true},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":347,"width":64.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

docker rm

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":279.99998474121094,"y":249.93402099609375,"rotation":0.0,"id":342,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":126,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":188,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":191,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[-74.99998474121094,0.06597900390625],[297.50001525878906,0.06597900390625],[297.50001525878906,50.06597900390625]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":313.99998474121094,"y":290.93402099609375,"rotation":0.0,"id":341,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":123,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":335,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":191,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[19.531977827253513,28.06597900390625],[88.35546419381131,28.06597900390625],[157.17895056036912,28.06597900390625],[226.00243692692698,28.06597900390625]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":353,"width":75.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

docker start

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":214.99998474121094,"y":322.93402099609375,"rotation":0.0,"id":340,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":122,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":228,"py":0.5733505249023437,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":335,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[-7.637919363960094,-3.93402099609375],[11.085379699777775,-3.93402099609375],[29.808678763515644,-3.93402099609375],[48.53197782725351,-3.93402099609375]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":83.0,"y":251.0,"rotation":0.0,"id":328,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":116,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":188,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-52.03237033151666,-0.9999999999999716],[47.0,-1.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":332,"width":67.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.5233416311379174,"linePerpValue":null,"cardinalityType":null,"html":"

docker run

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":74.0,"y":318.0,"rotation":0.0,"id":327,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":113,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":228,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-42.0,1.0],[58.5,2.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":333,"width":85.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.5689443767164591,"linePerpValue":null,"cardinalityType":null,"html":"

docker create

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":191.0,"y":409.0,"rotation":0.0,"id":325,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":112,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":193,"py":0.5,"px":0.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":215,"py":0.5,"px":1.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-21.0,41.0],[-61.0,41.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":331.0,"y":346.0,"rotation":0.0,"id":320,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":109,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":209,"py":0.5,"px":0.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":193,"py":0.5,"px":1.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[2.5319625684644507,49.0],[-41.734018715767775,49.0],[-41.734018715767775,104.0],[-86.0,104.0]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":324,"width":64.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

docker rm

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":872.0,"y":503.0,"rotation":0.0,"id":310,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":108,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":205,"py":0.0,"px":0.2928932188134524}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-60.03300858899104,-53.0],[-148.0,-151.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":735.0,"y":341.0,"rotation":0.0,"id":307,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":105,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":203,"py":0.2928932188134525,"px":1.1102230246251563E-16}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[0.0,0.0],[137.5,60.7157287525381]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":309,"width":83.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.37922003257116654,"linePerpValue":null,"cardinalityType":null,"html":"

docker pause

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":1023.0,"y":446.0,"rotation":0.0,"id":298,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":102,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":213,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":205,"py":0.5,"px":1.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[39.5,-1.0],[39.5,24.0],[-158.0,24.0]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":313,"width":100.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.37286693198126664,"linePerpValue":null,"cardinalityType":null,"html":"

 docker unpause

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":904.0,"y":434.0,"rotation":0.0,"id":295,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":101,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":203,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":213,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[43.5,-24.0],[123.5,-24.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":411.0,"y":419.0,"rotation":0.0,"id":291,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":98,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":217,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[7.2659812842321685,51.0],[-14.0,51.0],[-14.0,-3.0]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":292,"width":21.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.5714437496124175,"linePerpValue":0.0,"cardinalityType":null,"html":"

No

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":415.0,"y":419.0,"rotation":0.0,"id":289,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":95,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":217,"py":0.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":191,"py":1.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[53.26598128423217,1.0],[53.26598128423217,-32.5],[162.5,-32.5],[162.5,-79.0]],"lockSegments":{"1":true},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":290,"width":26.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.46753493572435184,"linePerpValue":null,"cardinalityType":null,"html":"

Yes

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":521.0,"y":209.0,"rotation":0.0,"id":287,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":94,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":195,"py":0.5,"px":0.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":209,"py":0.5,"px":1.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[-11.0,-19.0],[-97.23401871576777,-19.0],[-97.23401871576777,186.0],[-117.46803743153555,186.0]],"lockSegments":{"1":true},"ortho":true}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":988.0,"y":232.0,"rotation":0.0,"id":282,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":93,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":201,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[39.5,18.0],[-150.0,18.0],[-150.0,68.0],[-250.0,68.0]],"lockSegments":{"1":true},"ortho":true}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":664.0,"y":493.0,"rotation":0.0,"id":276,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":92,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":207,"py":0.5,"px":0.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":236,"py":0.7071067811865475,"px":0.9999999999999998}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[8.5,42.23401871576766],[-20.25,42.23401871576766],[-20.25,-44.7157287525381],[-49.0,-44.7157287525381]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":678.0,"y":344.0,"rotation":0.0,"id":273,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":89,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":236,"py":0.29289321881345237,"px":1.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":91.17113025781374,"endArrowRotation":176.63803454243802,"interpolationType":"quadratic","cornerRadius":null,"controlPath":[[2.0,-4.0],[2.0,87.7157287525381],[-63.0,87.7157287525381]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":275,"width":59.0,"height":42.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.5,"linePerpValue":0.0,"cardinalityType":null,"html":"

container 

process

exited

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":566.0,"y":431.0,"rotation":0.0,"id":272,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":88,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":236,"py":0.5,"px":0.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":217,"py":0.5,"px":1.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[-26.0,9.0],[-36.867009357883944,9.0],[-36.867009357883944,39.0],[-47.73401871576789,39.0]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":785.0,"y":119.0,"rotation":0.0,"id":270,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":87,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":199,"py":0.5,"px":0.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":209,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[5.0,1.0],[-416.46803743153555,1.0],[-416.46803743153555,241.0]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":829.0,"y":172.0,"rotation":0.0,"id":269,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":86,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":248,"py":0.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":199,"py":1.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-1.5,-2.0],[-1.5,-32.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":661.0,"y":189.0,"rotation":0.0,"id":267,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":85,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":195,"py":0.5,"px":1.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[7.0,2.284271247461902],[-76.0,1.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":946.0,"y":319.0,"rotation":0.0,"id":263,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":83,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":197,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":233,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[1.5,1.0],[81.5,1.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":708.0,"y":286.0,"rotation":0.0,"id":256,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":80,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":211,"py":0.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":254,"py":1.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-0.5,-2.0],[-0.5,-76.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":258,"width":64.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.3108108108108108,"linePerpValue":null,"cardinalityType":null,"html":"

docker kill

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":710.0,"y":359.0,"rotation":0.0,"id":245,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":68,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":211,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":207,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-2.5,-5.0],[0.0,156.23401871576766]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":247,"width":84.0,"height":28.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

 killed by

out-of-memory

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":761.0,"y":318.0,"rotation":0.0,"id":238,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":65,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":211,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":197,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-18.5,1.0],[111.5,2.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":240,"width":87.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.4363456059259962,"linePerpValue":null,"cardinalityType":null,"html":"

docker restart

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":608.0,"y":319.0,"rotation":0.0,"id":232,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":58,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":191,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":211,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[7.0,1.0],[64.5,0.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":333.53196256846445,"y":360.0,"rotation":0.0,"id":209,"width":70.0,"height":70.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.connector","order":33,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#e6b8af","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5555555555555554,"y":0.0,"rotation":0.0,"id":210,"width":66.88888888888889,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

stopped

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":540.0,"y":300.0,"rotation":0.0,"id":191,"width":75.0,"height":40.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":6,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5,"y":0.0,"rotation":0.0,"id":192,"width":72.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

start

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":510.0,"y":170.0,"rotation":0.0,"id":195,"width":75.0,"height":40.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":12,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5,"y":0.0,"rotation":0.0,"id":196,"width":72.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

kill

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":872.5,"y":300.0,"rotation":0.0,"id":197,"width":75.0,"height":40.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":15,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5,"y":0.0,"rotation":0.0,"id":198,"width":72.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

die

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":790.0,"y":100.0,"rotation":0.0,"id":199,"width":75.0,"height":40.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":18,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5,"y":0.0,"rotation":0.0,"id":200,"width":72.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

stop

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":790.0,"y":450.0,"rotation":0.0,"id":205,"width":75.0,"height":40.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":27,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5,"y":0.0,"rotation":0.0,"id":206,"width":72.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

unpause

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":672.5,"y":515.2340187157677,"rotation":0.0,"id":207,"width":75.0,"height":40.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":30,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5,"y":0.0,"rotation":0.0,"id":208,"width":72.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

OOM

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":672.5,"y":284.0,"rotation":0.0,"id":211,"width":70.0,"height":70.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.connector","order":36,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#b6d7a8","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5555555555555556,"y":0.0,"rotation":0.0,"id":212,"width":66.88888888888889,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

running

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":403.5319625684644,"y":420.0,"rotation":0.0,"id":227,"width":130.46803743153555,"height":116.23401871576777,"uid":"com.gliffy.shape.basic.basic_v1.default.group","order":54,"lockAspectRatio":false,"lockShape":false,"children":[{"x":-6.765981284232225,"y":76.0,"rotation":45.0,"id":223,"width":80.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":53,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

Restart 

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":57.234018715767775,"y":75.0,"rotation":315.0,"id":219,"width":80.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":51,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

Policy

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":14.734018715767775,"y":0.0,"rotation":0.0,"id":217,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.decision","order":46,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.diamond.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":218,"width":96.0,"height":28.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

Should restart?

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":1027.5,"y":375.0,"rotation":0.0,"id":213,"width":70.0,"height":70.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.connector","order":39,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#fce5cd","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5555555555555556,"y":0.0,"rotation":0.0,"id":214,"width":66.88888888888889,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

paused

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":872.5,"y":390.0,"rotation":0.0,"id":203,"width":75.0,"height":40.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":24,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5,"y":0.0,"rotation":0.0,"id":204,"width":72.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

pause

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":540.0,"y":420.0,"rotation":0.0,"id":236,"width":75.0,"height":40.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":62,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5,"y":0.0,"rotation":0.0,"id":237,"width":72.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

die

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":790.0,"y":170.0,"rotation":0.0,"id":248,"width":75.0,"height":40.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":71,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5,"y":0.0,"rotation":0.0,"id":249,"width":72.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

die

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":670.0,"y":170.0,"rotation":0.0,"id":254,"width":75.0,"height":40.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":77,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5,"y":0.0,"rotation":0.0,"id":255,"width":72.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

die

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":740.0,"y":323.0,"rotation":0.0,"id":250,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":74,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":248,"py":1.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-10.0,-33.0],[87.5,-113.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":253,"width":73.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

docker stop

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":1027.5,"y":300.0,"rotation":0.0,"id":233,"width":75.0,"height":40.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":59,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5,"y":0.0,"rotation":0.0,"id":234,"width":72.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

start

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":1027.5,"y":230.0,"rotation":0.0,"id":201,"width":75.0,"height":40.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":21,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5,"y":0.0,"rotation":0.0,"id":202,"width":72.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

restart

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":1066.5,"y":298.0,"rotation":0.0,"id":264,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":84,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":233,"py":0.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":201,"py":1.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-1.5,2.0],[-1.5,-28.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":132.5,"y":300.0,"rotation":0.0,"id":228,"width":75.0,"height":40.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":55,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5,"y":0.0,"rotation":0.0,"id":229,"width":72.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

create

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":130.0,"y":230.0,"rotation":0.0,"id":188,"width":75.0,"height":40.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":3,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5,"y":0.0,"rotation":0.0,"id":190,"width":72.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

create

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":263.53196256846445,"y":284.0,"rotation":0.0,"id":335,"width":70.0,"height":70.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.connector","order":119,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#a4c2f4","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5555555555555554,"y":0.0,"rotation":0.0,"id":336,"width":66.88888888888889,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

created

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":60.0,"y":415.0,"rotation":0.0,"id":215,"width":70.0,"height":70.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.connector","order":42,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#b7b7b7","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5555555555555556,"y":0.0,"rotation":0.0,"id":216,"width":66.88888888888889,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

deleted

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":170.0,"y":430.0,"rotation":0.0,"id":193,"width":75.0,"height":40.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":9,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.5,"y":0.0,"rotation":0.0,"id":194,"width":72.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

destroy

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":1133.0,"y":570.0,"rotation":0.0,"id":362,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":130,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":213,"py":0.5,"px":1.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":0.9595103354441726,"endArrowRotation":177.33110321368451,"interpolationType":"quadratic","cornerRadius":null,"controlPath":[[-55.0,-192.0],[-3.5,-192.0],[-3.5,-160.0],[-35.5,-160.0]],"lockSegments":{"1":true},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":363,"width":87.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.5835366104291947,"linePerpValue":-20.0,"cardinalityType":null,"html":"

docker update

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":281.0,"y":596.0,"rotation":0.0,"id":364,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":133,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":335,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":-88.08561222234982,"endArrowRotation":85.23919045962671,"interpolationType":"quadratic","cornerRadius":null,"controlPath":[[-7.0,-301.0],[-7.0,-334.0],[17.53196256846445,-334.0],[17.53196256846445,-312.0]],"lockSegments":{"1":true},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":365,"width":87.0,"height":14.0,"uid":null,"order":135,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.524371533874117,"linePerpValue":0.0,"cardinalityType":null,"html":"

docker update

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":305.0,"y":604.0,"rotation":0.0,"id":366,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":136,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":209,"py":1.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":92.55340974719384,"endArrowRotation":-91.2277874986563,"interpolationType":"quadratic","cornerRadius":null,"controlPath":[[63.53196256846445,-174.0],[63.53196256846445,-144.0],[37.0,-144.0],[37.0,-186.0]],"lockSegments":{"1":true},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":367,"width":87.0,"height":14.0,"uid":null,"order":138,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.5749848592663713,"linePerpValue":-20.0,"cardinalityType":null,"html":"

docker update

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"},{"x":516.0,"y":570.0,"rotation":0.0,"id":368,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":139,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":183.34296440226473,"endArrowRotation":-0.7310374013608921,"interpolationType":"quadratic","cornerRadius":null,"controlPath":[[158.0,-263.0],[134.0,-263.0],[134.0,-284.0],[182.0,-284.0]],"lockSegments":{"1":true},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":369,"width":87.0,"height":14.0,"uid":null,"order":141,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.4230219192816351,"linePerpValue":-20.0,"cardinalityType":null,"html":"

docker update

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"gmMmie3VnJbh"}],"hidden":false,"layerId":"gmMmie3VnJbh"}],"layers":[{"guid":"gmMmie3VnJbh","order":0,"name":"Layer 0","active":true,"locked":false,"visible":true,"nodeIndex":142}],"shapeStyles":{"com.gliffy.shape.uml.uml_v2.state_machine":{"fill":"#e2e2e2","stroke":"#000000","strokeWidth":2},"com.gliffy.shape.flowchart.flowchart_v1.default":{"fill":"#a4c2f4","stroke":"#333333","strokeWidth":2}},"lineStyles":{"global":{"endArrow":1,"orthoMode":2}},"textStyles":{"global":{"color":"#000000"}}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.flowchart.flowchart_v1.default"],"autosaveDisabled":false,"lastSerialized":1451304727693,"analyticsProduct":"Online"},"embeddedResources":{"index":0,"resources":[]}} \ No newline at end of file diff --git a/engine/reference/api/images/event_state.png b/engine/reference/api/images/event_state.png deleted file mode 100644 index 28d09ba192d05bf5b55dbf4c85a879842a7f4c46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78354 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 diff --git a/engine/reference/api/index.md b/engine/reference/api/index.md deleted file mode 100644 index cd81c6b3fc..0000000000 --- a/engine/reference/api/index.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -redirect_from: - - /reference/api/ -description: Reference -keywords: -- Engine -title: API reference ---- - -* [Docker Remote API](docker_remote_api.md) -* [Docker Remote API client libraries](remote_api_client_libraries.md) diff --git a/engine/reference/api/remote_api_client_libraries.md b/engine/reference/api/remote_api_client_libraries.md deleted file mode 100644 index fd3a362afb..0000000000 --- a/engine/reference/api/remote_api_client_libraries.md +++ /dev/null @@ -1,130 +0,0 @@ ---- -redirect_from: - - /reference/api/remote_api_client_libraries/ -description: Various client libraries available to use with the Docker remote API -keywords: -- API, Docker, index, registry, REST, documentation, clients, C#, Erlang, Go, Groovy, Java, JavaScript, Perl, PHP, Python, Ruby, Rust, Scala -title: Docker Remote API client libraries ---- - -These libraries make it easier to build applications on top of the Docker -Remote API with various programming languages. They have not been tested by the -Docker maintainers for compatibility, so if you run into any issues, file them -with the library maintainers. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Language/FrameworkNameRepository
C#Docker.DotNethttps://github.com/ahmetalpbalkan/Docker.DotNet
C++lasote/docker_clienthttps://github.com/lasote/docker_client
Erlangerldockerhttps://github.com/proger/erldocker
Dartbwu_dockerhttps://github.com/bwu-dart/bwu_docker
GoDocker Go clienthttps://godoc.org/github.com/docker/docker/client
Gradlegradle-docker-pluginhttps://github.com/gesellix/gradle-docker-plugin
Groovydocker-clienthttps://github.com/gesellix/docker-client
Haskelldocker-hshttps://github.com/denibertovic/docker-hs
HTML (Web Components)docker-elementshttps://github.com/kapalhq/docker-elements
Javadocker-javahttps://github.com/docker-java/docker-java
Javadocker-clienthttps://github.com/spotify/docker-client
NodeJSdockerodehttps://github.com/apocas/dockerode
PerlEixo::Dockerhttps://github.com/alambike/eixo-docker
PHPDocker-PHPhttps://github.com/docker-php/docker-php
Pythondocker-pyhttps://github.com/docker/docker-py
Rubydocker-apihttps://github.com/swipely/docker-api
Rustdocker-rusthttps://github.com/abh1nav/docker-rust
Rustshiplifthttps://github.com/softprops/shiplift
Scalatugboathttps://github.com/softprops/tugboat
Scalareactive-dockerhttps://github.com/almoehi/reactive-docker
diff --git a/engine/reference/builder.md b/engine/reference/builder.md deleted file mode 100644 index 75cacb1913..0000000000 --- a/engine/reference/builder.md +++ /dev/null @@ -1,1719 +0,0 @@ ---- -redirect_from: - - /reference/builder/ -description: Dockerfiles use a simple DSL which allows you to automate the steps you would normally manually take to create an image. -keywords: -- builder, docker, Dockerfile, automation, image creation -title: Dockerfile reference ---- - -Docker can build images automatically by reading the instructions from a -`Dockerfile`. A `Dockerfile` is a text document that contains all the commands a -user could call on the command line to assemble an image. Using `docker build` -users can create an automated build that executes several command-line -instructions in succession. - -This page describes the commands you can use in a `Dockerfile`. When you are -done reading this page, refer to the [`Dockerfile` Best -Practices](../userguide/eng-image/dockerfile_best-practices.md) for a tip-oriented guide. - -## Usage - -The [`docker build`](commandline/build.md) command builds an image from -a `Dockerfile` and a *context*. The build's context is the files at a specified -location `PATH` or `URL`. The `PATH` is a directory on your local filesystem. -The `URL` is a the location of a Git repository. - -A context is processed recursively. So, a `PATH` includes any subdirectories and -the `URL` includes the repository and its submodules. A simple build command -that uses the current directory as context: - - $ docker build . - Sending build context to Docker daemon 6.51 MB - ... - -The build is run by the Docker daemon, not by the CLI. The first thing a build -process does is send the entire context (recursively) to the daemon. In most -cases, it's best to start with an empty directory as context and keep your -Dockerfile in that directory. Add only the files needed for building the -Dockerfile. - ->**Warning**: Do not use your root directory, `/`, as the `PATH` as it causes ->the build to transfer the entire contents of your hard drive to the Docker ->daemon. - -To use a file in the build context, the `Dockerfile` refers to the file specified -in an instruction, for example, a `COPY` instruction. To increase the build's -performance, exclude files and directories by adding a `.dockerignore` file to -the context directory. For information about how to [create a `.dockerignore` -file](builder.md#dockerignore-file) see the documentation on this page. - -Traditionally, the `Dockerfile` is called `Dockerfile` and located in the root -of the context. You use the `-f` flag with `docker build` to point to a Dockerfile -anywhere in your file system. - - $ docker build -f /path/to/a/Dockerfile . - -You can specify a repository and tag at which to save the new image if -the build succeeds: - - $ docker build -t shykes/myapp . - -To tag the image into multiple repositories after the build, -add multiple `-t` parameters when you run the `build` command: - - $ docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest . - -The Docker daemon runs the instructions in the `Dockerfile` one-by-one, -committing the result of each instruction -to a new image if necessary, before finally outputting the ID of your -new image. The Docker daemon will automatically clean up the context you -sent. - -Note that each instruction is run independently, and causes a new image -to be created - so `RUN cd /tmp` will not have any effect on the next -instructions. - -Whenever possible, Docker will re-use the intermediate images (cache), -to accelerate the `docker build` process significantly. This is indicated by -the `Using cache` message in the console output. -(For more information, see the [Build cache section](../userguide/eng-image/dockerfile_best-practices.md#build-cache)) in the -`Dockerfile` best practices guide: - - $ docker build -t svendowideit/ambassador . - Sending build context to Docker daemon 15.36 kB - Step 1 : FROM alpine:3.2 - ---> 31f630c65071 - Step 2 : MAINTAINER SvenDowideit@home.org.au - ---> Using cache - ---> 2a1c91448f5f - Step 3 : RUN apk update && apk add socat && rm -r /var/cache/ - ---> Using cache - ---> 21ed6e7fbb73 - Step 4 : CMD env | grep _TCP= | (sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat -t 100000000 TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/' && echo wait) | sh - ---> Using cache - ---> 7ea8aef582cc - Successfully built 7ea8aef582cc - -When you're done with your build, you're ready to look into [*Pushing a -repository to its registry*](../tutorials/dockerrepos.md#contributing-to-docker-hub). - -## Format - -Here is the format of the `Dockerfile`: - -```Dockerfile -# Comment -INSTRUCTION arguments -``` - -The instruction is not case-sensitive. However, convention is for them to -be UPPERCASE to distinguish them from arguments more easily. - - -Docker runs instructions in a `Dockerfile` in order. **The first -instruction must be \`FROM\`** in order to specify the [*Base -Image*](glossary.md#base-image) from which you are building. - -Docker treats lines that *begin* with `#` as a comment, unless the line is -a valid [parser directive](builder.md#parser-directives). A `#` marker anywhere -else in a line is treated as an argument. This allows statements like: - -```Dockerfile -# Comment -RUN echo 'we are running some # of cool things' -``` - -Line continuation characters are not supported in comments. - -## Parser directives - -Parser directives are optional, and affect the way in which subsequent lines -in a `Dockerfile` are handled. Parser directives do not add layers to the build, -and will not be shown as a build step. Parser directives are written as a -special type of comment in the form `# directive=value`. A single directive -may only be used once. - -Once a comment, empty line or builder instruction has been processed, Docker -no longer looks for parser directives. Instead it treats anything formatted -as a parser directive as a comment and does not attempt to validate if it might -be a parser directive. Therefore, all parser directives must be at the very -top of a `Dockerfile`. - -Parser directives are not case-sensitive. However, convention is for them to -be lowercase. Convention is also to include a blank line following any -parser directives. Line continuation characters are not supported in parser -directives. - -Due to these rules, the following examples are all invalid: - -Invalid due to line continuation: - -```Dockerfile -# direc \ -tive=value -``` - -Invalid due to appearing twice: - -```Dockerfile -# directive=value1 -# directive=value2 - -FROM ImageName -``` - -Treated as a comment due to appearing after a builder instruction: - -```Dockerfile -FROM ImageName -# directive=value -``` - -Treated as a comment due to appearing after a comment which is not a parser -directive: - -```Dockerfile -# About my dockerfile -FROM ImageName -# directive=value -``` - -The unknown directive is treated as a comment due to not being recognized. In -addition, the known directive is treated as a comment due to appearing after -a comment which is not a parser directive. - -```Dockerfile -# unknowndirective=value -# knowndirective=value -``` - -Non line-breaking whitespace is permitted in a parser directive. Hence, the -following lines are all treated identically: - -```Dockerfile -#directive=value -# directive =value -# directive= value -# directive = value -# dIrEcTiVe=value -``` - -The following parser directive is supported: - -* `escape` - -## escape - - # escape=\ (backslash) - -Or - - # escape=` (backtick) - -The `escape` directive sets the character used to escape characters in a -`Dockerfile`. If not specified, the default escape character is `\`. - -The escape character is used both to escape characters in a line, and to -escape a newline. This allows a `Dockerfile` instruction to -span multiple lines. Note that regardless of whether the `escape` parser -directive is included in a `Dockerfile`, *escaping is not performed in -a `RUN` command, except at the end of a line.* - -Setting the escape character to `` ` `` is especially useful on -`Windows`, where `\` is the directory path separator. `` ` `` is consistent -with [Windows PowerShell](https://technet.microsoft.com/en-us/library/hh847755.aspx). - -Consider the following example which would fail in a non-obvious way on -`Windows`. The second `\` at the end of the second line would be interpreted as an -escape for the newline, instead of a target of the escape from the first `\`. -Similarly, the `\` at the end of the third line would, assuming it was actually -handled as an instruction, cause it be treated as a line continuation. The result -of this dockerfile is that second and third lines are considered a single -instruction: - -```Dockerfile -FROM windowsservercore -COPY testfile.txt c:\\ -RUN dir c:\ -``` - -Results in: - - PS C:\John> docker build -t cmd . - Sending build context to Docker daemon 3.072 kB - Step 1 : FROM windowsservercore - ---> dbfee88ee9fd - Step 2 : COPY testfile.txt c:RUN dir c: - GetFileAttributesEx c:RUN: The system cannot find the file specified. - PS C:\John> - -One solution to the above would be to use `/` as the target of both the `COPY` -instruction, and `dir`. However, this syntax is, at best, confusing as it is not -natural for paths on `Windows`, and at worst, error prone as not all commands on -`Windows` support `/` as the path separator. - -By adding the `escape` parser directive, the following `Dockerfile` succeeds as -expected with the use of natural platform semantics for file paths on `Windows`: - - # escape=` - - FROM windowsservercore - COPY testfile.txt c:\ - RUN dir c:\ - -Results in: - - PS C:\John> docker build -t succeeds --no-cache=true . - Sending build context to Docker daemon 3.072 kB - Step 1 : FROM windowsservercore - ---> dbfee88ee9fd - Step 2 : COPY testfile.txt c:\ - ---> 99ceb62e90df - Removing intermediate container 62afbe726221 - Step 3 : RUN dir c:\ - ---> Running in a5ff53ad6323 - Volume in drive C has no label. - Volume Serial Number is 1440-27FA - - Directory of c:\ - - 03/25/2016 05:28 AM inetpub - 03/25/2016 04:22 AM PerfLogs - 04/22/2016 10:59 PM Program Files - 03/25/2016 04:22 AM Program Files (x86) - 04/18/2016 09:26 AM 4 testfile.txt - 04/22/2016 10:59 PM Users - 04/22/2016 10:59 PM Windows - 1 File(s) 4 bytes - 6 Dir(s) 21,252,689,920 bytes free - ---> 2569aa19abef - Removing intermediate container a5ff53ad6323 - Successfully built 2569aa19abef - PS C:\John> - -## Environment replacement - -Environment variables (declared with [the `ENV` statement](builder.md#env)) can also be -used in certain instructions as variables to be interpreted by the -`Dockerfile`. Escapes are also handled for including variable-like syntax -into a statement literally. - -Environment variables are notated in the `Dockerfile` either with -`$variable_name` or `${variable_name}`. They are treated equivalently and the -brace syntax is typically used to address issues with variable names with no -whitespace, like `${foo}_bar`. - -The `${variable_name}` syntax also supports a few of the standard `bash` -modifiers as specified below: - -* `${variable:-word}` indicates that if `variable` is set then the result - will be that value. If `variable` is not set then `word` will be the result. -* `${variable:+word}` indicates that if `variable` is set then `word` will be - the result, otherwise the result is the empty string. - -In all cases, `word` can be any string, including additional environment -variables. - -Escaping is possible by adding a `\` before the variable: `\$foo` or `\${foo}`, -for example, will translate to `$foo` and `${foo}` literals respectively. - -Example (parsed representation is displayed after the `#`): - - FROM busybox - ENV foo /bar - WORKDIR ${foo} # WORKDIR /bar - ADD . $foo # ADD . /bar - COPY \$foo /quux # COPY $foo /quux - -Environment variables are supported by the following list of instructions in -the `Dockerfile`: - -* `ADD` -* `COPY` -* `ENV` -* `EXPOSE` -* `LABEL` -* `USER` -* `WORKDIR` -* `VOLUME` -* `STOPSIGNAL` - -as well as: - -* `ONBUILD` (when combined with one of the supported instructions above) - -> **Note**: -> prior to 1.4, `ONBUILD` instructions did **NOT** support environment -> variable, even when combined with any of the instructions listed above. - -Environment variable substitution will use the same value for each variable -throughout the entire command. In other words, in this example: - - ENV abc=hello - ENV abc=bye def=$abc - ENV ghi=$abc - -will result in `def` having a value of `hello`, not `bye`. However, -`ghi` will have a value of `bye` because it is not part of the same command -that set `abc` to `bye`. - -## .dockerignore file - -Before the docker CLI sends the context to the docker daemon, it looks -for a file named `.dockerignore` in the root directory of the context. -If this file exists, the CLI modifies the context to exclude files and -directories that match patterns in it. This helps to avoid -unnecessarily sending large or sensitive files and directories to the -daemon and potentially adding them to images using `ADD` or `COPY`. - -The CLI interprets the `.dockerignore` file as a newline-separated -list of patterns similar to the file globs of Unix shells. For the -purposes of matching, the root of the context is considered to be both -the working and the root directory. For example, the patterns -`/foo/bar` and `foo/bar` both exclude a file or directory named `bar` -in the `foo` subdirectory of `PATH` or in the root of the git -repository located at `URL`. Neither excludes anything else. - -If a line in `.dockerignore` file starts with `#` in column 1, then this line is -considered as a comment and is ignored before interpreted by the CLI. - -Here is an example `.dockerignore` file: - -``` -# comment - */temp* - */*/temp* - temp? -``` - -This file causes the following build behavior: - -| Rule | Behavior | -|----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `# comment` | Ignored. | -| `*/temp*` | Exclude files and directories whose names start with `temp` in any immediate subdirectory of the root. For example, the plain file `/somedir/temporary.txt` is excluded, as is the directory `/somedir/temp`. | -| `*/*/temp*` | Exclude files and directories starting with `temp` from any subdirectory that is two levels below the root. For example, `/somedir/subdir/temporary.txt` is excluded. | -| `temp?` | Exclude files and directories in the root directory whose names are a one-character extension of `temp`. For example, `/tempa` and `/tempb` are excluded. - - -Matching is done using Go's -[filepath.Match](http://golang.org/pkg/path/filepath#Match) rules. A -preprocessing step removes leading and trailing whitespace and -eliminates `.` and `..` elements using Go's -[filepath.Clean](http://golang.org/pkg/path/filepath/#Clean). Lines -that are blank after preprocessing are ignored. - -Beyond Go's filepath.Match rules, Docker also supports a special -wildcard string `**` that matches any number of directories (including -zero). For example, `**/*.go` will exclude all files that end with `.go` -that are found in all directories, including the root of the build context. - -Lines starting with `!` (exclamation mark) can be used to make exceptions -to exclusions. The following is an example `.dockerignore` file that -uses this mechanism: - -``` - *.md - !README.md -``` - -All markdown files *except* `README.md` are excluded from the context. - -The placement of `!` exception rules influences the behavior: the last -line of the `.dockerignore` that matches a particular file determines -whether it is included or excluded. Consider the following example: - -``` - *.md - !README*.md - README-secret.md -``` - -No markdown files are included in the context except README files other than -`README-secret.md`. - -Now consider this example: - -``` - *.md - README-secret.md - !README*.md -``` - -All of the README files are included. The middle line has no effect because -`!README*.md` matches `README-secret.md` and comes last. - -You can even use the `.dockerignore` file to exclude the `Dockerfile` -and `.dockerignore` files. These files are still sent to the daemon -because it needs them to do its job. But the `ADD` and `COPY` commands -do not copy them to the image. - -Finally, you may want to specify which files to include in the -context, rather than which to exclude. To achieve this, specify `*` as -the first pattern, followed by one or more `!` exception patterns. - -**Note**: For historical reasons, the pattern `.` is ignored. - -## FROM - - FROM - -Or - - FROM : - -Or - - FROM @ - -The `FROM` instruction sets the [*Base Image*](glossary.md#base-image) -for subsequent instructions. As such, a valid `Dockerfile` must have `FROM` as -its first instruction. The image can be any valid image – it is especially easy -to start by **pulling an image** from the [*Public Repositories*](../tutorials/dockerrepos.md). - -- `FROM` must be the first non-comment instruction in the `Dockerfile`. - -- `FROM` can appear multiple times within a single `Dockerfile` in order to create -multiple images. Simply make a note of the last image ID output by the commit -before each new `FROM` command. - -- The `tag` or `digest` values are optional. If you omit either of them, the builder -assumes a `latest` by default. The builder returns an error if it cannot match -the `tag` value. - -## MAINTAINER - - MAINTAINER - -The `MAINTAINER` instruction allows you to set the *Author* field of the -generated images. - -## RUN - -RUN has 2 forms: - -- `RUN ` (*shell* form, the command is run in a shell, which by -default is `/bin/sh -c` on Linux or `cmd /S /C` on Windows) -- `RUN ["executable", "param1", "param2"]` (*exec* form) - -The `RUN` instruction will execute any commands in a new layer on top of the -current image and commit the results. The resulting committed image will be -used for the next step in the `Dockerfile`. - -Layering `RUN` instructions and generating commits conforms to the core -concepts of Docker where commits are cheap and containers can be created from -any point in an image's history, much like source control. - -The *exec* form makes it possible to avoid shell string munging, and to `RUN` -commands using a base image that does not contain the specified shell executable. - -The default shell for the *shell* form can be changed using the `SHELL` -command. - -In the *shell* form you can use a `\` (backslash) to continue a single -RUN instruction onto the next line. For example, consider these two lines: -``` -RUN /bin/bash -c 'source $HOME/.bashrc ;\ -echo $HOME' -``` -Together they are equivalent to this single line: -``` -RUN /bin/bash -c 'source $HOME/.bashrc ; echo $HOME' -``` - -> **Note**: -> To use a different shell, other than '/bin/sh', use the *exec* form -> passing in the desired shell. For example, -> `RUN ["/bin/bash", "-c", "echo hello"]` - -> **Note**: -> The *exec* form is parsed as a JSON array, which means that -> you must use double-quotes (") around words not single-quotes ('). - -> **Note**: -> Unlike the *shell* form, the *exec* form does not invoke a command shell. -> This means that normal shell processing does not happen. For example, -> `RUN [ "echo", "$HOME" ]` will not do variable substitution on `$HOME`. -> If you want shell processing then either use the *shell* form or execute -> a shell directly, for example: `RUN [ "sh", "-c", "echo $HOME" ]`. -> When using the exec form and executing a shell directly, as in the case for -> the shell form, it is the shell that is doing the environment variable -> expansion, not docker. -> -> **Note**: -> In the *JSON* form, it is necessary to escape backslashes. This is -> particularly relevant on Windows where the backslash is the path separator. -> The following line would otherwise be treated as *shell* form due to not -> being valid JSON, and fail in an unexpected way: -> `RUN ["c:\windows\system32\tasklist.exe"]` -> The correct syntax for this example is: -> `RUN ["c:\\windows\\system32\\tasklist.exe"]` - -The cache for `RUN` instructions isn't invalidated automatically during -the next build. The cache for an instruction like -`RUN apt-get dist-upgrade -y` will be reused during the next build. The -cache for `RUN` instructions can be invalidated by using the `--no-cache` -flag, for example `docker build --no-cache`. - -See the [`Dockerfile` Best Practices -guide](../userguide/eng-image/dockerfile_best-practices.md#build-cache) for more information. - -The cache for `RUN` instructions can be invalidated by `ADD` instructions. See -[below](builder.md#add) for details. - -### Known issues (RUN) - -- [Issue 783](https://github.com/docker/docker/issues/783) is about file - permissions problems that can occur when using the AUFS file system. You - might notice it during an attempt to `rm` a file, for example. - - For systems that have recent aufs version (i.e., `dirperm1` mount option can - be set), docker will attempt to fix the issue automatically by mounting - the layers with `dirperm1` option. More details on `dirperm1` option can be - found at [`aufs` man page](https://github.com/sfjro/aufs3-linux/tree/aufs3.18/Documentation/filesystems/aufs) - - If your system doesn't have support for `dirperm1`, the issue describes a workaround. - -## CMD - -The `CMD` instruction has three forms: - -- `CMD ["executable","param1","param2"]` (*exec* form, this is the preferred form) -- `CMD ["param1","param2"]` (as *default parameters to ENTRYPOINT*) -- `CMD command param1 param2` (*shell* form) - -There can only be one `CMD` instruction in a `Dockerfile`. If you list more than one `CMD` -then only the last `CMD` will take effect. - -**The main purpose of a `CMD` is to provide defaults for an executing -container.** These defaults can include an executable, or they can omit -the executable, in which case you must specify an `ENTRYPOINT` -instruction as well. - -> **Note**: -> If `CMD` is used to provide default arguments for the `ENTRYPOINT` -> instruction, both the `CMD` and `ENTRYPOINT` instructions should be specified -> with the JSON array format. - -> **Note**: -> The *exec* form is parsed as a JSON array, which means that -> you must use double-quotes (") around words not single-quotes ('). - -> **Note**: -> Unlike the *shell* form, the *exec* form does not invoke a command shell. -> This means that normal shell processing does not happen. For example, -> `CMD [ "echo", "$HOME" ]` will not do variable substitution on `$HOME`. -> If you want shell processing then either use the *shell* form or execute -> a shell directly, for example: `CMD [ "sh", "-c", "echo $HOME" ]`. -> When using the exec form and executing a shell directly, as in the case for -> the shell form, it is the shell that is doing the environment variable -> expansion, not docker. - -When used in the shell or exec formats, the `CMD` instruction sets the command -to be executed when running the image. - -If you use the *shell* form of the `CMD`, then the `` will execute in -`/bin/sh -c`: - - FROM ubuntu - CMD echo "This is a test." | wc - - -If you want to **run your** `` **without a shell** then you must -express the command as a JSON array and give the full path to the executable. -**This array form is the preferred format of `CMD`.** Any additional parameters -must be individually expressed as strings in the array: - - FROM ubuntu - CMD ["/usr/bin/wc","--help"] - -If you would like your container to run the same executable every time, then -you should consider using `ENTRYPOINT` in combination with `CMD`. See -[*ENTRYPOINT*](builder.md#entrypoint). - -If the user specifies arguments to `docker run` then they will override the -default specified in `CMD`. - -> **Note**: -> don't confuse `RUN` with `CMD`. `RUN` actually runs a command and commits -> the result; `CMD` does not execute anything at build time, but specifies -> the intended command for the image. - -## LABEL - - LABEL = = = ... - -The `LABEL` instruction adds metadata to an image. A `LABEL` is a -key-value pair. To include spaces within a `LABEL` value, use quotes and -backslashes as you would in command-line parsing. A few usage examples: - - LABEL "com.example.vendor"="ACME Incorporated" - LABEL com.example.label-with-value="foo" - LABEL version="1.0" - LABEL description="This text illustrates \ - that label-values can span multiple lines." - -An image can have more than one label. To specify multiple labels, -Docker recommends combining labels into a single `LABEL` instruction where -possible. Each `LABEL` instruction produces a new layer which can result in an -inefficient image if you use many labels. This example results in a single image -layer. - - LABEL multi.label1="value1" multi.label2="value2" other="value3" - -The above can also be written as: - - LABEL multi.label1="value1" \ - multi.label2="value2" \ - other="value3" - -Labels are additive including `LABEL`s in `FROM` images. If Docker -encounters a label/key that already exists, the new value overrides any previous -labels with identical keys. - -To view an image's labels, use the `docker inspect` command. - - "Labels": { - "com.example.vendor": "ACME Incorporated" - "com.example.label-with-value": "foo", - "version": "1.0", - "description": "This text illustrates that label-values can span multiple lines.", - "multi.label1": "value1", - "multi.label2": "value2", - "other": "value3" - }, - -## EXPOSE - - EXPOSE [...] - -The `EXPOSE` instruction informs Docker that the container listens on the -specified network ports at runtime. `EXPOSE` does not make the ports of the -container accessible to the host. To do that, you must use either the `-p` flag -to publish a range of ports or the `-P` flag to publish all of the exposed -ports. You can expose one port number and publish it externally under another -number. - -To set up port redirection on the host system, see [using the -P -flag](run.md#expose-incoming-ports). The Docker network feature supports -creating networks without the need to expose ports within the network, for -detailed information see the [overview of this -feature](../userguide/networking/index.md)). - -## ENV - - ENV - ENV = ... - -The `ENV` instruction sets the environment variable `` to the value -``. This value will be in the environment of all "descendant" -`Dockerfile` commands and can be [replaced inline](builder.md#environment-replacement) in -many as well. - -The `ENV` instruction has two forms. The first form, `ENV `, -will set a single variable to a value. The entire string after the first -space will be treated as the `` - including characters such as -spaces and quotes. - -The second form, `ENV = ...`, allows for multiple variables to -be set at one time. Notice that the second form uses the equals sign (=) -in the syntax, while the first form does not. Like command line parsing, -quotes and backslashes can be used to include spaces within values. - -For example: - - ENV myName="John Doe" myDog=Rex\ The\ Dog \ - myCat=fluffy - -and - - ENV myName John Doe - ENV myDog Rex The Dog - ENV myCat fluffy - -will yield the same net results in the final container, but the first form -is preferred because it produces a single cache layer. - -The environment variables set using `ENV` will persist when a container is run -from the resulting image. You can view the values using `docker inspect`, and -change them using `docker run --env =`. - -> **Note**: -> Environment persistence can cause unexpected side effects. For example, -> setting `ENV DEBIAN_FRONTEND noninteractive` may confuse apt-get -> users on a Debian-based image. To set a value for a single command, use -> `RUN = `. - -## ADD - -ADD has two forms: - -- `ADD ... ` -- `ADD ["",... ""]` (this form is required for paths containing -whitespace) - -The `ADD` instruction copies new files, directories or remote file URLs from `` -and adds them to the filesystem of the container at the path ``. - -Multiple `` resource may be specified but if they are files or -directories then they must be relative to the source directory that is -being built (the context of the build). - -Each `` may contain wildcards and matching will be done using Go's -[filepath.Match](http://golang.org/pkg/path/filepath#Match) rules. For example: - - ADD hom* /mydir/ # adds all files starting with "hom" - ADD hom?.txt /mydir/ # ? is replaced with any single character, e.g., "home.txt" - -The `` is an absolute path, or a path relative to `WORKDIR`, into which -the source will be copied inside the destination container. - - ADD test relativeDir/ # adds "test" to `WORKDIR`/relativeDir/ - ADD test /absoluteDir/ # adds "test" to /absoluteDir/ - -All new files and directories are created with a UID and GID of 0. - -In the case where `` is a remote file URL, the destination will -have permissions of 600. If the remote file being retrieved has an HTTP -`Last-Modified` header, the timestamp from that header will be used -to set the `mtime` on the destination file. However, like any other file -processed during an `ADD`, `mtime` will not be included in the determination -of whether or not the file has changed and the cache should be updated. - -> **Note**: -> If you build by passing a `Dockerfile` through STDIN (`docker -> build - < somefile`), there is no build context, so the `Dockerfile` -> can only contain a URL based `ADD` instruction. You can also pass a -> compressed archive through STDIN: (`docker build - < archive.tar.gz`), -> the `Dockerfile` at the root of the archive and the rest of the -> archive will get used at the context of the build. - -> **Note**: -> If your URL files are protected using authentication, you -> will need to use `RUN wget`, `RUN curl` or use another tool from -> within the container as the `ADD` instruction does not support -> authentication. - -> **Note**: -> The first encountered `ADD` instruction will invalidate the cache for all -> following instructions from the Dockerfile if the contents of `` have -> changed. This includes invalidating the cache for `RUN` instructions. -> See the [`Dockerfile` Best Practices -guide](../userguide/eng-image/dockerfile_best-practices.md#build-cache) for more information. - - -`ADD` obeys the following rules: - -- The `` path must be inside the *context* of the build; - you cannot `ADD ../something /something`, because the first step of a - `docker build` is to send the context directory (and subdirectories) to the - docker daemon. - -- If `` is a URL and `` does not end with a trailing slash, then a - file is downloaded from the URL and copied to ``. - -- If `` is a URL and `` does end with a trailing slash, then the - filename is inferred from the URL and the file is downloaded to - `/`. For instance, `ADD http://example.com/foobar /` would - create the file `/foobar`. The URL must have a nontrivial path so that an - appropriate filename can be discovered in this case (`http://example.com` - will not work). - -- If `` is a directory, the entire contents of the directory are copied, - including filesystem metadata. - -> **Note**: -> The directory itself is not copied, just its contents. - -- If `` is a *local* tar archive in a recognized compression format - (identity, gzip, bzip2 or xz) then it is unpacked as a directory. Resources - from *remote* URLs are **not** decompressed. When a directory is copied or - unpacked, it has the same behavior as `tar -x`: the result is the union of: - - 1. Whatever existed at the destination path and - 2. The contents of the source tree, with conflicts resolved in favor - of "2." on a file-by-file basis. - - > **Note**: - > Whether a file is identified as a recognized compression format or not - > is done solely based on the contents of the file, not the name of the file. - > For example, if an empty file happens to end with `.tar.gz` this will not - > be recognized as a compressed file and **will not** generate any kind of - > decompression error message, rather the file will simply be copied to the - > destination. - -- If `` is any other kind of file, it is copied individually along with - its metadata. In this case, if `` ends with a trailing slash `/`, it - will be considered a directory and the contents of `` will be written - at `/base()`. - -- If multiple `` resources are specified, either directly or due to the - use of a wildcard, then `` must be a directory, and it must end with - a slash `/`. - -- If `` does not end with a trailing slash, it will be considered a - regular file and the contents of `` will be written at ``. - -- If `` doesn't exist, it is created along with all missing directories - in its path. - -## COPY - -COPY has two forms: - -- `COPY ... ` -- `COPY ["",... ""]` (this form is required for paths containing -whitespace) - -The `COPY` instruction copies new files or directories from `` -and adds them to the filesystem of the container at the path ``. - -Multiple `` resource may be specified but they must be relative -to the source directory that is being built (the context of the build). - -Each `` may contain wildcards and matching will be done using Go's -[filepath.Match](http://golang.org/pkg/path/filepath#Match) rules. For example: - - COPY hom* /mydir/ # adds all files starting with "hom" - COPY hom?.txt /mydir/ # ? is replaced with any single character, e.g., "home.txt" - -The `` is an absolute path, or a path relative to `WORKDIR`, into which -the source will be copied inside the destination container. - - COPY test relativeDir/ # adds "test" to `WORKDIR`/relativeDir/ - COPY test /absoluteDir/ # adds "test" to /absoluteDir/ - -All new files and directories are created with a UID and GID of 0. - -> **Note**: -> If you build using STDIN (`docker build - < somefile`), there is no -> build context, so `COPY` can't be used. - -`COPY` obeys the following rules: - -- The `` path must be inside the *context* of the build; - you cannot `COPY ../something /something`, because the first step of a - `docker build` is to send the context directory (and subdirectories) to the - docker daemon. - -- If `` is a directory, the entire contents of the directory are copied, - including filesystem metadata. - -> **Note**: -> The directory itself is not copied, just its contents. - -- If `` is any other kind of file, it is copied individually along with - its metadata. In this case, if `` ends with a trailing slash `/`, it - will be considered a directory and the contents of `` will be written - at `/base()`. - -- If multiple `` resources are specified, either directly or due to the - use of a wildcard, then `` must be a directory, and it must end with - a slash `/`. - -- If `` does not end with a trailing slash, it will be considered a - regular file and the contents of `` will be written at ``. - -- If `` doesn't exist, it is created along with all missing directories - in its path. - -## ENTRYPOINT - -ENTRYPOINT has two forms: - -- `ENTRYPOINT ["executable", "param1", "param2"]` - (*exec* form, preferred) -- `ENTRYPOINT command param1 param2` - (*shell* form) - -An `ENTRYPOINT` allows you to configure a container that will run as an executable. - -For example, the following will start nginx with its default content, listening -on port 80: - - docker run -i -t --rm -p 80:80 nginx - -Command line arguments to `docker run ` will be appended after all -elements in an *exec* form `ENTRYPOINT`, and will override all elements specified -using `CMD`. -This allows arguments to be passed to the entry point, i.e., `docker run -d` -will pass the `-d` argument to the entry point. -You can override the `ENTRYPOINT` instruction using the `docker run --entrypoint` -flag. - -The *shell* form prevents any `CMD` or `run` command line arguments from being -used, but has the disadvantage that your `ENTRYPOINT` will be started as a -subcommand of `/bin/sh -c`, which does not pass signals. -This means that the executable will not be the container's `PID 1` - and -will _not_ receive Unix signals - so your executable will not receive a -`SIGTERM` from `docker stop `. - -Only the last `ENTRYPOINT` instruction in the `Dockerfile` will have an effect. - -### Exec form ENTRYPOINT example - -You can use the *exec* form of `ENTRYPOINT` to set fairly stable default commands -and arguments and then use either form of `CMD` to set additional defaults that -are more likely to be changed. - - FROM ubuntu - ENTRYPOINT ["top", "-b"] - CMD ["-c"] - -When you run the container, you can see that `top` is the only process: - - $ docker run -it --rm --name test top -H - top - 08:25:00 up 7:27, 0 users, load average: 0.00, 0.01, 0.05 - Threads: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie - %Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st - KiB Mem: 2056668 total, 1616832 used, 439836 free, 99352 buffers - KiB Swap: 1441840 total, 0 used, 1441840 free. 1324440 cached Mem - - PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND - 1 root 20 0 19744 2336 2080 R 0.0 0.1 0:00.04 top - -To examine the result further, you can use `docker exec`: - - $ docker exec -it test ps aux - USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND - root 1 2.6 0.1 19752 2352 ? Ss+ 08:24 0:00 top -b -H - root 7 0.0 0.1 15572 2164 ? R+ 08:25 0:00 ps aux - -And you can gracefully request `top` to shut down using `docker stop test`. - -The following `Dockerfile` shows using the `ENTRYPOINT` to run Apache in the -foreground (i.e., as `PID 1`): - -``` -FROM debian:stable -RUN apt-get update && apt-get install -y --force-yes apache2 -EXPOSE 80 443 -VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"] -ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"] -``` - -If you need to write a starter script for a single executable, you can ensure that -the final executable receives the Unix signals by using `exec` and `gosu` -commands: - -```bash -#!/bin/bash -set -e - -if [ "$1" = 'postgres' ]; then - chown -R postgres "$PGDATA" - - if [ -z "$(ls -A "$PGDATA")" ]; then - gosu postgres initdb - fi - - exec gosu postgres "$@" -fi - -exec "$@" -``` - -Lastly, if you need to do some extra cleanup (or communicate with other containers) -on shutdown, or are co-ordinating more than one executable, you may need to ensure -that the `ENTRYPOINT` script receives the Unix signals, passes them on, and then -does some more work: - -``` -#!/bin/sh -# Note: I've written this using sh so it works in the busybox container too - -# USE the trap if you need to also do manual cleanup after the service is stopped, -# or need to start multiple services in the one container -trap "echo TRAPed signal" HUP INT QUIT TERM - -# start service in background here -/usr/sbin/apachectl start - -echo "[hit enter key to exit] or run 'docker stop '" -read - -# stop service and clean up here -echo "stopping apache" -/usr/sbin/apachectl stop - -echo "exited $0" -``` - -If you run this image with `docker run -it --rm -p 80:80 --name test apache`, -you can then examine the container's processes with `docker exec`, or `docker top`, -and then ask the script to stop Apache: - -```bash -$ docker exec -it test ps aux -USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND -root 1 0.1 0.0 4448 692 ? Ss+ 00:42 0:00 /bin/sh /run.sh 123 cmd cmd2 -root 19 0.0 0.2 71304 4440 ? Ss 00:42 0:00 /usr/sbin/apache2 -k start -www-data 20 0.2 0.2 360468 6004 ? Sl 00:42 0:00 /usr/sbin/apache2 -k start -www-data 21 0.2 0.2 360468 6000 ? Sl 00:42 0:00 /usr/sbin/apache2 -k start -root 81 0.0 0.1 15572 2140 ? R+ 00:44 0:00 ps aux -$ docker top test -PID USER COMMAND -10035 root {run.sh} /bin/sh /run.sh 123 cmd cmd2 -10054 root /usr/sbin/apache2 -k start -10055 33 /usr/sbin/apache2 -k start -10056 33 /usr/sbin/apache2 -k start -$ /usr/bin/time docker stop test -test -real 0m 0.27s -user 0m 0.03s -sys 0m 0.03s -``` - -> **Note:** you can override the `ENTRYPOINT` setting using `--entrypoint`, -> but this can only set the binary to *exec* (no `sh -c` will be used). - -> **Note**: -> The *exec* form is parsed as a JSON array, which means that -> you must use double-quotes (") around words not single-quotes ('). - -> **Note**: -> Unlike the *shell* form, the *exec* form does not invoke a command shell. -> This means that normal shell processing does not happen. For example, -> `ENTRYPOINT [ "echo", "$HOME" ]` will not do variable substitution on `$HOME`. -> If you want shell processing then either use the *shell* form or execute -> a shell directly, for example: `ENTRYPOINT [ "sh", "-c", "echo $HOME" ]`. -> When using the exec form and executing a shell directly, as in the case for -> the shell form, it is the shell that is doing the environment variable -> expansion, not docker. - -### Shell form ENTRYPOINT example - -You can specify a plain string for the `ENTRYPOINT` and it will execute in `/bin/sh -c`. -This form will use shell processing to substitute shell environment variables, -and will ignore any `CMD` or `docker run` command line arguments. -To ensure that `docker stop` will signal any long running `ENTRYPOINT` executable -correctly, you need to remember to start it with `exec`: - - FROM ubuntu - ENTRYPOINT exec top -b - -When you run this image, you'll see the single `PID 1` process: - - $ docker run -it --rm --name test top - Mem: 1704520K used, 352148K free, 0K shrd, 0K buff, 140368121167873K cached - CPU: 5% usr 0% sys 0% nic 94% idle 0% io 0% irq 0% sirq - Load average: 0.08 0.03 0.05 2/98 6 - PID PPID USER STAT VSZ %VSZ %CPU COMMAND - 1 0 root R 3164 0% 0% top -b - -Which will exit cleanly on `docker stop`: - - $ /usr/bin/time docker stop test - test - real 0m 0.20s - user 0m 0.02s - sys 0m 0.04s - -If you forget to add `exec` to the beginning of your `ENTRYPOINT`: - - FROM ubuntu - ENTRYPOINT top -b - CMD --ignored-param1 - -You can then run it (giving it a name for the next step): - - $ docker run -it --name test top --ignored-param2 - Mem: 1704184K used, 352484K free, 0K shrd, 0K buff, 140621524238337K cached - CPU: 9% usr 2% sys 0% nic 88% idle 0% io 0% irq 0% sirq - Load average: 0.01 0.02 0.05 2/101 7 - PID PPID USER STAT VSZ %VSZ %CPU COMMAND - 1 0 root S 3168 0% 0% /bin/sh -c top -b cmd cmd2 - 7 1 root R 3164 0% 0% top -b - -You can see from the output of `top` that the specified `ENTRYPOINT` is not `PID 1`. - -If you then run `docker stop test`, the container will not exit cleanly - the -`stop` command will be forced to send a `SIGKILL` after the timeout: - - $ docker exec -it test ps aux - PID USER COMMAND - 1 root /bin/sh -c top -b cmd cmd2 - 7 root top -b - 8 root ps aux - $ /usr/bin/time docker stop test - test - real 0m 10.19s - user 0m 0.04s - sys 0m 0.03s - -### Understand how CMD and ENTRYPOINT interact - -Both `CMD` and `ENTRYPOINT` instructions define what command gets executed when running a container. -There are few rules that describe their co-operation. - -1. Dockerfile should specify at least one of `CMD` or `ENTRYPOINT` commands. - -2. `ENTRYPOINT` should be defined when using the container as an executable. - -3. `CMD` should be used as a way of defining default arguments for an `ENTRYPOINT` command -or for executing an ad-hoc command in a container. - -4. `CMD` will be overridden when running the container with alternative arguments. - -The table below shows what command is executed for different `ENTRYPOINT` / `CMD` combinations: - -| | No ENTRYPOINT | ENTRYPOINT exec_entry p1_entry | ENTRYPOINT ["exec_entry", "p1_entry"] | -|--------------------------------|----------------------------|-----------------------------------------------------------|------------------------------------------------| -| **No CMD** | *error, not allowed* | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry | -| **CMD ["exec_cmd", "p1_cmd"]** | exec_cmd p1_cmd | /bin/sh -c exec_entry p1_entry exec_cmd p1_cmd | exec_entry p1_entry exec_cmd p1_cmd | -| **CMD ["p1_cmd", "p2_cmd"]** | p1_cmd p2_cmd | /bin/sh -c exec_entry p1_entry p1_cmd p2_cmd | exec_entry p1_entry p1_cmd p2_cmd | -| **CMD exec_cmd p1_cmd** | /bin/sh -c exec_cmd p1_cmd | /bin/sh -c exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd | exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd | - -## VOLUME - - VOLUME ["/data"] - -The `VOLUME` instruction creates a mount point with the specified name -and marks it as holding externally mounted volumes from native host or other -containers. The value can be a JSON array, `VOLUME ["/var/log/"]`, or a plain -string with multiple arguments, such as `VOLUME /var/log` or `VOLUME /var/log -/var/db`. For more information/examples and mounting instructions via the -Docker client, refer to -[*Share Directories via Volumes*](../tutorials/dockervolumes.md#mount-a-host-directory-as-a-data-volume) -documentation. - -The `docker run` command initializes the newly created volume with any data -that exists at the specified location within the base image. For example, -consider the following Dockerfile snippet: - - FROM ubuntu - RUN mkdir /myvol - RUN echo "hello world" > /myvol/greeting - VOLUME /myvol - -This Dockerfile results in an image that causes `docker run`, to -create a new mount point at `/myvol` and copy the `greeting` file -into the newly created volume. - -> **Note**: -> If any build steps change the data within the volume after it has been -> declared, those changes will be discarded. - -> **Note**: -> The list is parsed as a JSON array, which means that -> you must use double-quotes (") around words not single-quotes ('). - -## USER - - USER daemon[:daemon] - -The `USER` instruction sets the user name or UID to use when running the image -and for any `RUN`, `CMD` and `ENTRYPOINT` instructions that follow it in the -`Dockerfile`. To specify the group ID (GID), add it as a suffix to the UID, -separated by a colon. For instance, `MYUSER:MYGROUP`. - -## WORKDIR - - WORKDIR /path/to/workdir - -The `WORKDIR` instruction sets the working directory for any `RUN`, `CMD`, -`ENTRYPOINT`, `COPY` and `ADD` instructions that follow it in the `Dockerfile`. -If the `WORKDIR` doesn't exist, it will be created even if it's not used in any -subsequent `Dockerfile` instruction. - -It can be used multiple times in the one `Dockerfile`. If a relative path -is provided, it will be relative to the path of the previous `WORKDIR` -instruction. For example: - - WORKDIR /a - WORKDIR b - WORKDIR c - RUN pwd - -The output of the final `pwd` command in this `Dockerfile` would be -`/a/b/c`. - -The `WORKDIR` instruction can resolve environment variables previously set using -`ENV`. You can only use environment variables explicitly set in the `Dockerfile`. -For example: - - ENV DIRPATH /path - WORKDIR $DIRPATH/$DIRNAME - RUN pwd - -The output of the final `pwd` command in this `Dockerfile` would be -`/path/$DIRNAME` - -## ARG - - ARG [=] - -The `ARG` instruction defines a variable that users can pass at build-time to -the builder with the `docker build` command using the -`--build-arg =` flag. If a user specifies a build argument -that was not defined in the Dockerfile, the build outputs an error. - -``` -One or more build-args were not consumed, failing build. -``` - -The Dockerfile author can define a single variable by specifying `ARG` once or many -variables by specifying `ARG` more than once. For example, a valid Dockerfile: - -``` -FROM busybox -ARG user1 -ARG buildno -... -``` - -A Dockerfile author may optionally specify a default value for an `ARG` instruction: - -``` -FROM busybox -ARG user1=someuser -ARG buildno=1 -... -``` - -If an `ARG` value has a default and if there is no value passed at build-time, the -builder uses the default. - -An `ARG` variable definition comes into effect from the line on which it is -defined in the `Dockerfile` not from the argument's use on the command-line or -elsewhere. For example, consider this Dockerfile: - -``` -1 FROM busybox -2 USER ${user:-some_user} -3 ARG user -4 USER $user -... -``` -A user builds this file by calling: - -``` -$ docker build --build-arg user=what_user Dockerfile -``` - -The `USER` at line 2 evaluates to `some_user` as the `user` variable is defined on the -subsequent line 3. The `USER` at line 4 evaluates to `what_user` as `user` is -defined and the `what_user` value was passed on the command line. Prior to its definition by an -`ARG` instruction, any use of a variable results in an empty string. - -> **Warning:** It is not recommended to use build-time variables for -> passing secrets like github keys, user credentials etc. Build-time variable -> values are visible to any user of the image with the `docker history` command. - -You can use an `ARG` or an `ENV` instruction to specify variables that are -available to the `RUN` instruction. Environment variables defined using the -`ENV` instruction always override an `ARG` instruction of the same name. Consider -this Dockerfile with an `ENV` and `ARG` instruction. - -``` -1 FROM ubuntu -2 ARG CONT_IMG_VER -3 ENV CONT_IMG_VER v1.0.0 -4 RUN echo $CONT_IMG_VER -``` -Then, assume this image is built with this command: - -``` -$ docker build --build-arg CONT_IMG_VER=v2.0.1 Dockerfile -``` - -In this case, the `RUN` instruction uses `v1.0.0` instead of the `ARG` setting -passed by the user:`v2.0.1` This behavior is similar to a shell -script where a locally scoped variable overrides the variables passed as -arguments or inherited from environment, from its point of definition. - -Using the example above but a different `ENV` specification you can create more -useful interactions between `ARG` and `ENV` instructions: - -``` -1 FROM ubuntu -2 ARG CONT_IMG_VER -3 ENV CONT_IMG_VER ${CONT_IMG_VER:-v1.0.0} -4 RUN echo $CONT_IMG_VER -``` - -Unlike an `ARG` instruction, `ENV` values are always persisted in the built -image. Consider a docker build without the --build-arg flag: - -``` -$ docker build Dockerfile -``` - -Using this Dockerfile example, `CONT_IMG_VER` is still persisted in the image but -its value would be `v1.0.0` as it is the default set in line 3 by the `ENV` instruction. - -The variable expansion technique in this example allows you to pass arguments -from the command line and persist them in the final image by leveraging the -`ENV` instruction. Variable expansion is only supported for [a limited set of -Dockerfile instructions.](builder.md#environment-replacement) - -Docker has a set of predefined `ARG` variables that you can use without a -corresponding `ARG` instruction in the Dockerfile. - -* `HTTP_PROXY` -* `http_proxy` -* `HTTPS_PROXY` -* `https_proxy` -* `FTP_PROXY` -* `ftp_proxy` -* `NO_PROXY` -* `no_proxy` - -To use these, simply pass them on the command line using the flag: - -``` ---build-arg = -``` - -### Impact on build caching - -`ARG` variables are not persisted into the built image as `ENV` variables are. -However, `ARG` variables do impact the build cache in similar ways. If a -Dockerfile defines an `ARG` variable whose value is different from a previous -build, then a "cache miss" occurs upon its first usage, not its definition. In -particular, all `RUN` instructions following an `ARG` instruction use the `ARG` -variable implicitly (as an environment variable), thus can cause a cache miss. - -For example, consider these two Dockerfile: - -``` -1 FROM ubuntu -2 ARG CONT_IMG_VER -3 RUN echo $CONT_IMG_VER -``` - -``` -1 FROM ubuntu -2 ARG CONT_IMG_VER -3 RUN echo hello -``` - -If you specify `--build-arg CONT_IMG_VER=` on the command line, in both -cases, the specification on line 2 does not cause a cache miss; line 3 does -cause a cache miss.`ARG CONT_IMG_VER` causes the RUN line to be identified -as the same as running `CONT_IMG_VER=` echo hello, so if the `` -changes, we get a cache miss. - -Consider another example under the same command line: - -``` -1 FROM ubuntu -2 ARG CONT_IMG_VER -3 ENV CONT_IMG_VER $CONT_IMG_VER -4 RUN echo $CONT_IMG_VER -``` -In this example, the cache miss occurs on line 3. The miss happens because -the variable's value in the `ENV` references the `ARG` variable and that -variable is changed through the command line. In this example, the `ENV` -command causes the image to include the value. - -If an `ENV` instruction overrides an `ARG` instruction of the same name, like -this Dockerfile: - -``` -1 FROM ubuntu -2 ARG CONT_IMG_VER -3 ENV CONT_IMG_VER hello -4 RUN echo $CONT_IMG_VER -``` - -Line 3 does not cause a cache miss because the value of `CONT_IMG_VER` is a -constant (`hello`). As a result, the environment variables and values used on -the `RUN` (line 4) doesn't change between builds. - -## ONBUILD - - ONBUILD [INSTRUCTION] - -The `ONBUILD` instruction adds to the image a *trigger* instruction to -be executed at a later time, when the image is used as the base for -another build. The trigger will be executed in the context of the -downstream build, as if it had been inserted immediately after the -`FROM` instruction in the downstream `Dockerfile`. - -Any build instruction can be registered as a trigger. - -This is useful if you are building an image which will be used as a base -to build other images, for example an application build environment or a -daemon which may be customized with user-specific configuration. - -For example, if your image is a reusable Python application builder, it -will require application source code to be added in a particular -directory, and it might require a build script to be called *after* -that. You can't just call `ADD` and `RUN` now, because you don't yet -have access to the application source code, and it will be different for -each application build. You could simply provide application developers -with a boilerplate `Dockerfile` to copy-paste into their application, but -that is inefficient, error-prone and difficult to update because it -mixes with application-specific code. - -The solution is to use `ONBUILD` to register advance instructions to -run later, during the next build stage. - -Here's how it works: - -1. When it encounters an `ONBUILD` instruction, the builder adds a - trigger to the metadata of the image being built. The instruction - does not otherwise affect the current build. -2. At the end of the build, a list of all triggers is stored in the - image manifest, under the key `OnBuild`. They can be inspected with - the `docker inspect` command. -3. Later the image may be used as a base for a new build, using the - `FROM` instruction. As part of processing the `FROM` instruction, - the downstream builder looks for `ONBUILD` triggers, and executes - them in the same order they were registered. If any of the triggers - fail, the `FROM` instruction is aborted which in turn causes the - build to fail. If all triggers succeed, the `FROM` instruction - completes and the build continues as usual. -4. Triggers are cleared from the final image after being executed. In - other words they are not inherited by "grand-children" builds. - -For example you might add something like this: - - [...] - ONBUILD ADD . /app/src - ONBUILD RUN /usr/local/bin/python-build --dir /app/src - [...] - -> **Warning**: Chaining `ONBUILD` instructions using `ONBUILD ONBUILD` isn't allowed. - -> **Warning**: The `ONBUILD` instruction may not trigger `FROM` or `MAINTAINER` instructions. - -## STOPSIGNAL - - STOPSIGNAL signal - -The `STOPSIGNAL` instruction sets the system call signal that will be sent to the container to exit. -This signal can be a valid unsigned number that matches a position in the kernel's syscall table, for instance 9, -or a signal name in the format SIGNAME, for instance SIGKILL. - -## HEALTHCHECK - -The `HEALTHCHECK` instruction has two forms: - -* `HEALTHCHECK [OPTIONS] CMD command` (check container health by running a command inside the container) -* `HEALTHCHECK NONE` (disable any healthcheck inherited from the base image) - -The `HEALTHCHECK` instruction tells Docker how to test a container to check that -it is still working. This can detect cases such as a web server that is stuck in -an infinite loop and unable to handle new connections, even though the server -process is still running. - -When a container has a healthcheck specified, it has a _health status_ in -addition to its normal status. This status is initially `starting`. Whenever a -health check passes, it becomes `healthy` (whatever state it was previously in). -After a certain number of consecutive failures, it becomes `unhealthy`. - -The options that can appear before `CMD` are: - -* `--interval=DURATION` (default: `30s`) -* `--timeout=DURATION` (default: `30s`) -* `--retries=N` (default: `3`) - -The health check will first run **interval** seconds after the container is -started, and then again **interval** seconds after each previous check completes. - -If a single run of the check takes longer than **timeout** seconds then the check -is considered to have failed. - -It takes **retries** consecutive failures of the health check for the container -to be considered `unhealthy`. - -There can only be one `HEALTHCHECK` instruction in a Dockerfile. If you list -more than one then only the last `HEALTHCHECK` will take effect. - -The command after the `CMD` keyword can be either a shell command (e.g. `HEALTHCHECK -CMD /bin/check-running`) or an _exec_ array (as with other Dockerfile commands; -see e.g. `ENTRYPOINT` for details). - -The command's exit status indicates the health status of the container. -The possible values are: - -- 0: success - the container is healthy and ready for use -- 1: unhealthy - the container is not working correctly -- 2: reserved - do not use this exit code - -For example, to check every five minutes or so that a web-server is able to -serve the site's main page within three seconds: - - HEALTHCHECK --interval=5m --timeout=3s \ - CMD curl -f http://localhost/ || exit 1 - -To help debug failing probes, any output text (UTF-8 encoded) that the command writes -on stdout or stderr will be stored in the health status and can be queried with -`docker inspect`. Such output should be kept short (only the first 4096 bytes -are stored currently). - -When the health status of a container changes, a `health_status` event is -generated with the new status. - -The `HEALTHCHECK` feature was added in Docker 1.12. - - -## SHELL - - SHELL ["executable", "parameters"] - -The `SHELL` instruction allows the default shell used for the *shell* form of -commands to be overridden. The default shell on Linux is `["/bin/sh", "-c"]`, and on -Windows is `["cmd", "/S", "/C"]`. The `SHELL` instruction *must* be written in JSON -form in a Dockerfile. - -The `SHELL` instruction is particularly useful on Windows where there are -two commonly used and quite different native shells: `cmd` and `powershell`, as -well as alternate shells available including `sh`. - -The `SHELL` instruction can appear multiple times. Each `SHELL` instruction overrides -all previous `SHELL` instructions, and affects all subsequent instructions. For example: - - FROM windowsservercore - - # Executed as cmd /S /C echo default - RUN echo default - - # Executed as cmd /S /C powershell -command Write-Host default - RUN powershell -command Write-Host default - - # Executed as powershell -command Write-Host hello - SHELL ["powershell", "-command"] - RUN Write-Host hello - - # Executed as cmd /S /C echo hello - SHELL ["cmd", "/S"", "/C"] - RUN echo hello - -The following instructions can be affected by the `SHELL` instruction when the -*shell* form of them is used in a Dockerfile: `RUN`, `CMD` and `ENTRYPOINT`. - -The following example is a common pattern found on Windows which can be -streamlined by using the `SHELL` instruction: - - ... - RUN powershell -command Execute-MyCmdlet -param1 "c:\foo.txt" - ... - -The command invoked by docker will be: - - cmd /S /C powershell -command Execute-MyCmdlet -param1 "c:\foo.txt" - - This is inefficient for two reasons. First, there is an un-necessary cmd.exe command - processor (aka shell) being invoked. Second, each `RUN` instruction in the *shell* - form requires an extra `powershell -command` prefixing the command. - -To make this more efficient, one of two mechanisms can be employed. One is to -use the JSON form of the RUN command such as: - - ... - RUN ["powershell", "-command", "Execute-MyCmdlet", "-param1 \"c:\\foo.txt\""] - ... - -While the JSON form is unambiguous and does not use the un-necessary cmd.exe, -it does require more verbosity through double-quoting and escaping. The alternate -mechanism is to use the `SHELL` instruction and the *shell* form, -making a more natural syntax for Windows users, especially when combined with -the `escape` parser directive: - - # escape=` - - FROM windowsservercore - SHELL ["powershell","-command"] - RUN New-Item -ItemType Directory C:\Example - ADD Execute-MyCmdlet.ps1 c:\example\ - RUN c:\example\Execute-MyCmdlet -sample 'hello world' - -Resulting in: - - PS E:\docker\build\shell> docker build -t shell . - Sending build context to Docker daemon 3.584 kB - Step 1 : FROM windowsservercore - ---> 5bc36a335344 - Step 2 : SHELL powershell -command - ---> Running in 87d7a64c9751 - ---> 4327358436c1 - Removing intermediate container 87d7a64c9751 - Step 3 : RUN New-Item -ItemType Directory C:\Example - ---> Running in 3e6ba16b8df9 - - - Directory: C:\ - - - Mode LastWriteTime Length Name - ---- ------------- ------ ---- - d----- 6/2/2016 2:59 PM Example - - - ---> 1f1dfdcec085 - Removing intermediate container 3e6ba16b8df9 - Step 4 : ADD Execute-MyCmdlet.ps1 c:\example\ - ---> 6770b4c17f29 - Removing intermediate container b139e34291dc - Step 5 : RUN c:\example\Execute-MyCmdlet -sample 'hello world' - ---> Running in abdcf50dfd1f - Hello from Execute-MyCmdlet.ps1 - passed hello world - ---> ba0e25255fda - Removing intermediate container abdcf50dfd1f - Successfully built ba0e25255fda - PS E:\docker\build\shell> - -The `SHELL` instruction could also be used to modify the way in which -a shell operates. For example, using `SHELL cmd /S /C /V:ON|OFF` on Windows, delayed -environment variable expansion semantics could be modified. - -The `SHELL` instruction can also be used on Linux should an alternate shell be -required such `zsh`, `csh`, `tcsh` and others. - -The `SHELL` feature was added in Docker 1.12. - -## Dockerfile examples - -Below you can see some examples of Dockerfile syntax. If you're interested in -something more realistic, take a look at the list of [Dockerization examples](../examples/index.md). - -``` -# Nginx -# -# VERSION 0.0.1 - -FROM ubuntu -MAINTAINER Victor Vieux - -LABEL Description="This image is used to start the foobar executable" Vendor="ACME Products" Version="1.0" -RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server -``` - -``` -# Firefox over VNC -# -# VERSION 0.3 - -FROM ubuntu - -# Install vnc, xvfb in order to create a 'fake' display and firefox -RUN apt-get update && apt-get install -y x11vnc xvfb firefox -RUN mkdir ~/.vnc -# Setup a password -RUN x11vnc -storepasswd 1234 ~/.vnc/passwd -# Autostart firefox (might not be the best way, but it does the trick) -RUN bash -c 'echo "firefox" >> /.bashrc' - -EXPOSE 5900 -CMD ["x11vnc", "-forever", "-usepw", "-create"] -``` - -``` -# Multiple images example -# -# VERSION 0.1 - -FROM ubuntu -RUN echo foo > bar -# Will output something like ===> 907ad6c2736f - -FROM ubuntu -RUN echo moo > oink -# Will output something like ===> 695d7793cbe4 - -# You᾿ll now have two images, 907ad6c2736f with /bar, and 695d7793cbe4 with -# /oink. -``` diff --git a/engine/reference/commandline/attach.md b/engine/reference/commandline/attach.md deleted file mode 100644 index b8b5631dea..0000000000 --- a/engine/reference/commandline/attach.md +++ /dev/null @@ -1,124 +0,0 @@ ---- -redirect_from: - - /reference/commandline/attach/ -description: The attach command description and usage -keywords: -- attach, running, container -title: docker attach ---- - -```markdown -Usage: docker attach [OPTIONS] CONTAINER - -Attach to a running container - -Options: - --detach-keys string Override the key sequence for detaching a container - --help Print usage - --no-stdin Do not attach STDIN - --sig-proxy Proxy all received signals to the process (default true) -``` - -The `docker attach` command allows you to attach to a running container using -the container's ID or name, either to view its ongoing output or to control it -interactively. You can attach to the same contained process multiple times -simultaneously, screen sharing style, or quickly view the progress of your -detached process. - -To stop a container, use `CTRL-c`. This key sequence sends `SIGKILL` to the -container. If `--sig-proxy` is true (the default),`CTRL-c` sends a `SIGINT` to -the container. You can detach from a container and leave it running using the - `CTRL-p CTRL-q` key sequence. - -> **Note:** -> A process running as PID 1 inside a container is treated specially by -> Linux: it ignores any signal with the default action. So, the process -> will not terminate on `SIGINT` or `SIGTERM` unless it is coded to do -> so. - -It is forbidden to redirect the standard input of a `docker attach` command -while attaching to a tty-enabled container (i.e.: launched with `-t`). - -While a client is connected to container's stdio using `docker attach`, Docker -uses a ~1MB memory buffer to maximize the throughput of the application. If -this buffer is filled, the speed of the API connection will start to have an -effect on the process output writing speed. This is similar to other -applications like SSH. Because of this, it is not recommended to run -performance critical applications that generate a lot of output in the -foreground over a slow client connection. Instead, users should use the -`docker logs` command to get access to the logs. - - -## Override the detach sequence - -If you want, you can configure an override the Docker key sequence for detach. -This is useful if the Docker default sequence conflicts with key sequence you -use for other applications. There are two ways to define your own detach key -sequence, as a per-container override or as a configuration property on your -entire configuration. - -To override the sequence for an individual container, use the -`--detach-keys=""` flag with the `docker attach` command. The format of -the `` is either a letter [a-Z], or the `ctrl-` combined with any of -the following: - -* `a-z` (a single lowercase alpha character ) -* `@` (at sign) -* `[` (left bracket) -* `\\` (two backward slashes) -* `_` (underscore) -* `^` (caret) - -These `a`, `ctrl-a`, `X`, or `ctrl-\\` values are all examples of valid key -sequences. To configure a different configuration default key sequence for all -containers, see [**Configuration file** section](cli.md#configuration-files). - -#### Examples - - $ docker run -d --name topdemo ubuntu /usr/bin/top -b - $ docker attach topdemo - top - 02:05:52 up 3:05, 0 users, load average: 0.01, 0.02, 0.05 - Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie - Cpu(s): 0.1%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st - Mem: 373572k total, 355560k used, 18012k free, 27872k buffers - Swap: 786428k total, 0k used, 786428k free, 221740k cached - - PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND - 1 root 20 0 17200 1116 912 R 0 0.3 0:00.03 top - - top - 02:05:55 up 3:05, 0 users, load average: 0.01, 0.02, 0.05 - Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie - Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st - Mem: 373572k total, 355244k used, 18328k free, 27872k buffers - Swap: 786428k total, 0k used, 786428k free, 221776k cached - - PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND - 1 root 20 0 17208 1144 932 R 0 0.3 0:00.03 top - - - top - 02:05:58 up 3:06, 0 users, load average: 0.01, 0.02, 0.05 - Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie - Cpu(s): 0.2%us, 0.3%sy, 0.0%ni, 99.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st - Mem: 373572k total, 355780k used, 17792k free, 27880k buffers - Swap: 786428k total, 0k used, 786428k free, 221776k cached - - PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND - 1 root 20 0 17208 1144 932 R 0 0.3 0:00.03 top - ^C$ - $ echo $? - 0 - $ docker ps -a | grep topdemo - 7998ac8581f9 ubuntu:14.04 "/usr/bin/top -b" 38 seconds ago Exited (0) 21 seconds ago topdemo - -And in this second example, you can see the exit code returned by the `bash` -process is returned by the `docker attach` command to its caller too: - - $ docker run --name test -d -it debian - 275c44472aebd77c926d4527885bb09f2f6db21d878c75f0a1c212c03d3bcfab - $ docker attach test - root@f38c87f2a42d:/# exit 13 - exit - $ echo $? - 13 - $ docker ps -a | grep test - 275c44472aeb debian:7 "/bin/bash" 26 seconds ago Exited (13) 17 seconds ago test diff --git a/engine/reference/commandline/build.md b/engine/reference/commandline/build.md deleted file mode 100644 index 581d12c203..0000000000 --- a/engine/reference/commandline/build.md +++ /dev/null @@ -1,409 +0,0 @@ ---- -redirect_from: - - /reference/commandline/build/ -description: The build command description and usage -keywords: -- build, docker, image -title: docker build ---- - -```markdown -Usage: docker build [OPTIONS] PATH | URL | - - -Build an image from a Dockerfile - -Options: - --build-arg value Set build-time variables (default []) - --cgroup-parent string Optional parent cgroup for the container - --cpu-period int Limit the CPU CFS (Completely Fair Scheduler) period - --cpu-quota int Limit the CPU CFS (Completely Fair Scheduler) quota - -c, --cpu-shares int CPU shares (relative weight) - --cpuset-cpus string CPUs in which to allow execution (0-3, 0,1) - --cpuset-mems string MEMs in which to allow execution (0-3, 0,1) - --disable-content-trust Skip image verification (default true) - -f, --file string Name of the Dockerfile (Default is 'PATH/Dockerfile') - --force-rm Always remove intermediate containers - --help Print usage - --isolation string Container isolation technology - --label value Set metadata for an image (default []) - -m, --memory string Memory limit - --memory-swap string Swap limit equal to memory plus swap: '-1' to enable unlimited swap - --no-cache Do not use cache when building the image - --pull Always attempt to pull a newer version of the image - -q, --quiet Suppress the build output and print image ID on success - --rm Remove intermediate containers after a successful build (default true) - --shm-size string Size of /dev/shm, default value is 64MB. - The format is ``. `number` must be greater than `0`. - Unit is optional and can be `b` (bytes), `k` (kilobytes), `m` (megabytes), - or `g` (gigabytes). If you omit the unit, the system uses bytes. - -t, --tag value Name and optionally a tag in the 'name:tag' format (default []) - --ulimit value Ulimit options (default []) -``` - -Builds Docker images from a Dockerfile and a "context". A build's context is -the files located in the specified `PATH` or `URL`. The build process can refer -to any of the files in the context. For example, your build can use an -[*ADD*](../builder.md#add) instruction to reference a file in the -context. - -The `URL` parameter can refer to three kinds of resources: Git repositories, -pre-packaged tarball contexts and plain text files. - -### Git repositories - -When the `URL` parameter points to the location of a Git repository, the -repository acts as the build context. The system recursively clones the -repository and its submodules using a `git clone --depth 1 --recursive` -command. This command runs in a temporary directory on your local host. After -the command succeeds, the directory is sent to the Docker daemon as the -context. Local clones give you the ability to access private repositories using -local user credentials, VPN's, and so forth. - -Git URLs accept context configuration in their fragment section, separated by a -colon `:`. The first part represents the reference that Git will check out, -this can be either a branch, a tag, or a commit SHA. The second part represents -a subdirectory inside the repository that will be used as a build context. - -For example, run this command to use a directory called `docker` in the branch -`container`: - -```bash -$ docker build https://github.com/docker/rootfs.git#container:docker -``` - -The following table represents all the valid suffixes with their build -contexts: - -Build Syntax Suffix | Commit Used | Build Context Used ---------------------------------|-----------------------|------------------- -`myrepo.git` | `refs/heads/master` | `/` -`myrepo.git#mytag` | `refs/tags/mytag` | `/` -`myrepo.git#mybranch` | `refs/heads/mybranch` | `/` -`myrepo.git#abcdef` | `sha1 = abcdef` | `/` -`myrepo.git#:myfolder` | `refs/heads/master` | `/myfolder` -`myrepo.git#master:myfolder` | `refs/heads/master` | `/myfolder` -`myrepo.git#mytag:myfolder` | `refs/tags/mytag` | `/myfolder` -`myrepo.git#mybranch:myfolder` | `refs/heads/mybranch` | `/myfolder` -`myrepo.git#abcdef:myfolder` | `sha1 = abcdef` | `/myfolder` - - -### Tarball contexts - -If you pass an URL to a remote tarball, the URL itself is sent to the daemon: - -Instead of specifying a context, you can pass a single Dockerfile in the `URL` -or pipe the file in via `STDIN`. To pipe a Dockerfile from `STDIN`: - -```bash -$ docker build http://server/context.tar.gz - -The download operation will be performed on the host the Docker daemon is -running on, which is not necessarily the same host from which the build command -is being issued. The Docker daemon will fetch `context.tar.gz` and use it as the -build context. Tarball contexts must be tar archives conforming to the standard -`tar` UNIX format and can be compressed with any one of the 'xz', 'bzip2', -'gzip' or 'identity' (no compression) formats. - -### Text files - -Instead of specifying a context, you can pass a single `Dockerfile` in the -`URL` or pipe the file in via `STDIN`. To pipe a `Dockerfile` from `STDIN`: - -```bash -$ docker build - < Dockerfile -``` - -With Powershell on Windows, you can run: - -```powershell -Get-Content Dockerfile | docker build - -``` - -If you use `STDIN` or specify a `URL` pointing to a plain text file, the system -places the contents into a file called `Dockerfile`, and any `-f`, `--file` -option is ignored. In this scenario, there is no context. - -By default the `docker build` command will look for a `Dockerfile` at the root -of the build context. The `-f`, `--file`, option lets you specify the path to -an alternative file to use instead. This is useful in cases where the same set -of files are used for multiple builds. The path must be to a file within the -build context. If a relative path is specified then it is interpreted as -relative to the root of the context. - -In most cases, it's best to put each Dockerfile in an empty directory. Then, -add to that directory only the files needed for building the Dockerfile. To -increase the build's performance, you can exclude files and directories by -adding a `.dockerignore` file to that directory as well. For information on -creating one, see the [.dockerignore file](../builder.md#dockerignore-file). - -If the Docker client loses connection to the daemon, the build is canceled. -This happens if you interrupt the Docker client with `CTRL-c` or if the Docker -client is killed for any reason. If the build initiated a pull which is still -running at the time the build is cancelled, the pull is cancelled as well. - -## Return code - -On a successful build, a return code of success `0` will be returned. When the -build fails, a non-zero failure code will be returned. - -There should be informational output of the reason for failure output to -`STDERR`: - -```bash -$ docker build -t fail . - -Sending build context to Docker daemon 2.048 kB -Sending build context to Docker daemon -Step 1 : FROM busybox - ---> 4986bf8c1536 -Step 2 : RUN exit 13 - ---> Running in e26670ec7a0a -INFO[0000] The command [/bin/sh -c exit 13] returned a non-zero code: 13 -$ echo $? -1 -``` - -See also: - -[*Dockerfile Reference*](../builder.md). - -## Examples - -### Build with PATH - -```bash -$ docker build . - -Uploading context 10240 bytes -Step 1 : FROM busybox -Pulling repository busybox - ---> e9aa60c60128MB/2.284 MB (100%) endpoint: https://cdn-registry-1.docker.io/v1/ -Step 2 : RUN ls -lh / - ---> Running in 9c9e81692ae9 -total 24 -drwxr-xr-x 2 root root 4.0K Mar 12 2013 bin -drwxr-xr-x 5 root root 4.0K Oct 19 00:19 dev -drwxr-xr-x 2 root root 4.0K Oct 19 00:19 etc -drwxr-xr-x 2 root root 4.0K Nov 15 23:34 lib -lrwxrwxrwx 1 root root 3 Mar 12 2013 lib64 -> lib -dr-xr-xr-x 116 root root 0 Nov 15 23:34 proc -lrwxrwxrwx 1 root root 3 Mar 12 2013 sbin -> bin -dr-xr-xr-x 13 root root 0 Nov 15 23:34 sys -drwxr-xr-x 2 root root 4.0K Mar 12 2013 tmp -drwxr-xr-x 2 root root 4.0K Nov 15 23:34 usr - ---> b35f4035db3f -Step 3 : CMD echo Hello world - ---> Running in 02071fceb21b - ---> f52f38b7823e -Successfully built f52f38b7823e -Removing intermediate container 9c9e81692ae9 -Removing intermediate container 02071fceb21b -``` - -This example specifies that the `PATH` is `.`, and so all the files in the -local directory get `tar`d and sent to the Docker daemon. The `PATH` specifies -where to find the files for the "context" of the build on the Docker daemon. -Remember that the daemon could be running on a remote machine and that no -parsing of the Dockerfile happens at the client side (where you're running -`docker build`). That means that *all* the files at `PATH` get sent, not just -the ones listed to [*ADD*](../builder.md#add) in the Dockerfile. - -The transfer of context from the local machine to the Docker daemon is what the -`docker` client means when you see the "Sending build context" message. - -If you wish to keep the intermediate containers after the build is complete, -you must use `--rm=false`. This does not affect the build cache. - -### Build with URL - -```bash -$ docker build github.com/creack/docker-firefox -``` - -This will clone the GitHub repository and use the cloned repository as context. -The Dockerfile at the root of the repository is used as Dockerfile. You can -specify an arbitrary Git repository by using the `git://` or `git@` scheme. - -```bash -$ docker build -f ctx/Dockerfile http://server/ctx.tar.gz - -Downloading context: http://server/ctx.tar.gz [===================>] 240 B/240 B -Step 1 : FROM busybox - ---> 8c2e06607696 -Step 2 : ADD ctx/container.cfg / - ---> e7829950cee3 -Removing intermediate container b35224abf821 -Step 3 : CMD /bin/ls - ---> Running in fbc63d321d73 - ---> 3286931702ad -Removing intermediate container fbc63d321d73 -Successfully built 377c409b35e4 -``` - -This sends the URL `http://server/ctx.tar.gz` to the Docker daemon, which -downloads and extracts the referenced tarball. The `-f ctx/Dockerfile` -parameter specifies a path inside `ctx.tar.gz` to the `Dockerfile` that is used -to build the image. Any `ADD` commands in that `Dockerfile` that refer to local -paths must be relative to the root of the contents inside `ctx.tar.gz`. In the -example above, the tarball contains a directory `ctx/`, so the `ADD -ctx/container.cfg /` operation works as expected. - -### Build with - - -```bash -$ docker build - < Dockerfile -``` - -This will read a Dockerfile from `STDIN` without context. Due to the lack of a -context, no contents of any local directory will be sent to the Docker daemon. -Since there is no context, a Dockerfile `ADD` only works if it refers to a -remote URL. - -```bash -$ docker build - < context.tar.gz -``` - -This will build an image for a compressed context read from `STDIN`. Supported -formats are: bzip2, gzip and xz. - -### Usage of .dockerignore - -```bash -$ docker build . - -Uploading context 18.829 MB -Uploading context -Step 1 : FROM busybox - ---> 769b9341d937 -Step 2 : CMD echo Hello world - ---> Using cache - ---> 99cc1ad10469 -Successfully built 99cc1ad10469 -$ echo ".git" > .dockerignore -$ docker build . -Uploading context 6.76 MB -Uploading context -Step 1 : FROM busybox - ---> 769b9341d937 -Step 2 : CMD echo Hello world - ---> Using cache - ---> 99cc1ad10469 -Successfully built 99cc1ad10469 -``` - -This example shows the use of the `.dockerignore` file to exclude the `.git` -directory from the context. Its effect can be seen in the changed size of the -uploaded context. The builder reference contains detailed information on -[creating a .dockerignore file](../builder.md#dockerignore-file) - -### Tag image (-t) - -```bash -$ docker build -t vieux/apache:2.0 . -``` - -This will build like the previous example, but it will then tag the resulting -image. The repository name will be `vieux/apache` and the tag will be `2.0`. -[Read more about valid tags](tag.md). - -You can apply multiple tags to an image. For example, you can apply the `latest` -tag to a newly built image and add another tag that references a specific -version. -For example, to tag an image both as `whenry/fedora-jboss:latest` and -`whenry/fedora-jboss:v2.1`, use the following: - -```bash -$ docker build -t whenry/fedora-jboss:latest -t whenry/fedora-jboss:v2.1 . -``` -### Specify Dockerfile (-f) - -```bash -$ docker build -f Dockerfile.debug . -``` - -This will use a file called `Dockerfile.debug` for the build instructions -instead of `Dockerfile`. - -```bash -$ docker build -f dockerfiles/Dockerfile.debug -t myapp_debug . -$ docker build -f dockerfiles/Dockerfile.prod -t myapp_prod . -``` - -The above commands will build the current build context (as specified by the -`.`) twice, once using a debug version of a `Dockerfile` and once using a -production version. - -```bash -$ cd /home/me/myapp/some/dir/really/deep -$ docker build -f /home/me/myapp/dockerfiles/debug /home/me/myapp -$ docker build -f ../../../../dockerfiles/debug /home/me/myapp -``` - -These two `docker build` commands do the exact same thing. They both use the -contents of the `debug` file instead of looking for a `Dockerfile` and will use -`/home/me/myapp` as the root of the build context. Note that `debug` is in the -directory structure of the build context, regardless of how you refer to it on -the command line. - -> **Note:** -> `docker build` will return a `no such file or directory` error if the -> file or directory does not exist in the uploaded context. This may -> happen if there is no context, or if you specify a file that is -> elsewhere on the Host system. The context is limited to the current -> directory (and its children) for security reasons, and to ensure -> repeatable builds on remote Docker hosts. This is also the reason why -> `ADD ../file` will not work. - -### Optional parent cgroup (--cgroup-parent) - -When `docker build` is run with the `--cgroup-parent` option the containers -used in the build will be run with the [corresponding `docker run` -flag](../run.md#specifying-custom-cgroups). - -### Set ulimits in container (--ulimit) - -Using the `--ulimit` option with `docker build` will cause each build step's -container to be started using those [`--ulimit` -flag values](./run.md#set-ulimits-in-container-ulimit). - -### Set build-time variables (--build-arg) - -You can use `ENV` instructions in a Dockerfile to define variable -values. These values persist in the built image. However, often -persistence is not what you want. Users want to specify variables differently -depending on which host they build an image on. - -A good example is `http_proxy` or source versions for pulling intermediate -files. The `ARG` instruction lets Dockerfile authors define values that users -can set at build-time using the `--build-arg` flag: - -```bash -$ docker build --build-arg HTTP_PROXY=http://10.20.30.2:1234 . -``` - -This flag allows you to pass the build-time variables that are -accessed like regular environment variables in the `RUN` instruction of the -Dockerfile. Also, these values don't persist in the intermediate or final images -like `ENV` values do. - -Using this flag will not alter the output you see when the `ARG` lines from the -Dockerfile are echoed during the build process. - -For detailed information on using `ARG` and `ENV` instructions, see the -[Dockerfile reference](../builder.md). - -### Specify isolation technology for container (--isolation) - -This option is useful in situations where you are running Docker containers on -Windows. The `--isolation=` option sets a container's isolation -technology. On Linux, the only supported is the `default` option which uses -Linux namespaces. On Microsoft Windows, you can specify these values: - - -| Value | Description | -|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `default` | Use the value specified by the Docker daemon's `--exec-opt` . If the `daemon` does not specify an isolation technology, Microsoft Windows uses `process` as its default value. | -| `process` | Namespace isolation only. | -| `hyperv` | Hyper-V hypervisor partition-based isolation. | - -Specifying the `--isolation` flag without a value is the same as setting `--isolation="default"`. diff --git a/engine/reference/commandline/cli.md b/engine/reference/commandline/cli.md deleted file mode 100644 index 99d39cafb4..0000000000 --- a/engine/reference/commandline/cli.md +++ /dev/null @@ -1,222 +0,0 @@ ---- -redirect_from: - - /reference/commandline/cli/ -description: Docker's CLI command description and usage -keywords: -- Docker, Docker documentation, CLI, command line -title: Use the Docker Engine command-line ---- - -To list available commands, either run `docker` with no parameters -or execute `docker help`: - -```bash -$ docker -Usage: docker [OPTIONS] COMMAND [arg...] - docker [ --help | -v | --version ] - -A self-sufficient runtime for containers. - -Options: - - --config=~/.docker Location of client config files - -D, --debug Enable debug mode - -H, --host=[] Daemon socket(s) to connect to - -h, --help Print usage - -l, --log-level=info Set the logging level - --tls Use TLS; implied by --tlsverify - --tlscacert=~/.docker/ca.pem Trust certs signed only by this CA - --tlscert=~/.docker/cert.pem Path to TLS certificate file - --tlskey=~/.docker/key.pem Path to TLS key file - --tlsverify Use TLS and verify the remote - -v, --version Print version information and quit - -Commands: - attach Attach to a running container - # […] -``` - -Depending on your Docker system configuration, you may be required to preface -each `docker` command with `sudo`. To avoid having to use `sudo` with the -`docker` command, your system administrator can create a Unix group called -`docker` and add users to it. - -For more information about installing Docker or `sudo` configuration, refer to -the [installation](../../installation/index.md) instructions for your operating system. - -## Environment variables - -For easy reference, the following list of environment variables are supported -by the `docker` command line: - -* `DOCKER_API_VERSION` The API version to use (e.g. `1.19`) -* `DOCKER_CONFIG` The location of your client configuration files. -* `DOCKER_CERT_PATH` The location of your authentication keys. -* `DOCKER_DRIVER` The graph driver to use. -* `DOCKER_HOST` Daemon socket to connect to. -* `DOCKER_NOWARN_KERNEL_VERSION` Prevent warnings that your Linux kernel is - unsuitable for Docker. -* `DOCKER_RAMDISK` If set this will disable 'pivot_root'. -* `DOCKER_TLS_VERIFY` When set Docker uses TLS and verifies the remote. -* `DOCKER_CONTENT_TRUST` When set Docker uses notary to sign and verify images. - Equates to `--disable-content-trust=false` for build, create, pull, push, run. -* `DOCKER_CONTENT_TRUST_SERVER` The URL of the Notary server to use. This defaults - to the same URL as the registry. -* `DOCKER_TMPDIR` Location for temporary Docker files. - -Because Docker is developed using 'Go', you can also use any environment -variables used by the 'Go' runtime. In particular, you may find these useful: - -* `HTTP_PROXY` -* `HTTPS_PROXY` -* `NO_PROXY` - -These Go environment variables are case-insensitive. See the -[Go specification](http://golang.org/pkg/net/http/) for details on these -variables. - -## Configuration files - -By default, the Docker command line stores its configuration files in a -directory called `.docker` within your `$HOME` directory. However, you can -specify a different location via the `DOCKER_CONFIG` environment variable -or the `--config` command line option. If both are specified, then the -`--config` option overrides the `DOCKER_CONFIG` environment variable. -For example: - - docker --config ~/testconfigs/ ps - -Instructs Docker to use the configuration files in your `~/testconfigs/` -directory when running the `ps` command. - -Docker manages most of the files in the configuration directory -and you should not modify them. However, you *can modify* the -`config.json` file to control certain aspects of how the `docker` -command behaves. - -Currently, you can modify the `docker` command behavior using environment -variables or command-line options. You can also use options within -`config.json` to modify some of the same behavior. When using these -mechanisms, you must keep in mind the order of precedence among them. Command -line options override environment variables and environment variables override -properties you specify in a `config.json` file. - -The `config.json` file stores a JSON encoding of several properties: - -The property `HttpHeaders` specifies a set of headers to include in all messages -sent from the Docker client to the daemon. Docker does not try to interpret or -understand these header; it simply puts them into the messages. Docker does -not allow these headers to change any headers it sets for itself. - -The property `psFormat` specifies the default format for `docker ps` output. -When the `--format` flag is not provided with the `docker ps` command, -Docker's client uses this property. If this property is not set, the client -falls back to the default table format. For a list of supported formatting -directives, see the -[**Formatting** section in the `docker ps` documentation](ps.md) - -Once attached to a container, users detach from it and leave it running using -the using `CTRL-p CTRL-q` key sequence. This detach key sequence is customizable -using the `detachKeys` property. Specify a `` value for the -property. The format of the `` is a comma-separated list of either -a letter [a-Z], or the `ctrl-` combined with any of the following: - -* `a-z` (a single lowercase alpha character ) -* `@` (at sign) -* `[` (left bracket) -* `\\` (two backward slashes) -* `_` (underscore) -* `^` (caret) - -Your customization applies to all containers started in with your Docker client. -Users can override your custom or the default key sequence on a per-container -basis. To do this, the user specifies the `--detach-keys` flag with the `docker -attach`, `docker exec`, `docker run` or `docker start` command. - -The property `imagesFormat` specifies the default format for `docker images` output. -When the `--format` flag is not provided with the `docker images` command, -Docker's client uses this property. If this property is not set, the client -falls back to the default table format. For a list of supported formatting -directives, see the [**Formatting** section in the `docker images` documentation](images.md) - -Following is a sample `config.json` file: - - {% raw %} - { - "HttpHeaders": { - "MyHeader": "MyValue" - }, - "psFormat": "table {{.ID}}\\t{{.Image}}\\t{{.Command}}\\t{{.Labels}}", - "imagesFormat": "table {{.ID}}\\t{{.Repository}}\\t{{.Tag}}\\t{{.CreatedAt}}", - "detachKeys": "ctrl-e,e" - } - {% endraw %} - -### Notary - -If using your own notary server and a self-signed certificate or an internal -Certificate Authority, you need to place the certificate at -`tls//ca.crt` in your docker config directory. - -Alternatively you can trust the certificate globally by adding it to your system's -list of root Certificate Authorities. - -## Help - -To list the help on any command just execute the command, followed by the -`--help` option. - - $ docker run --help - - Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] - - Run a command in a new container - - -a, --attach=[] Attach to STDIN, STDOUT or STDERR - --cpu-shares=0 CPU shares (relative weight) - ... - -## Option types - -Single character command line options can be combined, so rather than -typing `docker run -i -t --name test busybox sh`, -you can write `docker run -it --name test busybox sh`. - -### Boolean - -Boolean options take the form `-d=false`. The value you see in the help text is -the default value which is set if you do **not** specify that flag. If you -specify a Boolean flag without a value, this will set the flag to `true`, -irrespective of the default value. - -For example, running `docker run -d` will set the value to `true`, so your -container **will** run in "detached" mode, in the background. - -Options which default to `true` (e.g., `docker build --rm=true`) can only be -set to the non-default value by explicitly setting them to `false`: - - $ docker build --rm=false . - -### Multi - -You can specify options like `-a=[]` multiple times in a single command line, -for example in these commands: - - $ docker run -a stdin -a stdout -i -t ubuntu /bin/bash - $ docker run -a stdin -a stdout -a stderr ubuntu /bin/ls - -Sometimes, multiple options can call for a more complex value string as for -`-v`: - - $ docker run -v /host:/container example/mysql - -> **Note:** -> Do not use the `-t` and `-a stderr` options together due to -> limitations in the `pty` implementation. All `stderr` in `pty` mode -> simply goes to `stdout`. - -### Strings and Integers - -Options like `--name=""` expect a string, and they -can only be specified once. Options like `-c=0` -expect an integer, and they can only be specified once. diff --git a/engine/reference/commandline/commit.md b/engine/reference/commandline/commit.md deleted file mode 100644 index d7d24400f4..0000000000 --- a/engine/reference/commandline/commit.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -redirect_from: - - /reference/commandline/commit/ -description: The commit command description and usage -keywords: -- commit, file, changes -title: docker commit ---- - -```markdown -Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] - -Create a new image from a container's changes - -Options: - -a, --author string Author (e.g., "John Hannibal Smith ") - -c, --change value Apply Dockerfile instruction to the created image (default []) - --help Print usage - -m, --message string Commit message - -p, --pause Pause container during commit (default true) -``` - -It can be useful to commit a container's file changes or settings into a new -image. This allows you debug a container by running an interactive shell, or to -export a working dataset to another server. Generally, it is better to use -Dockerfiles to manage your images in a documented and maintainable way. -[Read more about valid image names and tags](tag.md). - -The commit operation will not include any data contained in -volumes mounted inside the container. - -By default, the container being committed and its processes will be paused -while the image is committed. This reduces the likelihood of encountering data -corruption during the process of creating the commit. If this behavior is -undesired, set the `--pause` option to false. - -The `--change` option will apply `Dockerfile` instructions to the image that is -created. Supported `Dockerfile` instructions: -`CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`LABEL`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR` - -## Commit a container - - $ docker ps - ID IMAGE COMMAND CREATED STATUS PORTS - c3f279d17e0a ubuntu:12.04 /bin/bash 7 days ago Up 25 hours - 197387f1b436 ubuntu:12.04 /bin/bash 7 days ago Up 25 hours - $ docker commit c3f279d17e0a svendowideit/testimage:version3 - f5283438590d - $ docker images - REPOSITORY TAG ID CREATED SIZE - svendowideit/testimage version3 f5283438590d 16 seconds ago 335.7 MB - -## Commit a container with new configurations - - {% raw %} - $ docker ps - ID IMAGE COMMAND CREATED STATUS PORTS - c3f279d17e0a ubuntu:12.04 /bin/bash 7 days ago Up 25 hours - 197387f1b436 ubuntu:12.04 /bin/bash 7 days ago Up 25 hours - $ docker inspect -f "{{ .Config.Env }}" c3f279d17e0a - [HOME=/ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin] - $ docker commit --change "ENV DEBUG true" c3f279d17e0a svendowideit/testimage:version3 - f5283438590d - $ docker inspect -f "{{ .Config.Env }}" f5283438590d - [HOME=/ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin DEBUG=true] - {% endraw %} - -## Commit a container with new `CMD` and `EXPOSE` instructions - - $ docker ps - ID IMAGE COMMAND CREATED STATUS PORTS - c3f279d17e0a ubuntu:12.04 /bin/bash 7 days ago Up 25 hours - 197387f1b436 ubuntu:12.04 /bin/bash 7 days ago Up 25 hours - - $ docker commit --change='CMD ["apachectl", "-DFOREGROUND"]' -c "EXPOSE 80" c3f279d17e0a svendowideit/testimage:version4 - f5283438590d - - $ docker run -d svendowideit/testimage:version4 - 89373736e2e7f00bc149bd783073ac43d0507da250e999f3f1036e0db60817c0 - - $ docker ps - ID IMAGE COMMAND CREATED STATUS PORTS - 89373736e2e7 testimage:version4 "apachectl -DFOREGROU" 3 seconds ago Up 2 seconds 80/tcp - c3f279d17e0a ubuntu:12.04 /bin/bash 7 days ago Up 25 hours - 197387f1b436 ubuntu:12.04 /bin/bash 7 days ago Up 25 hours diff --git a/engine/reference/commandline/cp.md b/engine/reference/commandline/cp.md deleted file mode 100644 index eaec5a3d2b..0000000000 --- a/engine/reference/commandline/cp.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -redirect_from: - - /reference/commandline/cp/ -description: The cp command description and usage -keywords: -- copy, container, files, folders -title: docker cp ---- - -```markdown -Usage: docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- - docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH - -Copy files/folders between a container and the local filesystem - -Use '-' as the source to read a tar archive from stdin -and extract it to a directory destination in a container. -Use '-' as the destination to stream a tar archive of a -container source to stdout. - -Options: - -L, --follow-link Always follow symbol link in SRC_PATH - --help Print usage -``` - -The `docker cp` utility copies the contents of `SRC_PATH` to the `DEST_PATH`. -You can copy from the container's file system to the local machine or the -reverse, from the local filesystem to the container. If `-` is specified for -either the `SRC_PATH` or `DEST_PATH`, you can also stream a tar archive from -`STDIN` or to `STDOUT`. The `CONTAINER` can be a running or stopped container. -The `SRC_PATH` or `DEST_PATH` can be a file or directory. - -The `docker cp` command assumes container paths are relative to the container's -`/` (root) directory. This means supplying the initial forward slash is optional; -The command sees `compassionate_darwin:/tmp/foo/myfile.txt` and -`compassionate_darwin:tmp/foo/myfile.txt` as identical. Local machine paths can -be an absolute or relative value. The command interprets a local machine's -relative paths as relative to the current working directory where `docker cp` is -run. - -The `cp` command behaves like the Unix `cp -a` command in that directories are -copied recursively with permissions preserved if possible. Ownership is set to -the user and primary group at the destination. For example, files copied to a -container are created with `UID:GID` of the root user. Files copied to the local -machine are created with the `UID:GID` of the user which invoked the `docker cp` -command. If you specify the `-L` option, `docker cp` follows any symbolic link -in the `SRC_PATH`. `docker cp` does *not* create parent directories for -`DEST_PATH` if they do not exist. - -Assuming a path separator of `/`, a first argument of `SRC_PATH` and second -argument of `DEST_PATH`, the behavior is as follows: - -- `SRC_PATH` specifies a file - - `DEST_PATH` does not exist - - the file is saved to a file created at `DEST_PATH` - - `DEST_PATH` does not exist and ends with `/` - - Error condition: the destination directory must exist. - - `DEST_PATH` exists and is a file - - the destination is overwritten with the source file's contents - - `DEST_PATH` exists and is a directory - - the file is copied into this directory using the basename from - `SRC_PATH` -- `SRC_PATH` specifies a directory - - `DEST_PATH` does not exist - - `DEST_PATH` is created as a directory and the *contents* of the source - directory are copied into this directory - - `DEST_PATH` exists and is a file - - Error condition: cannot copy a directory to a file - - `DEST_PATH` exists and is a directory - - `SRC_PATH` does not end with `/.` - - the source directory is copied into this directory - - `SRC_PATH` does end with `/.` - - the *content* of the source directory is copied into this - directory - -The command requires `SRC_PATH` and `DEST_PATH` to exist according to the above -rules. If `SRC_PATH` is local and is a symbolic link, the symbolic link, not -the target, is copied by default. To copy the link target and not the link, specify -the `-L` option. - -A colon (`:`) is used as a delimiter between `CONTAINER` and its path. You can -also use `:` when specifying paths to a `SRC_PATH` or `DEST_PATH` on a local -machine, for example `file:name.txt`. If you use a `:` in a local machine path, -you must be explicit with a relative or absolute path, for example: - - `/path/to/file:name.txt` or `./file:name.txt` - -It is not possible to copy certain system files such as resources under -`/proc`, `/sys`, `/dev`, [tmpfs](run.md#mount-tmpfs-tmpfs), and mounts created by -the user in the container. However, you can still copy such files by manually -running `tar` in `docker exec`. For example (consider `SRC_PATH` and `DEST_PATH` -are directories): - - $ docker exec foo tar Ccf $(dirname SRC_PATH) - $(basename SRC_PATH) | tar Cxf DEST_PATH - - -or - - $ tar Ccf $(dirname SRC_PATH) - $(basename SRC_PATH) | docker exec -i foo tar Cxf DEST_PATH - - - -Using `-` as the `SRC_PATH` streams the contents of `STDIN` as a tar archive. -The command extracts the content of the tar to the `DEST_PATH` in container's -filesystem. In this case, `DEST_PATH` must specify a directory. Using `-` as -the `DEST_PATH` streams the contents of the resource as a tar archive to `STDOUT`. diff --git a/engine/reference/commandline/create.md b/engine/reference/commandline/create.md deleted file mode 100644 index e5efb92c9c..0000000000 --- a/engine/reference/commandline/create.md +++ /dev/null @@ -1,188 +0,0 @@ ---- -redirect_from: - - /reference/commandline/create/ -description: The create command description and usage -keywords: -- docker, create, container -title: docker create ---- - -Creates a new container. - -```markdown -Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG...] - -Create a new container - -Options: - --add-host value Add a custom host-to-IP mapping (host:ip) (default []) - -a, --attach value Attach to STDIN, STDOUT or STDERR (default []) - --blkio-weight value Block IO (relative weight), between 10 and 1000 - --blkio-weight-device value Block IO weight (relative device weight) (default []) - --cap-add value Add Linux capabilities (default []) - --cap-drop value Drop Linux capabilities (default []) - --cgroup-parent string Optional parent cgroup for the container - --cidfile string Write the container ID to the file - --cpu-percent int CPU percent (Windows only) - --cpu-period int Limit CPU CFS (Completely Fair Scheduler) period - --cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota - -c, --cpu-shares int CPU shares (relative weight) - --cpuset-cpus string CPUs in which to allow execution (0-3, 0,1) - --cpuset-mems string MEMs in which to allow execution (0-3, 0,1) - --device value Add a host device to the container (default []) - --device-read-bps value Limit read rate (bytes per second) from a device (default []) - --device-read-iops value Limit read rate (IO per second) from a device (default []) - --device-write-bps value Limit write rate (bytes per second) to a device (default []) - --device-write-iops value Limit write rate (IO per second) to a device (default []) - --disable-content-trust Skip image verification (default true) - --dns value Set custom DNS servers (default []) - --dns-opt value Set DNS options (default []) - --dns-search value Set custom DNS search domains (default []) - --entrypoint string Overwrite the default ENTRYPOINT of the image - -e, --env value Set environment variables (default []) - --env-file value Read in a file of environment variables (default []) - --expose value Expose a port or a range of ports (default []) - --group-add value Add additional groups to join (default []) - --health-cmd string Command to run to check health - --health-interval duration Time between running the check - --health-retries int Consecutive failures needed to report unhealthy - --health-timeout duration Maximum time to allow one check to run - --help Print usage - -h, --hostname string Container host name - -i, --interactive Keep STDIN open even if not attached - --io-maxbandwidth string Maximum IO bandwidth limit for the system drive (Windows only) - --io-maxiops uint Maximum IOps limit for the system drive (Windows only) - --ip string Container IPv4 address (e.g. 172.30.100.104) - --ip6 string Container IPv6 address (e.g. 2001:db8::33) - --ipc string IPC namespace to use - --isolation string Container isolation technology - --kernel-memory string Kernel memory limit - -l, --label value Set meta data on a container (default []) - --label-file value Read in a line delimited file of labels (default []) - --link value Add link to another container (default []) - --link-local-ip value Container IPv4/IPv6 link-local addresses (default []) - --log-driver string Logging driver for the container - --log-opt value Log driver options (default []) - --mac-address string Container MAC address (e.g. 92:d0:c6:0a:29:33) - -m, --memory string Memory limit - --memory-reservation string Memory soft limit - --memory-swap string Swap limit equal to memory plus swap: '-1' to enable unlimited swap - --memory-swappiness int Tune container memory swappiness (0 to 100) (default -1) - --name string Assign a name to the container - --network-alias value Add network-scoped alias for the container (default []) - --network string Connect a container to a network (default "default") - 'bridge': create a network stack on the default Docker bridge - 'none': no networking - 'container:': reuse another container's network stack - 'host': use the Docker host network stack - '|': connect to a user-defined network - --no-healthcheck Disable any container-specified HEALTHCHECK - --oom-kill-disable Disable OOM Killer - --oom-score-adj int Tune host's OOM preferences (-1000 to 1000) - --pid string PID namespace to use - --pids-limit int Tune container pids limit (set -1 for unlimited), kernel >= 4.3 - --privileged Give extended privileges to this container - -p, --publish value Publish a container's port(s) to the host (default []) - -P, --publish-all Publish all exposed ports to random ports - --read-only Mount the container's root filesystem as read only - --restart string Restart policy to apply when a container exits (default "no") - Possible values are: no, on-failure[:max-retry], always, unless-stopped - --runtime string Runtime to use for this container - --security-opt value Security Options (default []) - --shm-size string Size of /dev/shm, default value is 64MB. - The format is ``. `number` must be greater than `0`. - Unit is optional and can be `b` (bytes), `k` (kilobytes), `m` (megabytes), - or `g` (gigabytes). If you omit the unit, the system uses bytes. - --stop-signal string Signal to stop a container, SIGTERM by default (default "SIGTERM") - --storage-opt value Storage driver options for the container (default []) - --sysctl value Sysctl options (default map[]) - --tmpfs value Mount a tmpfs directory (default []) - -t, --tty Allocate a pseudo-TTY - --ulimit value Ulimit options (default []) - -u, --user string Username or UID (format: [:]) - --userns string User namespace to use - 'host': Use the Docker host user namespace - '': Use the Docker daemon user namespace specified by `--userns-remap` option. - --uts string UTS namespace to use - -v, --volume value Bind mount a volume (default []). The format - is `[host-src:]container-dest[:]`. - The comma-delimited `options` are [rw|ro], - [z|Z], [[r]shared|[r]slave|[r]private], and - [nocopy]. The 'host-src' is an absolute path - or a name value. - --volume-driver string Optional volume driver for the container - --volumes-from value Mount volumes from the specified container(s) (default []) - -w, --workdir string Working directory inside the container -``` - -The `docker create` command creates a writeable container layer over the -specified image and prepares it for running the specified command. The -container ID is then printed to `STDOUT`. This is similar to `docker run -d` -except the container is never started. You can then use the -`docker start ` command to start the container at any point. - -This is useful when you want to set up a container configuration ahead of time -so that it is ready to start when you need it. The initial status of the -new container is `created`. - -Please see the [run command](run.md) section and the [Docker run reference](../run.md) for more details. - -## Examples - - $ docker create -t -i fedora bash - 6d8af538ec541dd581ebc2a24153a28329acb5268abe5ef868c1f1a261221752 - $ docker start -a -i 6d8af538ec5 - bash-4.2# - -As of v1.4.0 container volumes are initialized during the `docker create` phase -(i.e., `docker run` too). For example, this allows you to `create` the `data` -volume container, and then use it from another container: - - $ docker create -v /data --name data ubuntu - 240633dfbb98128fa77473d3d9018f6123b99c454b3251427ae190a7d951ad57 - $ docker run --rm --volumes-from data ubuntu ls -la /data - total 8 - drwxr-xr-x 2 root root 4096 Dec 5 04:10 . - drwxr-xr-x 48 root root 4096 Dec 5 04:11 .. - -Similarly, `create` a host directory bind mounted volume container, which can -then be used from the subsequent container: - - $ docker create -v /home/docker:/docker --name docker ubuntu - 9aa88c08f319cd1e4515c3c46b0de7cc9aa75e878357b1e96f91e2c773029f03 - $ docker run --rm --volumes-from docker ubuntu ls -la /docker - total 20 - drwxr-sr-x 5 1000 staff 180 Dec 5 04:00 . - drwxr-xr-x 48 root root 4096 Dec 5 04:13 .. - -rw-rw-r-- 1 1000 staff 3833 Dec 5 04:01 .ash_history - -rw-r--r-- 1 1000 staff 446 Nov 28 11:51 .ashrc - -rw-r--r-- 1 1000 staff 25 Dec 5 04:00 .gitconfig - drwxr-sr-x 3 1000 staff 60 Dec 1 03:28 .local - -rw-r--r-- 1 1000 staff 920 Nov 28 11:51 .profile - drwx--S--- 2 1000 staff 460 Dec 5 00:51 .ssh - drwxr-xr-x 32 1000 staff 1140 Dec 5 04:01 docker - -Set storage driver options per container. - - $ docker create -it --storage-opt size=120G fedora /bin/bash - -This (size) will allow to set the container rootfs size to 120G at creation time. -User cannot pass a size less than the Default BaseFS Size. This option is only -available for the `devicemapper`, `btrfs`, and `zfs` graph drivers. - -### Specify isolation technology for container (--isolation) - -This option is useful in situations where you are running Docker containers on -Windows. The `--isolation=` option sets a container's isolation -technology. On Linux, the only supported is the `default` option which uses -Linux namespaces. On Microsoft Windows, you can specify these values: - - -| Value | Description | -|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `default` | Use the value specified by the Docker daemon's `--exec-opt` . If the `daemon` does not specify an isolation technology, Microsoft Windows uses `process` as its default value if the -daemon is running on Windows server, or `hyperv` if running on Windows client. | -| `process` | Namespace isolation only. | -| `hyperv` | Hyper-V hypervisor partition-based isolation. | - -Specifying the `--isolation` flag without a value is the same as setting `--isolation="default"`. diff --git a/engine/reference/commandline/deploy.md b/engine/reference/commandline/deploy.md deleted file mode 100644 index 34cf39882f..0000000000 --- a/engine/reference/commandline/deploy.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -redirect_from: - - /reference/commandline/deploy/ -advisory: experimental -description: The deploy command description and usage -keywords: -- stack, deploy -title: docker deploy ---- - -```markdown -Usage: docker deploy [OPTIONS] STACK - -Create and update a stack from a Distributed Application Bundle (DAB) - -Options: - --file string Path to a Distributed Application Bundle file (Default: STACK.dab) - --help Print usage - --with-registry-auth Send registry authentication details to swarm agents -``` - -Create and update a stack from a `dab` file. This command has to be -run targeting a manager node. - -```bash -$ docker deploy vossibility-stack -Loading bundle from vossibility-stack.dab -Creating service vossibility-stack_elasticsearch -Creating service vossibility-stack_kibana -Creating service vossibility-stack_logstash -Creating service vossibility-stack_lookupd -Creating service vossibility-stack_nsqd -Creating service vossibility-stack_vossibility-collector -``` - -You can verify that the services were correctly created: - -```bash -$ docker service ls -ID NAME REPLICAS IMAGE -COMMAND -29bv0vnlm903 vossibility-stack_lookupd 1 nsqio/nsq@sha256:eeba05599f31eba418e96e71e0984c3dc96963ceb66924dd37a47bf7ce18a662 /nsqlookupd -4awt47624qwh vossibility-stack_nsqd 1 nsqio/nsq@sha256:eeba05599f31eba418e96e71e0984c3dc96963ceb66924dd37a47bf7ce18a662 /nsqd --data-path=/data --lookupd-tcp-address=lookupd:4160 -4tjx9biia6fs vossibility-stack_elasticsearch 1 elasticsearch@sha256:12ac7c6af55d001f71800b83ba91a04f716e58d82e748fa6e5a7359eed2301aa -7563uuzr9eys vossibility-stack_kibana 1 kibana@sha256:6995a2d25709a62694a937b8a529ff36da92ebee74bafd7bf00e6caf6db2eb03 -9gc5m4met4he vossibility-stack_logstash 1 logstash@sha256:2dc8bddd1bb4a5a34e8ebaf73749f6413c101b2edef6617f2f7713926d2141fe logstash -f /etc/logstash/conf.d/logstash.conf -axqh55ipl40h vossibility-stack_vossibility-collector 1 icecrime/vossibility-collector@sha256:f03f2977203ba6253988c18d04061c5ec7aab46bca9dfd89a9a1fa4500989fba --config /config/config.toml --debug -``` - -## Related information - -* [stack config](stack_config.md) -* [stack deploy](stack_deploy.md) -* [stack rm](stack_rm.md) -* [stack tasks](stack_tasks.md) diff --git a/engine/reference/commandline/diff.md b/engine/reference/commandline/diff.md deleted file mode 100644 index 4c82767bc1..0000000000 --- a/engine/reference/commandline/diff.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -redirect_from: - - /reference/commandline/diff/ -description: The diff command description and usage -keywords: -- list, changed, files, container -title: docker diff ---- - -```markdown -Usage: docker diff CONTAINER - -Inspect changes on a container's filesystem - -Options: - --help Print usage -``` - -List the changed files and directories in a container᾿s filesystem - There are 3 events that are listed in the `diff`: - -1. `A` - Add -2. `D` - Delete -3. `C` - Change - -For example: - - $ docker diff 7bb0e258aefe - - C /dev - A /dev/kmsg - C /etc - A /etc/mtab - A /go - A /go/src - A /go/src/github.com - A /go/src/github.com/docker - A /go/src/github.com/docker/docker - A /go/src/github.com/docker/docker/.git - .... diff --git a/engine/reference/commandline/docker_images.gif b/engine/reference/commandline/docker_images.gif deleted file mode 100644 index 5894ca270e002758b8f332141e00356e42868880..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35785 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 **Note:** -> If you're using an HTTPS encrypted socket, keep in mind that only -> TLS1.0 and greater are supported. Protocols SSLv3 and under are not -> supported anymore for security reasons. - -On Systemd based systems, you can communicate with the daemon via -[Systemd socket activation](http://0pointer.de/blog/projects/socket-activation.html), -use `dockerd -H fd://`. Using `fd://` will work perfectly for most setups but -you can also specify individual sockets: `dockerd -H fd://3`. If the -specified socket activated files aren't found, then Docker will exit. You can -find examples of using Systemd socket activation with Docker and Systemd in the -[Docker source tree](https://github.com/docker/docker/tree/master/contrib/init/systemd/). - -You can configure the Docker daemon to listen to multiple sockets at the same -time using multiple `-H` options: - -```bash -# listen using the default unix socket, and on 2 specific IP addresses on this host. -$ sudo dockerd -H unix:///var/run/docker.sock -H tcp://192.168.59.106 -H tcp://10.10.10.2 -``` - -The Docker client will honor the `DOCKER_HOST` environment variable to set the -`-H` flag for the client. - -```bash -$ docker -H tcp://0.0.0.0:2375 ps -# or -$ export DOCKER_HOST="tcp://0.0.0.0:2375" -$ docker ps -# both are equal -``` - -Setting the `DOCKER_TLS_VERIFY` environment variable to any value other than -the empty string is equivalent to setting the `--tlsverify` flag. The following -are equivalent: - -```bash -$ docker --tlsverify ps -# or -$ export DOCKER_TLS_VERIFY=1 -$ docker ps -``` - -The Docker client will honor the `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY` -environment variables (or the lowercase versions thereof). `HTTPS_PROXY` takes -precedence over `HTTP_PROXY`. - -### Bind Docker to another host/port or a Unix socket - -> **Warning**: -> Changing the default `docker` daemon binding to a -> TCP port or Unix *docker* user group will increase your security risks -> by allowing non-root users to gain *root* access on the host. Make sure -> you control access to `docker`. If you are binding -> to a TCP port, anyone with access to that port has full Docker access; -> so it is not advisable on an open network. - -With `-H` it is possible to make the Docker daemon to listen on a -specific IP and port. By default, it will listen on -`unix:///var/run/docker.sock` to allow only local connections by the -*root* user. You *could* set it to `0.0.0.0:2375` or a specific host IP -to give access to everybody, but that is **not recommended** because -then it is trivial for someone to gain root access to the host where the -daemon is running. - -Similarly, the Docker client can use `-H` to connect to a custom port. -The Docker client will default to connecting to `unix:///var/run/docker.sock` -on Linux, and `tcp://127.0.0.1:2376` on Windows. - -`-H` accepts host and port assignment in the following format: - - tcp://[host]:[port][path] or unix://path - -For example: - -- `tcp://` -> TCP connection to `127.0.0.1` on either port `2376` when TLS encryption - is on, or port `2375` when communication is in plain text. -- `tcp://host:2375` -> TCP connection on - host:2375 -- `tcp://host:2375/path` -> TCP connection on - host:2375 and prepend path to all requests -- `unix://path/to/socket` -> Unix socket located - at `path/to/socket` - -`-H`, when empty, will default to the same value as -when no `-H` was passed in. - -`-H` also accepts short form for TCP bindings: `host:` or `host:port` or `:port` - -Run Docker in daemon mode: - -```bash -$ sudo /dockerd -H 0.0.0.0:5555 & -``` - -Download an `ubuntu` image: - -```bash -$ docker -H :5555 pull ubuntu -``` - -You can use multiple `-H`, for example, if you want to listen on both -TCP and a Unix socket - -```bash -# Run docker in daemon mode -$ sudo /dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock & -# Download an ubuntu image, use default Unix socket -$ docker pull ubuntu -# OR use the TCP port -$ docker -H tcp://127.0.0.1:2375 pull ubuntu -``` - -### Daemon storage-driver option - -The Docker daemon has support for several different image layer storage -drivers: `aufs`, `devicemapper`, `btrfs`, `zfs`, `overlay` and `overlay2`. - -The `aufs` driver is the oldest, but is based on a Linux kernel patch-set that -is unlikely to be merged into the main kernel. These are also known to cause -some serious kernel crashes. However, `aufs` allows containers to share -executable and shared library memory, so is a useful choice when running -thousands of containers with the same program or libraries. - -The `devicemapper` driver uses thin provisioning and Copy on Write (CoW) -snapshots. For each devicemapper graph location – typically -`/var/lib/docker/devicemapper` – a thin pool is created based on two block -devices, one for data and one for metadata. By default, these block devices -are created automatically by using loopback mounts of automatically created -sparse files. Refer to [Storage driver options](dockerd.md#storage-driver-options) below -for a way how to customize this setup. -[~jpetazzo/Resizing Docker containers with the Device Mapper plugin](http://jpetazzo.github.io/2014/01/29/docker-device-mapper-resize/) -article explains how to tune your existing setup without the use of options. - -The `btrfs` driver is very fast for `docker build` - but like `devicemapper` -does not share executable memory between devices. Use -`dockerd -s btrfs -g /mnt/btrfs_partition`. - -The `zfs` driver is probably not as fast as `btrfs` but has a longer track record -on stability. Thanks to `Single Copy ARC` shared blocks between clones will be -cached only once. Use `dockerd -s zfs`. To select a different zfs filesystem -set `zfs.fsname` option as described in [Storage driver options](dockerd.md#storage-driver-options). - -The `overlay` is a very fast union filesystem. It is now merged in the main -Linux kernel as of [3.18.0](https://lkml.org/lkml/2014/10/26/137). `overlay` -also supports page cache sharing, this means multiple containers accessing -the same file can share a single page cache entry (or entries), it makes -`overlay` as efficient with memory as `aufs` driver. Call -`dockerd -s overlay` to use it. - -> **Note:** -> As promising as `overlay` is, the feature is still quite young and should not -> be used in production. Most notably, using `overlay` can cause excessive -> inode consumption (especially as the number of images grows), as well as -> being incompatible with the use of RPMs. - -The `overlay2` uses the same fast union filesystem but takes advantage of -[additional features](https://lkml.org/lkml/2015/2/11/106) added in Linux -kernel 4.0 to avoid excessive inode consumption. Call `dockerd -s overlay2` -to use it. - -> **Note:** -> Both `overlay` and `overlay2` are currently unsupported on `btrfs` or any -> Copy on Write filesystem and should only be used over `ext4` partitions. - -### Storage driver options - -Particular storage-driver can be configured with options specified with -`--storage-opt` flags. Options for `devicemapper` are prefixed with `dm`, -options for `zfs` start with `zfs` and options for `btrfs` start with `btrfs`. - -#### Devicemapper options - -* `dm.thinpooldev` - - Specifies a custom block storage device to use for the thin pool. - - If using a block device for device mapper storage, it is best to use `lvm` - to create and manage the thin-pool volume. This volume is then handed to Docker - to exclusively create snapshot volumes needed for images and containers. - - Managing the thin-pool outside of Engine makes for the most feature-rich - method of having Docker utilize device mapper thin provisioning as the - backing storage for Docker containers. The highlights of the lvm-based - thin-pool management feature include: automatic or interactive thin-pool - resize support, dynamically changing thin-pool features, automatic thinp - metadata checking when lvm activates the thin-pool, etc. - - As a fallback if no thin pool is provided, loopback files are - created. Loopback is very slow, but can be used without any - pre-configuration of storage. It is strongly recommended that you do - not use loopback in production. Ensure your Engine daemon has a - `--storage-opt dm.thinpooldev` argument provided. - - Example use: - - ```bash - $ sudo dockerd --storage-opt dm.thinpooldev=/dev/mapper/thin-pool - ``` - -* `dm.basesize` - - Specifies the size to use when creating the base device, which limits the - size of images and containers. The default value is 10G. Note, thin devices - are inherently "sparse", so a 10G device which is mostly empty doesn't use - 10 GB of space on the pool. However, the filesystem will use more space for - the empty case the larger the device is. - - The base device size can be increased at daemon restart which will allow - all future images and containers (based on those new images) to be of the - new base device size. - - Example use: - - ```bash - $ sudo dockerd --storage-opt dm.basesize=50G - ``` - - This will increase the base device size to 50G. The Docker daemon will throw an - error if existing base device size is larger than 50G. A user can use - this option to expand the base device size however shrinking is not permitted. - - This value affects the system-wide "base" empty filesystem - that may already be initialized and inherited by pulled images. Typically, - a change to this value requires additional steps to take effect: - - ```bash - $ sudo service docker stop - $ sudo rm -rf /var/lib/docker - $ sudo service docker start - ``` - - Example use: - - ```bash - $ sudo dockerd --storage-opt dm.basesize=20G - ``` - -* `dm.loopdatasize` - - > **Note**: - > This option configures devicemapper loopback, which should not - > be used in production. - - Specifies the size to use when creating the loopback file for the - "data" device which is used for the thin pool. The default size is - 100G. The file is sparse, so it will not initially take up this - much space. - - Example use: - - ```bash - $ sudo dockerd --storage-opt dm.loopdatasize=200G - ``` - -* `dm.loopmetadatasize` - - > **Note**: - > This option configures devicemapper loopback, which should not - > be used in production. - - Specifies the size to use when creating the loopback file for the - "metadata" device which is used for the thin pool. The default size - is 2G. The file is sparse, so it will not initially take up - this much space. - - Example use: - - ```bash - $ sudo dockerd --storage-opt dm.loopmetadatasize=4G - ``` - -* `dm.fs` - - Specifies the filesystem type to use for the base device. The supported - options are "ext4" and "xfs". The default is "xfs" - - Example use: - - ```bash - $ sudo dockerd --storage-opt dm.fs=ext4 - ``` - -* `dm.mkfsarg` - - Specifies extra mkfs arguments to be used when creating the base device. - - Example use: - - ```bash - $ sudo dockerd --storage-opt "dm.mkfsarg=-O ^has_journal" - ``` - -* `dm.mountopt` - - Specifies extra mount options used when mounting the thin devices. - - Example use: - - ```bash - $ sudo dockerd --storage-opt dm.mountopt=nodiscard - ``` - -* `dm.datadev` - - (Deprecated, use `dm.thinpooldev`) - - Specifies a custom blockdevice to use for data for the thin pool. - - If using a block device for device mapper storage, ideally both datadev and - metadatadev should be specified to completely avoid using the loopback - device. - - Example use: - - ```bash - $ sudo dockerd \ - --storage-opt dm.datadev=/dev/sdb1 \ - --storage-opt dm.metadatadev=/dev/sdc1 - ``` - -* `dm.metadatadev` - - (Deprecated, use `dm.thinpooldev`) - - Specifies a custom blockdevice to use for metadata for the thin pool. - - For best performance the metadata should be on a different spindle than the - data, or even better on an SSD. - - If setting up a new metadata pool it is required to be valid. This can be - achieved by zeroing the first 4k to indicate empty metadata, like this: - - ```bash - $ dd if=/dev/zero of=$metadata_dev bs=4096 count=1 - ``` - - Example use: - - ```bash - $ sudo dockerd \ - --storage-opt dm.datadev=/dev/sdb1 \ - --storage-opt dm.metadatadev=/dev/sdc1 - ``` - -* `dm.blocksize` - - Specifies a custom blocksize to use for the thin pool. The default - blocksize is 64K. - - Example use: - - ```bash - $ sudo dockerd --storage-opt dm.blocksize=512K - ``` - -* `dm.blkdiscard` - - Enables or disables the use of blkdiscard when removing devicemapper - devices. This is enabled by default (only) if using loopback devices and is - required to resparsify the loopback file on image/container removal. - - Disabling this on loopback can lead to *much* faster container removal - times, but will make the space used in `/var/lib/docker` directory not be - returned to the system for other use when containers are removed. - - Example use: - - ```bash - $ sudo dockerd --storage-opt dm.blkdiscard=false - ``` - -* `dm.override_udev_sync_check` - - Overrides the `udev` synchronization checks between `devicemapper` and `udev`. - `udev` is the device manager for the Linux kernel. - - To view the `udev` sync support of a Docker daemon that is using the - `devicemapper` driver, run: - - ```bash - $ docker info - [...] - Udev Sync Supported: true - [...] - ``` - - When `udev` sync support is `true`, then `devicemapper` and udev can - coordinate the activation and deactivation of devices for containers. - - When `udev` sync support is `false`, a race condition occurs between - the`devicemapper` and `udev` during create and cleanup. The race condition - results in errors and failures. (For information on these failures, see - [docker#4036](https://github.com/docker/docker/issues/4036)) - - To allow the `docker` daemon to start, regardless of `udev` sync not being - supported, set `dm.override_udev_sync_check` to true: - - ```bash - $ sudo dockerd --storage-opt dm.override_udev_sync_check=true - ``` - - When this value is `true`, the `devicemapper` continues and simply warns - you the errors are happening. - - > **Note:** - > The ideal is to pursue a `docker` daemon and environment that does - > support synchronizing with `udev`. For further discussion on this - > topic, see [docker#4036](https://github.com/docker/docker/issues/4036). - > Otherwise, set this flag for migrating existing Docker daemons to - > a daemon with a supported environment. - -* `dm.use_deferred_removal` - - Enables use of deferred device removal if `libdm` and the kernel driver - support the mechanism. - - Deferred device removal means that if device is busy when devices are - being removed/deactivated, then a deferred removal is scheduled on - device. And devices automatically go away when last user of the device - exits. - - For example, when a container exits, its associated thin device is removed. - If that device has leaked into some other mount namespace and can't be - removed, the container exit still succeeds and this option causes the - system to schedule the device for deferred removal. It does not wait in a - loop trying to remove a busy device. - - Example use: - - ```bash - $ sudo dockerd --storage-opt dm.use_deferred_removal=true - ``` - -* `dm.use_deferred_deletion` - - Enables use of deferred device deletion for thin pool devices. By default, - thin pool device deletion is synchronous. Before a container is deleted, - the Docker daemon removes any associated devices. If the storage driver - can not remove a device, the container deletion fails and daemon returns. - - Error deleting container: Error response from daemon: Cannot destroy container - - To avoid this failure, enable both deferred device deletion and deferred - device removal on the daemon. - - ```bash - $ sudo dockerd \ - --storage-opt dm.use_deferred_deletion=true \ - --storage-opt dm.use_deferred_removal=true - ``` - - With these two options enabled, if a device is busy when the driver is - deleting a container, the driver marks the device as deleted. Later, when - the device isn't in use, the driver deletes it. - - In general it should be safe to enable this option by default. It will help - when unintentional leaking of mount point happens across multiple mount - namespaces. - -* `dm.min_free_space` - - Specifies the min free space percent in a thin pool require for new device - creation to succeed. This check applies to both free data space as well - as free metadata space. Valid values are from 0% - 99%. Value 0% disables - free space checking logic. If user does not specify a value for this option, - the Engine uses a default value of 10%. - - Whenever a new a thin pool device is created (during `docker pull` or during - container creation), the Engine checks if the minimum free space is - available. If sufficient space is unavailable, then device creation fails - and any relevant `docker` operation fails. - - To recover from this error, you must create more free space in the thin pool - to recover from the error. You can create free space by deleting some images - and containers from the thin pool. You can also add more storage to the thin - pool. - - To add more space to a LVM (logical volume management) thin pool, just add - more storage to the volume group container thin pool; this should automatically - resolve any errors. If your configuration uses loop devices, then stop the - Engine daemon, grow the size of loop files and restart the daemon to resolve - the issue. - - Example use: - - ```bash - $ sudo dockerd --storage-opt dm.min_free_space=10% - ``` - -#### ZFS options - -* `zfs.fsname` - - Set zfs filesystem under which docker will create its own datasets. - By default docker will pick up the zfs filesystem where docker graph - (`/var/lib/docker`) is located. - - Example use: - - ```bash - $ sudo dockerd -s zfs --storage-opt zfs.fsname=zroot/docker - ``` - -#### Btrfs options - -* `btrfs.min_space` - - Specifies the minimum size to use when creating the subvolume which is used - for containers. If user uses disk quota for btrfs when creating or running - a container with **--storage-opt size** option, docker should ensure the - **size** cannot be smaller than **btrfs.min_space**. - - Example use: - - ```bash - $ sudo dockerd -s btrfs --storage-opt btrfs.min_space=10G - ``` - -#### Overlay2 options - -* `overlay2.override_kernel_check` - - Overrides the Linux kernel version check allowing overlay2. Support for - specifying multiple lower directories needed by overlay2 was added to the - Linux kernel in 4.0.0. However some older kernel versions may be patched - to add multiple lower directory support for OverlayFS. This option should - only be used after verifying this support exists in the kernel. Applying - this option on a kernel without this support will cause failures on mount. - -## Docker runtime execution options - -The Docker daemon relies on a -[OCI](https://github.com/opencontainers/specs) compliant runtime -(invoked via the `containerd` daemon) as its interface to the Linux -kernel `namespaces`, `cgroups`, and `SELinux`. - -By default, the Docker daemon automatically starts `containerd`. If you want to -control `containerd` startup, manually start `containerd` and pass the path to -the `containerd` socket using the `--containerd` flag. For example: - -```bash -$ sudo dockerd --containerd /var/run/dev/docker-containerd.sock -``` - -Runtimes can be registered with the daemon either via the -configuration file or using the `--add-runtime` command line argument. - -The following is an example adding 2 runtimes via the configuration: - -```json -"default-runtime": "runc", -"runtimes": { - "runc": { - "path": "runc" - }, - "custom": { - "path": "/usr/local/bin/my-runc-replacement", - "runtimeArgs": [ - "--debug" - ] - } -} -``` - -This is the same example via the command line: - -```bash -$ sudo dockerd --add-runtime runc=runc --add-runtime custom=/usr/local/bin/my-runc-replacement -``` - -> **Note**: defining runtime arguments via the command line is not supported. - -## Options for the runtime - -You can configure the runtime using options specified -with the `--exec-opt` flag. All the flag's options have the `native` prefix. A -single `native.cgroupdriver` option is available. - -The `native.cgroupdriver` option specifies the management of the container's -cgroups. You can specify only specify `cgroupfs` or `systemd`. If you specify -`systemd` and it is not available, the system errors out. If you omit the -`native.cgroupdriver` option,` cgroupfs` is used. - -This example sets the `cgroupdriver` to `systemd`: - -```bash -$ sudo dockerd --exec-opt native.cgroupdriver=systemd -``` - -Setting this option applies to all containers the daemon launches. - -Also Windows Container makes use of `--exec-opt` for special purpose. Docker user -can specify default container isolation technology with this, for example: - -```bash -$ sudo dockerd --exec-opt isolation=hyperv -``` - -Will make `hyperv` the default isolation technology on Windows. If no isolation -value is specified on daemon start, on Windows client, the default is -`hyperv`, and on Windows server, the default is `process`. - -## Daemon DNS options - -To set the DNS server for all Docker containers, use: - -```bash -$ sudo dockerd --dns 8.8.8.8 -``` - - -To set the DNS search domain for all Docker containers, use: - -```bash -$ sudo dockerd --dns-search example.com -``` - - -## Insecure registries - -Docker considers a private registry either secure or insecure. In the rest of -this section, *registry* is used for *private registry*, and `myregistry:5000` -is a placeholder example for a private registry. - -A secure registry uses TLS and a copy of its CA certificate is placed on the -Docker host at `/etc/docker/certs.d/myregistry:5000/ca.crt`. An insecure -registry is either not using TLS (i.e., listening on plain text HTTP), or is -using TLS with a CA certificate not known by the Docker daemon. The latter can -happen when the certificate was not found under -`/etc/docker/certs.d/myregistry:5000/`, or if the certificate verification -failed (i.e., wrong CA). - -By default, Docker assumes all, but local (see local registries below), -registries are secure. Communicating with an insecure registry is not possible -if Docker assumes that registry is secure. In order to communicate with an -insecure registry, the Docker daemon requires `--insecure-registry` in one of -the following two forms: - -* `--insecure-registry myregistry:5000` tells the Docker daemon that - myregistry:5000 should be considered insecure. -* `--insecure-registry 10.1.0.0/16` tells the Docker daemon that all registries - whose domain resolve to an IP address is part of the subnet described by the - CIDR syntax, should be considered insecure. - -The flag can be used multiple times to allow multiple registries to be marked -as insecure. - -If an insecure registry is not marked as insecure, `docker pull`, -`docker push`, and `docker search` will result in an error message prompting -the user to either secure or pass the `--insecure-registry` flag to the Docker -daemon as described above. - -Local registries, whose IP address falls in the 127.0.0.0/8 range, are -automatically marked as insecure as of Docker 1.3.2. It is not recommended to -rely on this, as it may change in the future. - -Enabling `--insecure-registry`, i.e., allowing un-encrypted and/or untrusted -communication, can be useful when running a local registry. However, -because its use creates security vulnerabilities it should ONLY be enabled for -testing purposes. For increased security, users should add their CA to their -system's list of trusted CAs instead of enabling `--insecure-registry`. - -## Legacy Registries - -Enabling `--disable-legacy-registry` forces a docker daemon to only interact with registries which support the V2 protocol. Specifically, the daemon will not attempt `push`, `pull` and `login` to v1 registries. The exception to this is `search` which can still be performed on v1 registries. - -## Running a Docker daemon behind an HTTPS_PROXY - -When running inside a LAN that uses an `HTTPS` proxy, the Docker Hub -certificates will be replaced by the proxy's certificates. These certificates -need to be added to your Docker host's configuration: - -1. Install the `ca-certificates` package for your distribution -2. Ask your network admin for the proxy's CA certificate and append them to - `/etc/pki/tls/certs/ca-bundle.crt` -3. Then start your Docker daemon with `HTTPS_PROXY=http://username:password@proxy:port/ dockerd`. - The `username:` and `password@` are optional - and are only needed if your - proxy is set up to require authentication. - -This will only add the proxy and authentication to the Docker daemon's requests - -your `docker build`s and running containers will need extra configuration to -use the proxy - -## Default Ulimits - -`--default-ulimit` allows you to set the default `ulimit` options to use for -all containers. It takes the same options as `--ulimit` for `docker run`. If -these defaults are not set, `ulimit` settings will be inherited, if not set on -`docker run`, from the Docker daemon. Any `--ulimit` options passed to -`docker run` will overwrite these defaults. - -Be careful setting `nproc` with the `ulimit` flag as `nproc` is designed by Linux to -set the maximum number of processes available to a user, not to a container. For details -please check the [run](run.md) reference. - -## Nodes discovery - -The `--cluster-advertise` option specifies the `host:port` or `interface:port` -combination that this particular daemon instance should use when advertising -itself to the cluster. The daemon is reached by remote hosts through this value. -If you specify an interface, make sure it includes the IP address of the actual -Docker host. For Engine installation created through `docker-machine`, the -interface is typically `eth1`. - -The daemon uses [libkv](https://github.com/docker/libkv/) to advertise -the node within the cluster. Some key-value backends support mutual -TLS. To configure the client TLS settings used by the daemon can be configured -using the `--cluster-store-opt` flag, specifying the paths to PEM encoded -files. For example: - -```bash -$ sudo dockerd \ - --cluster-advertise 192.168.1.2:2376 \ - --cluster-store etcd://192.168.1.2:2379 \ - --cluster-store-opt kv.cacertfile=/path/to/ca.pem \ - --cluster-store-opt kv.certfile=/path/to/cert.pem \ - --cluster-store-opt kv.keyfile=/path/to/key.pem -``` - -The currently supported cluster store options are: - -* `discovery.heartbeat` - - Specifies the heartbeat timer in seconds which is used by the daemon as a - keepalive mechanism to make sure discovery module treats the node as alive - in the cluster. If not configured, the default value is 20 seconds. - -* `discovery.ttl` - - Specifies the ttl (time-to-live) in seconds which is used by the discovery - module to timeout a node if a valid heartbeat is not received within the - configured ttl value. If not configured, the default value is 60 seconds. - -* `kv.cacertfile` - - Specifies the path to a local file with PEM encoded CA certificates to trust - -* `kv.certfile` - - Specifies the path to a local file with a PEM encoded certificate. This - certificate is used as the client cert for communication with the - Key/Value store. - -* `kv.keyfile` - - Specifies the path to a local file with a PEM encoded private key. This - private key is used as the client key for communication with the - Key/Value store. - -* `kv.path` - - Specifies the path in the Key/Value store. If not configured, the default value is 'docker/nodes'. - -## Access authorization - -Docker's access authorization can be extended by authorization plugins that your -organization can purchase or build themselves. You can install one or more -authorization plugins when you start the Docker `daemon` using the -`--authorization-plugin=PLUGIN_ID` option. - -```bash -$ sudo dockerd --authorization-plugin=plugin1 --authorization-plugin=plugin2,... -``` - -The `PLUGIN_ID` value is either the plugin's name or a path to its specification -file. The plugin's implementation determines whether you can specify a name or -path. Consult with your Docker administrator to get information about the -plugins available to you. - -Once a plugin is installed, requests made to the `daemon` through the command -line or Docker's remote API are allowed or denied by the plugin. If you have -multiple plugins installed, at least one must allow the request for it to -complete. - -For information about how to create an authorization plugin, see [authorization -plugin](../../extend/plugins_authorization.md) section in the Docker extend section of this documentation. - - -## Daemon user namespace options - -The Linux kernel [user namespace support](http://man7.org/linux/man-pages/man7/user_namespaces.7.html) provides additional security by enabling -a process, and therefore a container, to have a unique range of user and -group IDs which are outside the traditional user and group range utilized by -the host system. Potentially the most important security improvement is that, -by default, container processes running as the `root` user will have expected -administrative privilege (with some restrictions) inside the container but will -effectively be mapped to an unprivileged `uid` on the host. - -When user namespace support is enabled, Docker creates a single daemon-wide mapping -for all containers running on the same engine instance. The mappings will -utilize the existing subordinate user and group ID feature available on all modern -Linux distributions. -The [`/etc/subuid`](http://man7.org/linux/man-pages/man5/subuid.5.html) and -[`/etc/subgid`](http://man7.org/linux/man-pages/man5/subgid.5.html) files will be -read for the user, and optional group, specified to the `--userns-remap` -parameter. If you do not wish to specify your own user and/or group, you can -provide `default` as the value to this flag, and a user will be created on your behalf -and provided subordinate uid and gid ranges. This default user will be named -`dockremap`, and entries will be created for it in `/etc/passwd` and -`/etc/group` using your distro's standard user and group creation tools. - -> **Note**: The single mapping per-daemon restriction is in place for now -> because Docker shares image layers from its local cache across all -> containers running on the engine instance. Since file ownership must be -> the same for all containers sharing the same layer content, the decision -> was made to map the file ownership on `docker pull` to the daemon's user and -> group mappings so that there is no delay for running containers once the -> content is downloaded. This design preserves the same performance for `docker -> pull`, `docker push`, and container startup as users expect with -> user namespaces disabled. - -### Starting the daemon with user namespaces enabled - -To enable user namespace support, start the daemon with the -`--userns-remap` flag, which accepts values in the following formats: - - - uid - - uid:gid - - username - - username:groupname - -If numeric IDs are provided, translation back to valid user or group names -will occur so that the subordinate uid and gid information can be read, given -these resources are name-based, not id-based. If the numeric ID information -provided does not exist as entries in `/etc/passwd` or `/etc/group`, daemon -startup will fail with an error message. - -> **Note:** On Fedora 22, you have to `touch` the `/etc/subuid` and `/etc/subgid` -> files to have ranges assigned when users are created. This must be done -> *before* the `--userns-remap` option is enabled. Once these files exist, the -> daemon can be (re)started and range assignment on user creation works properly. - -**Example: starting with default Docker user management:** - -```bash -$ sudo dockerd --userns-remap=default -``` - -When `default` is provided, Docker will create - or find the existing - user and group -named `dockremap`. If the user is created, and the Linux distribution has -appropriate support, the `/etc/subuid` and `/etc/subgid` files will be populated -with a contiguous 65536 length range of subordinate user and group IDs, starting -at an offset based on prior entries in those files. For example, Ubuntu will -create the following range, based on an existing user named `user1` already owning -the first 65536 range: - -```bash -$ cat /etc/subuid -user1:100000:65536 -dockremap:165536:65536 -``` - -If you have a preferred/self-managed user with subordinate ID mappings already -configured, you can provide that username or uid to the `--userns-remap` flag. -If you have a group that doesn't match the username, you may provide the `gid` -or group name as well; otherwise the username will be used as the group name -when querying the system for the subordinate group ID range. - -### Detailed information on `subuid`/`subgid` ranges - -Given potential advanced use of the subordinate ID ranges by power users, the -following paragraphs define how the Docker daemon currently uses the range entries -found within the subordinate range files. - -The simplest case is that only one contiguous range is defined for the -provided user or group. In this case, Docker will use that entire contiguous -range for the mapping of host uids and gids to the container process. This -means that the first ID in the range will be the remapped root user, and the -IDs above that initial ID will map host ID 1 through the end of the range. - -From the example `/etc/subuid` content shown above, the remapped root -user would be uid 165536. - -If the system administrator has set up multiple ranges for a single user or -group, the Docker daemon will read all the available ranges and use the -following algorithm to create the mapping ranges: - -1. The range segments found for the particular user will be sorted by *start ID* ascending. -2. Map segments will be created from each range in increasing value with a length matching the length of each segment. Therefore the range segment with the lowest numeric starting value will be equal to the remapped root, and continue up through host uid/gid equal to the range segment length. As an example, if the lowest segment starts at ID 1000 and has a length of 100, then a map of 1000 -> 0 (the remapped root) up through 1100 -> 100 will be created from this segment. If the next segment starts at ID 10000, then the next map will start with mapping 10000 -> 101 up to the length of this second segment. This will continue until no more segments are found in the subordinate files for this user. -3. If more than five range segments exist for a single user, only the first five will be utilized, matching the kernel's limitation of only five entries in `/proc/self/uid_map` and `proc/self/gid_map`. - -### Disable user namespace for a container - -If you enable user namespaces on the daemon, all containers are started -with user namespaces enabled. In some situations you might want to disable -this feature for a container, for example, to start a privileged container (see -[user namespace known restrictions](dockerd.md#user-namespace-known-restrictions)). -To enable those advanced features for a specific container use `--userns=host` -in the `run/exec/create` command. -This option will completely disable user namespace mapping for the container's user. - -### User namespace known restrictions - -The following standard Docker features are currently incompatible when -running a Docker daemon with user namespaces enabled: - - - sharing PID or NET namespaces with the host (`--pid=host` or `--network=host`) - - A `--read-only` container filesystem (this is a Linux kernel restriction against remounting with modified flags of a currently mounted filesystem when inside a user namespace) - - external (volume or graph) drivers which are unaware/incapable of using daemon user mappings - - Using `--privileged` mode flag on `docker run` (unless also specifying `--userns=host`) - -In general, user namespaces are an advanced feature and will require -coordination with other capabilities. For example, if volumes are mounted from -the host, file ownership will have to be pre-arranged if the user or -administrator wishes the containers to have expected access to the volume -contents. - -Finally, while the `root` user inside a user namespaced container process has -many of the expected admin privileges that go along with being the superuser, the -Linux kernel has restrictions based on internal knowledge that this is a user namespaced -process. The most notable restriction that we are aware of at this time is the -inability to use `mknod`. Permission will be denied for device creation even as -container `root` inside a user namespace. - -## Miscellaneous options - -IP masquerading uses address translation to allow containers without a public -IP to talk to other machines on the Internet. This may interfere with some -network topologies and can be disabled with `--ip-masq=false`. - -Docker supports softlinks for the Docker data directory (`/var/lib/docker`) and -for `/var/lib/docker/tmp`. The `DOCKER_TMPDIR` and the data directory can be -set like this: - - DOCKER_TMPDIR=/mnt/disk2/tmp /usr/local/bin/dockerd -D -g /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log 2>&1 - # or - export DOCKER_TMPDIR=/mnt/disk2/tmp - /usr/local/bin/dockerd -D -g /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log 2>&1 - -## Default cgroup parent - -The `--cgroup-parent` option allows you to set the default cgroup parent -to use for containers. If this option is not set, it defaults to `/docker` for -fs cgroup driver and `system.slice` for systemd cgroup driver. - -If the cgroup has a leading forward slash (`/`), the cgroup is created -under the root cgroup, otherwise the cgroup is created under the daemon -cgroup. - -Assuming the daemon is running in cgroup `daemoncgroup`, -`--cgroup-parent=/foobar` creates a cgroup in -`/sys/fs/cgroup/memory/foobar`, whereas using `--cgroup-parent=foobar` -creates the cgroup in `/sys/fs/cgroup/memory/daemoncgroup/foobar` - -The systemd cgroup driver has different rules for `--cgroup-parent`. Systemd -represents hierarchy by slice and the name of the slice encodes the location in -the tree. So `--cgroup-parent` for systemd cgroups should be a slice name. A -name can consist of a dash-separated series of names, which describes the path -to the slice from the root slice. For example, `--cgroup-parent=user-a-b.slice` -means the memory cgroup for the container is created in -`/sys/fs/cgroup/memory/user.slice/user-a.slice/user-a-b.slice/docker-.scope`. - -This setting can also be set per container, using the `--cgroup-parent` -option on `docker create` and `docker run`, and takes precedence over -the `--cgroup-parent` option on the daemon. - -## Daemon configuration file - -The `--config-file` option allows you to set any configuration option -for the daemon in a JSON format. This file uses the same flag names as keys, -except for flags that allow several entries, where it uses the plural -of the flag name, e.g., `labels` for the `label` flag. - -The options set in the configuration file must not conflict with options set -via flags. The docker daemon fails to start if an option is duplicated between -the file and the flags, regardless their value. We do this to avoid -silently ignore changes introduced in configuration reloads. -For example, the daemon fails to start if you set daemon labels -in the configuration file and also set daemon labels via the `--label` flag. -Options that are not present in the file are ignored when the daemon starts. - -### Linux configuration file - -The default location of the configuration file on Linux is -`/etc/docker/daemon.json`. The `--config-file` flag can be used to specify a - non-default location. - -This is a full example of the allowed configuration options on Linux: - -```json -{ - "api-cors-header": "", - "authorization-plugins": [], - "bip": "", - "bridge": "", - "cgroup-parent": "", - "cluster-store": "", - "cluster-store-opts": {}, - "cluster-advertise": "", - "debug": true, - "default-gateway": "", - "default-gateway-v6": "", - "default-runtime": "runc", - "default-ulimits": {}, - "disable-legacy-registry": false, - "dns": [], - "dns-opts": [], - "dns-search": [], - "exec-opts": [], - "exec-root": "", - "fixed-cidr": "", - "fixed-cidr-v6": "", - "graph": "", - "group": "", - "hosts": [], - "icc": false, - "insecure-registries": [], - "ip": "0.0.0.0", - "iptables": false, - "ipv6": false, - "ip-forward": false, - "ip-masq": false, - "labels": [], - "live-restore": true, - "log-driver": "", - "log-level": "", - "log-opts": {}, - "max-concurrent-downloads": 3, - "max-concurrent-uploads": 5, - "mtu": 0, - "oom-score-adjust": -500, - "pidfile": "", - "raw-logs": false, - "registry-mirrors": [], - "runtimes": { - "runc": { - "path": "runc" - }, - "custom": { - "path": "/usr/local/bin/my-runc-replacement", - "runtimeArgs": [ - "--debug" - ] - } - }, - "selinux-enabled": false, - "storage-driver": "", - "storage-opts": [], - "swarm-default-advertise-addr": "", - "tls": true, - "tlscacert": "", - "tlscert": "", - "tlskey": "", - "tlsverify": true, - "userland-proxy": false, - "userns-remap": "" -} -``` - -### Windows configuration file - -The default location of the configuration file on Windows is - `%programdata%\docker\config\daemon.json`. The `--config-file` flag can be - used to specify a non-default location. - -This is a full example of the allowed configuration options on Windows: - -```json -{ - "authorization-plugins": [], - "bridge": "", - "cluster-advertise": "", - "cluster-store": "", - "debug": true, - "default-ulimits": {}, - "disable-legacy-registry": false, - "dns": [], - "dns-opts": [], - "dns-search": [], - "exec-opts": [], - "fixed-cidr": "", - "graph": "", - "group": "", - "hosts": [], - "insecure-registries": [], - "labels": [], - "live-restore": true, - "log-driver": "", - "log-level": "", - "mtu": 0, - "pidfile": "", - "raw-logs": false, - "registry-mirrors": [], - "storage-driver": "", - "storage-opts": [], - "swarm-default-advertise-addr": "", - "tlscacert": "", - "tlscert": "", - "tlskey": "", - "tlsverify": true -} -``` - -### Configuration reloading - -Some options can be reconfigured when the daemon is running without requiring -to restart the process. We use the `SIGHUP` signal in Linux to reload, and a global event -in Windows with the key `Global\docker-daemon-config-$PID`. The options can -be modified in the configuration file but still will check for conflicts with -the provided flags. The daemon fails to reconfigure itself -if there are conflicts, but it won't stop execution. - -The list of currently supported options that can be reconfigured is this: - -- `debug`: it changes the daemon to debug mode when set to true. -- `cluster-store`: it reloads the discovery store with the new address. -- `cluster-store-opts`: it uses the new options to reload the discovery store. -- `cluster-advertise`: it modifies the address advertised after reloading. -- `labels`: it replaces the daemon labels with a new set of labels. -- `live-restore`: Enables [keeping containers alive during daemon downtime](../../admin/live-restore.md). -- `max-concurrent-downloads`: it updates the max concurrent downloads for each pull. -- `max-concurrent-uploads`: it updates the max concurrent uploads for each push. -- `default-runtime`: it updates the runtime to be used if not is - specified at container creation. It defaults to "default" which is - the runtime shipped with the official docker packages. -- `runtimes`: it updates the list of available OCI runtimes that can - be used to run containers - -Updating and reloading the cluster configurations such as `--cluster-store`, -`--cluster-advertise` and `--cluster-store-opts` will take effect only if -these configurations were not previously configured. If `--cluster-store` -has been provided in flags and `cluster-advertise` not, `cluster-advertise` -can be added in the configuration file without accompanied by `--cluster-store` -Configuration reload will log a warning message if it detects a change in -previously configured cluster configurations. - - -## Running multiple daemons - -> **Note:** Running multiple daemons on a single host is considered as "experimental". The user should be aware of -> unsolved problems. This solution may not work properly in some cases. Solutions are currently under development -> and will be delivered in the near future. - -This section describes how to run multiple Docker daemons on a single host. To -run multiple daemons, you must configure each daemon so that it does not -conflict with other daemons on the same host. You can set these options either -by providing them as flags, or by using a [daemon configuration file](dockerd.md#daemon-configuration-file). - -The following daemon options must be configured for each daemon: - -```bash --b, --bridge= Attach containers to a network bridge ---exec-root=/var/run/docker Root of the Docker execdriver --g, --graph=/var/lib/docker Root of the Docker runtime --p, --pidfile=/var/run/docker.pid Path to use for daemon PID file --H, --host=[] Daemon socket(s) to connect to ---iptables=true Enable addition of iptables rules ---config-file=/etc/docker/daemon.json Daemon configuration file ---tlscacert="~/.docker/ca.pem" Trust certs signed only by this CA ---tlscert="~/.docker/cert.pem" Path to TLS certificate file ---tlskey="~/.docker/key.pem" Path to TLS key file -``` - -When your daemons use different values for these flags, you can run them on the same host without any problems. -It is very important to properly understand the meaning of those options and to use them correctly. - -- The `-b, --bridge=` flag is set to `docker0` as default bridge network. It is created automatically when you install Docker. -If you are not using the default, you must create and configure the bridge manually or just set it to 'none': `--bridge=none` -- `--exec-root` is the path where the container state is stored. The default value is `/var/run/docker`. Specify the path for -your running daemon here. -- `--graph` is the path where images are stored. The default value is `/var/lib/docker`. To avoid any conflict with other daemons -set this parameter separately for each daemon. -- `-p, --pidfile=/var/run/docker.pid` is the path where the process ID of the daemon is stored. Specify the path for your -pid file here. -- `--host=[]` specifies where the Docker daemon will listen for client connections. If unspecified, it defaults to `/var/run/docker.sock`. -- `--iptables=false` prevents the Docker daemon from adding iptables rules. If - multiple daemons manage iptables rules, they may overwrite rules set by - another daemon. Be aware that disabling this option requires you to manually - add iptables rules to expose container ports. -- `--config-file=/etc/docker/daemon.json` is the path where configuration file is stored. You can use it instead of -daemon flags. Specify the path for each daemon. -- `--tls*` Docker daemon supports `--tlsverify` mode that enforces encrypted and authenticated remote connections. -The `--tls*` options enable use of specific certificates for individual daemons. - -Example script for a separate “bootstrap” instance of the Docker daemon without network: - -```bash -$ sudo dockerd \ - -H unix:///var/run/docker-bootstrap.sock \ - -p /var/run/docker-bootstrap.pid \ - --iptables=false \ - --ip-masq=false \ - --bridge=none \ - --graph=/var/lib/docker-bootstrap \ - --exec-root=/var/run/docker-bootstrap -``` diff --git a/engine/reference/commandline/events.md b/engine/reference/commandline/events.md deleted file mode 100644 index b05aa8363d..0000000000 --- a/engine/reference/commandline/events.md +++ /dev/null @@ -1,179 +0,0 @@ ---- -redirect_from: - - /reference/commandline/events/ -description: The events command description and usage -keywords: -- events, container, report -title: docker events ---- - -```markdown -Usage: docker events [OPTIONS] - -Get real time events from the server - -Options: - -f, --filter value Filter output based on conditions provided (default []) - --help Print usage - --since string Show all events created since timestamp - --until string Stream events until this timestamp -``` - -Docker containers report the following events: - - attach, commit, copy, create, destroy, detach, die, exec_create, exec_detach, exec_start, export, health_status, kill, oom, pause, rename, resize, restart, start, stop, top, unpause, update - -Docker images report the following events: - - delete, import, load, pull, push, save, tag, untag - -Docker plugins(experimental) report the following events: - - install, enable, disable, remove - -Docker volumes report the following events: - - create, mount, unmount, destroy - -Docker networks report the following events: - - create, connect, disconnect, destroy - -Docker daemon report the following events: - - reload - -The `--since` and `--until` parameters can be Unix timestamps, date formatted -timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed -relative to the client machine’s time. If you do not provide the `--since` option, -the command returns only new and/or live events. Supported formats for date -formatted time stamps include RFC3339Nano, RFC3339, `2006-01-02T15:04:05`, -`2006-01-02T15:04:05.999999999`, `2006-01-02Z07:00`, and `2006-01-02`. The local -timezone on the client will be used if you do not provide either a `Z` or a -`+-00:00` timezone offset at the end of the timestamp. When providing Unix -timestamps enter seconds[.nanoseconds], where seconds is the number of seconds -that have elapsed since January 1, 1970 (midnight UTC/GMT), not counting leap -seconds (aka Unix epoch or Unix time), and the optional .nanoseconds field is a -fraction of a second no more than nine digits long. - -## Filtering - -The filtering flag (`-f` or `--filter`) format is of "key=value". If you would -like to use multiple filters, pass multiple flags (e.g., -`--filter "foo=bar" --filter "bif=baz"`) - -Using the same filter multiple times will be handled as a *OR*; for example -`--filter container=588a23dac085 --filter container=a8f7720b8c22` will display -events for container 588a23dac085 *OR* container a8f7720b8c22 - -Using multiple filters will be handled as a *AND*; for example -`--filter container=588a23dac085 --filter event=start` will display events for -container container 588a23dac085 *AND* the event type is *start* - -The currently supported filters are: - -* container (`container=`) -* event (`event=`) -* image (`image=`) -* plugin (experimental) (`plugin=`) -* label (`label=` or `label==`) -* type (`type=`) -* volume (`volume=`) -* network (`network=`) -* daemon (`daemon=`) - -## Examples - -You'll need two shells for this example. - -**Shell 1: Listening for events:** - - $ docker events - -**Shell 2: Start and Stop containers:** - - $ docker start 4386fb97867d - $ docker stop 4386fb97867d - $ docker stop 7805c1d35632 - -**Shell 1: (Again .. now showing events):** - - 2015-05-12T11:51:30.999999999Z07:00 container start 4386fb97867d (image=ubuntu-1:14.04) - 2015-05-12T11:51:30.999999999Z07:00 container die 4386fb97867d (image=ubuntu-1:14.04) - 2015-05-12T15:52:12.999999999Z07:00 container stop 4386fb97867d (image=ubuntu-1:14.04) - 2015-05-12T15:53:45.999999999Z07:00 container die 7805c1d35632 (image=redis:2.8) - 2015-05-12T15:54:03.999999999Z07:00 container stop 7805c1d35632 (image=redis:2.8) - -**Show events in the past from a specified time:** - - $ docker events --since 1378216169 - 2015-05-12T11:51:30.999999999Z07:00 container die 4386fb97867d (image=ubuntu-1:14.04) - 2015-05-12T15:52:12.999999999Z07:00 container stop 4386fb97867d (image=ubuntu-1:14.04) - 2015-05-12T15:53:45.999999999Z07:00 container die 7805c1d35632 (image=redis:2.8) - 2015-05-12T15:54:03.999999999Z07:00 container stop 7805c1d35632 (image=redis:2.8) - - $ docker events --since '2013-09-03' - 2015-05-12T11:51:30.999999999Z07:00 container start 4386fb97867d (image=ubuntu-1:14.04) - 2015-05-12T11:51:30.999999999Z07:00 container die 4386fb97867d (image=ubuntu-1:14.04) - 2015-05-12T15:52:12.999999999Z07:00 container stop 4386fb97867d (image=ubuntu-1:14.04) - 2015-05-12T15:53:45.999999999Z07:00 container die 7805c1d35632 (image=redis:2.8) - 2015-05-12T15:54:03.999999999Z07:00 container stop 7805c1d35632 (image=redis:2.8) - - $ docker events --since '2013-09-03T15:49:29' - 2015-05-12T11:51:30.999999999Z07:00 container die 4386fb97867d (image=ubuntu-1:14.04) - 2015-05-12T15:52:12.999999999Z07:00 container stop 4386fb97867d (image=ubuntu-1:14.04) - 2015-05-12T15:53:45.999999999Z07:00 container die 7805c1d35632 (image=redis:2.8) - 2015-05-12T15:54:03.999999999Z07:00 container stop 7805c1d35632 (image=redis:2.8) - -This example outputs all events that were generated in the last 3 minutes, -relative to the current time on the client machine: - - $ docker events --since '3m' - 2015-05-12T11:51:30.999999999Z07:00 container die 4386fb97867d (image=ubuntu-1:14.04) - 2015-05-12T15:52:12.999999999Z07:00 container stop 4386fb97867d (image=ubuntu-1:14.04) - 2015-05-12T15:53:45.999999999Z07:00 container die 7805c1d35632 (image=redis:2.8) - 2015-05-12T15:54:03.999999999Z07:00 container stop 7805c1d35632 (image=redis:2.8) - -**Filter events:** - - $ docker events --filter 'event=stop' - 2014-05-10T17:42:14.999999999Z07:00 container stop 4386fb97867d (image=ubuntu-1:14.04) - 2014-09-03T17:42:14.999999999Z07:00 container stop 7805c1d35632 (image=redis:2.8) - - $ docker events --filter 'image=ubuntu-1:14.04' - 2014-05-10T17:42:14.999999999Z07:00 container start 4386fb97867d (image=ubuntu-1:14.04) - 2014-05-10T17:42:14.999999999Z07:00 container die 4386fb97867d (image=ubuntu-1:14.04) - 2014-05-10T17:42:14.999999999Z07:00 container stop 4386fb97867d (image=ubuntu-1:14.04) - - $ docker events --filter 'container=7805c1d35632' - 2014-05-10T17:42:14.999999999Z07:00 container die 7805c1d35632 (image=redis:2.8) - 2014-09-03T15:49:29.999999999Z07:00 container stop 7805c1d35632 (image= redis:2.8) - - $ docker events --filter 'container=7805c1d35632' --filter 'container=4386fb97867d' - 2014-09-03T15:49:29.999999999Z07:00 container die 4386fb97867d (image=ubuntu-1:14.04) - 2014-05-10T17:42:14.999999999Z07:00 container stop 4386fb97867d (image=ubuntu-1:14.04) - 2014-05-10T17:42:14.999999999Z07:00 container die 7805c1d35632 (image=redis:2.8) - 2014-09-03T15:49:29.999999999Z07:00 container stop 7805c1d35632 (image=redis:2.8) - - $ docker events --filter 'container=7805c1d35632' --filter 'event=stop' - 2014-09-03T15:49:29.999999999Z07:00 container stop 7805c1d35632 (image=redis:2.8) - - $ docker events --filter 'container=container_1' --filter 'container=container_2' - 2014-09-03T15:49:29.999999999Z07:00 container die 4386fb97867d (image=ubuntu-1:14.04) - 2014-05-10T17:42:14.999999999Z07:00 container stop 4386fb97867d (image=ubuntu-1:14.04) - 2014-05-10T17:42:14.999999999Z07:00 container die 7805c1d35632 (imager=redis:2.8) - 2014-09-03T15:49:29.999999999Z07:00 container stop 7805c1d35632 (image=redis:2.8) - - $ docker events --filter 'type=volume' - 2015-12-23T21:05:28.136212689Z volume create test-event-volume-local (driver=local) - 2015-12-23T21:05:28.383462717Z volume mount test-event-volume-local (read/write=true, container=562fe10671e9273da25eed36cdce26159085ac7ee6707105fd534866340a5025, destination=/foo, driver=local, propagation=rprivate) - 2015-12-23T21:05:28.650314265Z volume unmount test-event-volume-local (container=562fe10671e9273da25eed36cdce26159085ac7ee6707105fd534866340a5025, driver=local) - 2015-12-23T21:05:28.716218405Z volume destroy test-event-volume-local (driver=local) - - $ docker events --filter 'type=network' - 2015-12-23T21:38:24.705709133Z network create 8b111217944ba0ba844a65b13efcd57dc494932ee2527577758f939315ba2c5b (name=test-event-network-local, type=bridge) - 2015-12-23T21:38:25.119625123Z network connect 8b111217944ba0ba844a65b13efcd57dc494932ee2527577758f939315ba2c5b (name=test-event-network-local, container=b4be644031a3d90b400f88ab3d4bdf4dc23adb250e696b6328b85441abe2c54e, type=bridge) - - $ docker events --filter 'type=plugin' (experimental) - 2016-07-25T17:30:14.825557616Z plugin pull ec7b87f2ce84330fe076e666f17dfc049d2d7ae0b8190763de94e1f2d105993f (name=tiborvass/no-remove:latest) - 2016-07-25T17:30:14.888127370Z plugin enable ec7b87f2ce84330fe076e666f17dfc049d2d7ae0b8190763de94e1f2d105993f (name=tiborvass/no-remove:latest) diff --git a/engine/reference/commandline/exec.md b/engine/reference/commandline/exec.md deleted file mode 100644 index c2ad5f6349..0000000000 --- a/engine/reference/commandline/exec.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -redirect_from: - - /reference/commandline/exec/ -description: The exec command description and usage -keywords: -- command, container, run, execute -title: docker exec ---- - -```markdown -Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...] - -Run a command in a running container - - -d, --detach Detached mode: run command in the background - --detach-keys Override the key sequence for detaching a container - --help Print usage - -i, --interactive Keep STDIN open even if not attached - --privileged Give extended privileges to the command - -t, --tty Allocate a pseudo-TTY - -u, --user Username or UID (format: [:]) -``` - -The `docker exec` command runs a new command in a running container. - -The command started using `docker exec` only runs while the container's primary -process (`PID 1`) is running, and it is not restarted if the container is -restarted. - -If the container is paused, then the `docker exec` command will fail with an error: - - $ docker pause test - test - $ docker ps - CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES - 1ae3b36715d2 ubuntu:latest "bash" 17 seconds ago Up 16 seconds (Paused) test - $ docker exec test ls - FATA[0000] Error response from daemon: Container test is paused, unpause the container before exec - $ echo $? - 1 - -## Examples - - $ docker run --name ubuntu_bash --rm -i -t ubuntu bash - -This will create a container named `ubuntu_bash` and start a Bash session. - - $ docker exec -d ubuntu_bash touch /tmp/execWorks - -This will create a new file `/tmp/execWorks` inside the running container -`ubuntu_bash`, in the background. - - $ docker exec -it ubuntu_bash bash - -This will create a new Bash session in the container `ubuntu_bash`. diff --git a/engine/reference/commandline/export.md b/engine/reference/commandline/export.md deleted file mode 100644 index a1f628c410..0000000000 --- a/engine/reference/commandline/export.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -redirect_from: - - /reference/commandline/export/ -description: The export command description and usage -keywords: -- export, file, system, container -title: docker export ---- - -```markdown -Usage: docker export [OPTIONS] CONTAINER - -Export a container's filesystem as a tar archive - -Options: - --help Print usage - -o, --output string Write to a file, instead of STDOUT -``` - -The `docker export` command does not export the contents of volumes associated -with the container. If a volume is mounted on top of an existing directory in -the container, `docker export` will export the contents of the *underlying* -directory, not the contents of the volume. - -Refer to [Backup, restore, or migrate data -volumes](../../tutorials/dockervolumes.md#backup-restore-or-migrate-data-volumes) in -the user guide for examples on exporting data in a volume. - -## Examples - - $ docker export red_panda > latest.tar - -Or - - $ docker export --output="latest.tar" red_panda diff --git a/engine/reference/commandline/history.md b/engine/reference/commandline/history.md deleted file mode 100644 index 74fbcebdc9..0000000000 --- a/engine/reference/commandline/history.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -redirect_from: - - /reference/commandline/history/ -description: The history command description and usage -keywords: -- docker, image, history -title: docker history ---- - -```markdown -Usage: docker history [OPTIONS] IMAGE - -Show the history of an image - -Options: - --help Print usage - -H, --human Print sizes and dates in human readable format (default true) - --no-trunc Don't truncate output - -q, --quiet Only show numeric IDs -``` - -To see how the `docker:latest` image was built: - - $ docker history docker - IMAGE CREATED CREATED BY SIZE COMMENT - 3e23a5875458 8 days ago /bin/sh -c #(nop) ENV LC_ALL=C.UTF-8 0 B - 8578938dd170 8 days ago /bin/sh -c dpkg-reconfigure locales && loc 1.245 MB - be51b77efb42 8 days ago /bin/sh -c apt-get update && apt-get install 338.3 MB - 4b137612be55 6 weeks ago /bin/sh -c #(nop) ADD jessie.tar.xz in / 121 MB - 750d58736b4b 6 weeks ago /bin/sh -c #(nop) MAINTAINER Tianon Gravi or label== - - before=([:tag]||) - - since=([:tag]||) - --format string Pretty-print images using a Go template - --help Print usage - --no-trunc Don't truncate output - -q, --quiet Only show numeric IDs -``` - -The default `docker images` will show all top level -images, their repository and tags, and their size. - -Docker images have intermediate layers that increase reusability, -decrease disk usage, and speed up `docker build` by -allowing each step to be cached. These intermediate layers are not shown -by default. - -The `SIZE` is the cumulative space taken up by the image and all -its parent images. This is also the disk space used by the contents of the -Tar file created when you `docker save` an image. - -An image will be listed more than once if it has multiple repository names -or tags. This single image (identifiable by its matching `IMAGE ID`) -uses up the `SIZE` listed only once. - -### Listing the most recently created images - - $ docker images - REPOSITORY TAG IMAGE ID CREATED SIZE - 77af4d6b9913 19 hours ago 1.089 GB - committ latest b6fa739cedf5 19 hours ago 1.089 GB - 78a85c484f71 19 hours ago 1.089 GB - docker latest 30557a29d5ab 20 hours ago 1.089 GB - 5ed6274db6ce 24 hours ago 1.089 GB - postgres 9 746b819f315e 4 days ago 213.4 MB - postgres 9.3 746b819f315e 4 days ago 213.4 MB - postgres 9.3.5 746b819f315e 4 days ago 213.4 MB - postgres latest 746b819f315e 4 days ago 213.4 MB - -### Listing images by name and tag - -The `docker images` command takes an optional `[REPOSITORY[:TAG]]` argument -that restricts the list to images that match the argument. If you specify -`REPOSITORY`but no `TAG`, the `docker images` command lists all images in the -given repository. - -For example, to list all images in the "java" repository, run this command : - - $ docker images java - REPOSITORY TAG IMAGE ID CREATED SIZE - java 8 308e519aac60 6 days ago 824.5 MB - java 7 493d82594c15 3 months ago 656.3 MB - java latest 2711b1d6f3aa 5 months ago 603.9 MB - -The `[REPOSITORY[:TAG]]` value must be an "exact match". This means that, for example, -`docker images jav` does not match the image `java`. - -If both `REPOSITORY` and `TAG` are provided, only images matching that -repository and tag are listed. To find all local images in the "java" -repository with tag "8" you can use: - - $ docker images java:8 - REPOSITORY TAG IMAGE ID CREATED SIZE - java 8 308e519aac60 6 days ago 824.5 MB - -If nothing matches `REPOSITORY[:TAG]`, the list is empty. - - $ docker images java:0 - REPOSITORY TAG IMAGE ID CREATED SIZE - -## Listing the full length image IDs - - $ docker images --no-trunc - REPOSITORY TAG IMAGE ID CREATED SIZE - sha256:77af4d6b9913e693e8d0b4b294fa62ade6054e6b2f1ffb617ac955dd63fb0182 19 hours ago 1.089 GB - committest latest sha256:b6fa739cedf5ea12a620a439402b6004d057da800f91c7524b5086a5e4749c9f 19 hours ago 1.089 GB - sha256:78a85c484f71509adeaace20e72e941f6bdd2b25b4c75da8693efd9f61a37921 19 hours ago 1.089 GB - docker latest sha256:30557a29d5abc51e5f1d5b472e79b7e296f595abcf19fe6b9199dbbc809c6ff4 20 hours ago 1.089 GB - sha256:0124422dd9f9cf7ef15c0617cda3931ee68346455441d66ab8bdc5b05e9fdce5 20 hours ago 1.089 GB - sha256:18ad6fad340262ac2a636efd98a6d1f0ea775ae3d45240d3418466495a19a81b 22 hours ago 1.082 GB - sha256:f9f1e26352f0a3ba6a0ff68167559f64f3e21ff7ada60366e2d44a04befd1d3a 23 hours ago 1.089 GB - tryout latest sha256:2629d1fa0b81b222fca63371ca16cbf6a0772d07759ff80e8d1369b926940074 23 hours ago 131.5 MB - sha256:5ed6274db6ceb2397844896966ea239290555e74ef307030ebb01ff91b1914df 24 hours ago 1.089 GB - -## Listing image digests - -Images that use the v2 or later format have a content-addressable identifier -called a `digest`. As long as the input used to generate the image is -unchanged, the digest value is predictable. To list image digest values, use -the `--digests` flag: - - $ docker images --digests - REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE - localhost:5000/test/busybox sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf 4986bf8c1536 9 weeks ago 2.43 MB - -When pushing or pulling to a 2.0 registry, the `push` or `pull` command -output includes the image digest. You can `pull` using a digest value. You can -also reference by digest in `create`, `run`, and `rmi` commands, as well as the -`FROM` image reference in a Dockerfile. - -## Filtering - -The filtering flag (`-f` or `--filter`) format is of "key=value". If there is more -than one filter, then pass multiple flags (e.g., `--filter "foo=bar" --filter "bif=baz"`) - -The currently supported filters are: - -* dangling (boolean - true or false) -* label (`label=` or `label==`) -* before (`[:]`, `` or ``) - filters images created before given id or references -* since (`[:]`, `` or ``) - filters images created since given id or references - -##### Untagged images (dangling) - - $ docker images --filter "dangling=true" - - REPOSITORY TAG IMAGE ID CREATED SIZE - 8abc22fbb042 4 weeks ago 0 B - 48e5f45168b9 4 weeks ago 2.489 MB - bf747efa0e2f 4 weeks ago 0 B - 980fe10e5736 12 weeks ago 101.4 MB - dea752e4e117 12 weeks ago 101.4 MB - 511136ea3c5a 8 months ago 0 B - -This will display untagged images, that are the leaves of the images tree (not -intermediary layers). These images occur when a new build of an image takes the -`repo:tag` away from the image ID, leaving it as `:` or untagged. -A warning will be issued if trying to remove an image when a container is presently -using it. By having this flag it allows for batch cleanup. - -Ready for use by `docker rmi ...`, like: - - $ docker rmi $(docker images -f "dangling=true" -q) - - 8abc22fbb042 - 48e5f45168b9 - bf747efa0e2f - 980fe10e5736 - dea752e4e117 - 511136ea3c5a - -NOTE: Docker will warn you if any containers exist that are using these untagged images. - - -##### Labeled images - -The `label` filter matches images based on the presence of a `label` alone or a `label` and a -value. - -The following filter matches images with the `com.example.version` label regardless of its value. - - $ docker images --filter "label=com.example.version" - - REPOSITORY TAG IMAGE ID CREATED SIZE - match-me-1 latest eeae25ada2aa About a minute ago 188.3 MB - match-me-2 latest dea752e4e117 About a minute ago 188.3 MB - -The following filter matches images with the `com.example.version` label with the `1.0` value. - - $ docker images --filter "label=com.example.version=1.0" - REPOSITORY TAG IMAGE ID CREATED SIZE - match-me latest 511136ea3c5a About a minute ago 188.3 MB - -In this example, with the `0.1` value, it returns an empty set because no matches were found. - - $ docker images --filter "label=com.example.version=0.1" - REPOSITORY TAG IMAGE ID CREATED SIZE - -#### Before - -The `before` filter shows only images created before the image with -given id or reference. For example, having these images: - - $ docker images - REPOSITORY TAG IMAGE ID CREATED SIZE - image1 latest eeae25ada2aa 4 minutes ago 188.3 MB - image2 latest dea752e4e117 9 minutes ago 188.3 MB - image3 latest 511136ea3c5a 25 minutes ago 188.3 MB - -Filtering with `before` would give: - - $ docker images --filter "before=image1" - REPOSITORY TAG IMAGE ID CREATED SIZE - image2 latest dea752e4e117 9 minutes ago 188.3 MB - image3 latest 511136ea3c5a 25 minutes ago 188.3 MB - -#### Since - -The `since` filter shows only images created after the image with -given id or reference. For example, having these images: - - $ docker images - REPOSITORY TAG IMAGE ID CREATED SIZE - image1 latest eeae25ada2aa 4 minutes ago 188.3 MB - image2 latest dea752e4e117 9 minutes ago 188.3 MB - image3 latest 511136ea3c5a 25 minutes ago 188.3 MB - -Filtering with `since` would give: - - $ docker images --filter "since=image3" - REPOSITORY TAG IMAGE ID CREATED SIZE - image1 latest eeae25ada2aa 4 minutes ago 188.3 MB - image2 latest dea752e4e117 9 minutes ago 188.3 MB - - -## Formatting - -The formatting option (`--format`) will pretty print container output -using a Go template. - -Valid placeholders for the Go template are listed below: - -Placeholder | Description ----- | ---- -`.ID` | Image ID -`.Repository` | Image repository -`.Tag` | Image tag -`.Digest` | Image digest -`.CreatedSince` | Elapsed time since the image was created. -`.CreatedAt` | Time when the image was created. -`.Size` | Image disk size. - -When using the `--format` option, the `image` command will either -output the data exactly as the template declares or, when using the -`table` directive, will include column headers as well. - -The following example uses a template without headers and outputs the -`ID` and `Repository` entries separated by a colon for all images: - - {% raw %} - $ docker images --format "{{.ID}}: {{.Repository}}" - 77af4d6b9913: - b6fa739cedf5: committ - 78a85c484f71: - 30557a29d5ab: docker - 5ed6274db6ce: - 746b819f315e: postgres - 746b819f315e: postgres - 746b819f315e: postgres - 746b819f315e: postgres - {% endraw %} - -To list all images with their repository and tag in a table format you -can use: - - {% raw %} - $ docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}" - IMAGE ID REPOSITORY TAG - 77af4d6b9913 - b6fa739cedf5 committ latest - 78a85c484f71 - 30557a29d5ab docker latest - 5ed6274db6ce - 746b819f315e postgres 9 - 746b819f315e postgres 9.3 - 746b819f315e postgres 9.3.5 - 746b819f315e postgres latest - {% endraw %} diff --git a/engine/reference/commandline/import.md b/engine/reference/commandline/import.md deleted file mode 100644 index 297d382587..0000000000 --- a/engine/reference/commandline/import.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -redirect_from: - - /reference/commandline/import/ -description: The import command description and usage -keywords: -- import, file, system, container -title: docker import ---- - -```markdown -Usage: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] - -Import the contents from a tarball to create a filesystem image - -Options: - -c, --change value Apply Dockerfile instruction to the created image (default []) - --help Print usage - -m, --message string Set commit message for imported image -``` - -You can specify a `URL` or `-` (dash) to take data directly from `STDIN`. The -`URL` can point to an archive (.tar, .tar.gz, .tgz, .bzip, .tar.xz, or .txz) -containing a filesystem or to an individual file on the Docker host. If you -specify an archive, Docker untars it in the container relative to the `/` -(root). If you specify an individual file, you must specify the full path within -the host. To import from a remote location, specify a `URI` that begins with the -`http://` or `https://` protocol. - -The `--change` option will apply `Dockerfile` instructions to the image -that is created. -Supported `Dockerfile` instructions: -`CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR` - -## Examples - -**Import from a remote location:** - -This will create a new untagged image. - - $ docker import http://example.com/exampleimage.tgz - -**Import from a local file:** - -Import to docker via pipe and `STDIN`. - - $ cat exampleimage.tgz | docker import - exampleimagelocal:new - -Import with a commit message. - - $ cat exampleimage.tgz | docker import --message "New image imported from tarball" - exampleimagelocal:new - -Import to docker from a local archive. - - $ docker import /path/to/exampleimage.tgz - -**Import from a local directory:** - - $ sudo tar -c . | docker import - exampleimagedir - -**Import from a local directory with new configurations:** - - $ sudo tar -c . | docker import --change "ENV DEBUG true" - exampleimagedir - -Note the `sudo` in this example – you must preserve -the ownership of the files (especially root ownership) during the -archiving with tar. If you are not root (or the sudo command) when you -tar, then the ownerships might not get preserved. diff --git a/engine/reference/commandline/index.md b/engine/reference/commandline/index.md deleted file mode 100644 index 5437aa3350..0000000000 --- a/engine/reference/commandline/index.md +++ /dev/null @@ -1,135 +0,0 @@ ---- -redirect_from: - - /reference/commandline/ -description: Docker's CLI command description and usage -keywords: -- Docker, Docker documentation, CLI, command line -title: The Docker commands ---- - -This section contains reference information on using Docker's command line -client. Each command has a reference page along with samples. If you are -unfamiliar with the command line, you should start by reading about how to [Use -the Docker command line](cli.md). - -You start the Docker daemon with the command line. How you start the daemon -affects your Docker containers. For that reason you should also make sure to -read the [`dockerd`](dockerd.md) reference page. - -### Docker management commands - -| Command | Description | -|:--------|:-------------------------------------------------------------------| -| [dockerd](dockerd.md) | Launch the Docker daemon | -| [info](info.md) | Display system-wide information | -| [inspect](inspect.md)| Return low-level information on a container or image | -| [version](version.md) | Show the Docker version information | - - -### Image commands - -| Command | Description | -|:--------|:-------------------------------------------------------------------| -| [build](build.md) | Build an image from a Dockerfile | -| [commit](commit.md) | Create a new image from a container's changes | -| [history](history.md) | Show the history of an image | -| [images](images.md) | List images | -| [import](import.md) | Import the contents from a tarball to create a filesystem image | -| [load](load.md) | Load an image from a tar archive or STDIN | -| [rmi](rmi.md) | Remove one or more images | -| [save](save.md) | Save images to a tar archive | -| [tag](tag.md) | Tag an image into a repository | - -### Container commands - -| Command | Description | -|:--------|:-------------------------------------------------------------------| -| [attach](attach.md) | Attach to a running container | -| [cp](cp.md) | Copy files/folders from a container to a HOSTDIR or to STDOUT | -| [create](create.md) | Create a new container | -| [diff](diff.md) | Inspect changes on a container's filesystem | -| [events](events.md) | Get real time events from the server | -| [exec](exec.md) | Run a command in a running container | -| [export](export.md) | Export a container's filesystem as a tar archive | -| [kill](kill.md) | Kill a running container | -| [logs](logs.md) | Fetch the logs of a container | -| [pause](pause.md) | Pause all processes within a container | -| [port](port.md) | List port mappings or a specific mapping for the container | -| [ps](ps.md) | List containers | -| [rename](rename.md) | Rename a container | -| [restart](restart.md) | Restart a running container | -| [rm](rm.md) | Remove one or more containers | -| [run](run.md) | Run a command in a new container | -| [start](start.md) | Start one or more stopped containers | -| [stats](stats.md) | Display a live stream of container(s) resource usage statistics | -| [stop](stop.md) | Stop a running container | -| [top](top.md) | Display the running processes of a container | -| [unpause](unpause.md) | Unpause all processes within a container | -| [update](update.md) | Update configuration of one or more containers | -| [wait](wait.md) | Block until a container stops, then print its exit code | - -### Hub and registry commands - -| Command | Description | -|:--------|:-------------------------------------------------------------------| -| [login](login.md) | Register or log in to a Docker registry | -| [logout](logout.md) | Log out from a Docker registry | -| [pull](pull.md) | Pull an image or a repository from a Docker registry | -| [push](push.md) | Push an image or a repository to a Docker registry | -| [search](search.md) | Search the Docker Hub for images | - -### Network and connectivity commands - -| Command | Description | -|:--------|:-------------------------------------------------------------------| -| [network connect](network_connect.md) | Connect a container to a network | -| [network create](network_create.md) | Create a new network | -| [network disconnect](network_disconnect.md) | Disconnect a container from a network | -| [network inspect](network_inspect.md) | Display information about a network | -| [network ls](network_ls.md) | Lists all the networks the Engine `daemon` knows about | -| [network rm](network_rm.md) | Removes one or more networks | - - -### Shared data volume commands - -| Command | Description | -|:--------|:-------------------------------------------------------------------| -| [volume create](volume_create.md) | Creates a new volume where containers can consume and store data | -| [volume inspect](volume_inspect.md) | Display information about a volume | -| [volume ls](volume_ls.md) | Lists all the volumes Docker knows about | -| [volume rm](volume_rm.md) | Remove one or more volumes | - - -### Swarm node commands - -| Command | Description | -|:--------|:-------------------------------------------------------------------| -| [node promote](node_promote.md) | Promote a node that is pending a promotion to manager | -| [node demote](node_demote.md) | Demotes an existing manager so that it is no longer a manager | -| [node inspect](node_inspect.md) | Inspect a node in the swarm | -| [node update](node_update.md) | Update attributes for a node | -| [node ps](node_ps.md) | List tasks running on a node | -| [node ls](node_ls.md) | List nodes in the swarm | -| [node rm](node_rm.md) | Remove one or more nodes from the swarm | - -### Swarm swarm commands - -| Command | Description | -|:--------|:-------------------------------------------------------------------| -| [swarm init](swarm_init.md) | Initialize a swarm | -| [swarm join](swarm_join.md) | Join a swarm as a manager node or worker node | -| [swarm leave](swarm_leave.md) | Remove the current node from the swarm | -| [swarm update](swarm_update.md) | Update attributes of a swarm | -| [swarm join-token](swarm_join_token.md) | Display or rotate join tokens | - -### Swarm service commands - -| Command | Description | -|:--------|:-------------------------------------------------------------------| -| [service create](service_create.md) | Create a new service | -| [service inspect](service_inspect.md) | Inspect a service | -| [service ls](service_ls.md) | List services in the swarm | -| [service rm](service_rm.md) | Remove a service from the swarm | -| [service scale](service_scale.md) | Set the number of replicas for the desired state of the service | -| [service ps](service_ps.md) | List the tasks of a service | -| [service update](service_update.md) | Update the attributes of a service | diff --git a/engine/reference/commandline/info.md b/engine/reference/commandline/info.md deleted file mode 100644 index d7e18a9066..0000000000 --- a/engine/reference/commandline/info.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -redirect_from: - - /reference/commandline/info/ -description: The info command description and usage -keywords: -- display, docker, information -title: docker info ---- - -```markdown -Usage: docker info - -Display system-wide information - -Options: - --help Print usage -``` - -This command displays system wide information regarding the Docker installation. -Information displayed includes the kernel version, number of containers and images. -The number of images shown is the number of unique images. The same image tagged -under different names is counted only once. - -Depending on the storage driver in use, additional information can be shown, such -as pool name, data file, metadata file, data space used, total data space, metadata -space used, and total metadata space. - -The data file is where the images are stored and the metadata file is where the -meta data regarding those images are stored. When run for the first time Docker -allocates a certain amount of data space and meta data space from the space -available on the volume where `/var/lib/docker` is mounted. - -# Examples - -## Display Docker system information - -Here is a sample output for a daemon running on Ubuntu, using the overlay -storage driver and a node that is part of a 2-node swarm: - - $ docker -D info - Containers: 14 - Running: 3 - Paused: 1 - Stopped: 10 - Images: 52 - Server Version: 1.12.0-dev - Storage Driver: overlay - Backing Filesystem: extfs - Logging Driver: json-file - Cgroup Driver: cgroupfs - Plugins: - Volume: local - Network: bridge null host overlay - Swarm: - NodeID: 0gac67oclbxq7 - Is Manager: true - Managers: 2 - Nodes: 2 - Runtimes: default - Default Runtime: default - Security Options: apparmor seccomp - Kernel Version: 4.4.0-21-generic - Operating System: Ubuntu 16.04 LTS - OSType: linux - Architecture: x86_64 - CPUs: 24 - Total Memory: 62.86 GiB - Name: docker - ID: I54V:OLXT:HVMM:TPKO:JPHQ:CQCD:JNLC:O3BZ:4ZVJ:43XJ:PFHZ:6N2S - Docker Root Dir: /var/lib/docker - Debug mode (client): true - Debug mode (server): true - File Descriptors: 59 - Goroutines: 159 - System Time: 2016-04-26T10:04:06.14689342-04:00 - EventsListeners: 0 - Http Proxy: http://test:test@localhost:8080 - Https Proxy: https://test:test@localhost:8080 - No Proxy: localhost,127.0.0.1,docker-registry.somecorporation.com - Username: svendowideit - Registry: https://index.docker.io/v1/ - WARNING: No swap limit support - Labels: - storage=ssd - staging=true - Insecure registries: - myinsecurehost:5000 - 127.0.0.0/8 - -The global `-D` option tells all `docker` commands to output debug information. - -The example below shows the output for a daemon running on Red Hat Enterprise Linux, -using the devicemapper storage driver. As can be seen in the output, additional -information about the devicemapper storage driver is shown: - - $ docker info - Containers: 14 - Running: 3 - Paused: 1 - Stopped: 10 - Untagged Images: 52 - Server Version: 1.10.3 - Storage Driver: devicemapper - Pool Name: docker-202:2-25583803-pool - Pool Blocksize: 65.54 kB - Base Device Size: 10.74 GB - Backing Filesystem: xfs - Data file: /dev/loop0 - Metadata file: /dev/loop1 - Data Space Used: 1.68 GB - Data Space Total: 107.4 GB - Data Space Available: 7.548 GB - Metadata Space Used: 2.322 MB - Metadata Space Total: 2.147 GB - Metadata Space Available: 2.145 GB - Udev Sync Supported: true - Deferred Removal Enabled: false - Deferred Deletion Enabled: false - Deferred Deleted Device Count: 0 - Data loop file: /var/lib/docker/devicemapper/devicemapper/data - Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata - Library Version: 1.02.107-RHEL7 (2015-12-01) - Execution Driver: native-0.2 - Logging Driver: json-file - Plugins: - Volume: local - Network: null host bridge - Kernel Version: 3.10.0-327.el7.x86_64 - Operating System: Red Hat Enterprise Linux Server 7.2 (Maipo) - OSType: linux - Architecture: x86_64 - CPUs: 1 - Total Memory: 991.7 MiB - Name: ip-172-30-0-91.ec2.internal - ID: I54V:OLXT:HVMM:TPKO:JPHQ:CQCD:JNLC:O3BZ:4ZVJ:43XJ:PFHZ:6N2S - Docker Root Dir: /var/lib/docker - Debug mode (client): false - Debug mode (server): false - Username: xyz - Registry: https://index.docker.io/v1/ - Insecure registries: - myinsecurehost:5000 - 127.0.0.0/8 diff --git a/engine/reference/commandline/inspect.md b/engine/reference/commandline/inspect.md deleted file mode 100644 index 1ad211c05e..0000000000 --- a/engine/reference/commandline/inspect.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -redirect_from: - - /reference/commandline/inspect/ -description: The inspect command description and usage -keywords: -- inspect, container, json -title: docker inspect ---- - -```markdown -Usage: docker inspect [OPTIONS] CONTAINER|IMAGE|TASK [CONTAINER|IMAGE|TASK...] - -Return low-level information on a container, image or task - - -f, --format Format the output using the given go template - --help Print usage - -s, --size Display total file sizes if the type is container - values are "image" or "container" or "task - --type Return JSON for specified type, (e.g image, container or task) -``` - -By default, this will render all results in a JSON array. If the container and -image have the same name, this will return container JSON for unspecified type. -If a format is specified, the given template will be executed for each result. - -Go's [text/template](http://golang.org/pkg/text/template/) package -describes all the details of the format. - -## Examples - -**Get an instance's IP address:** - -For the most part, you can pick out any field from the JSON in a fairly -straightforward manner. - - {% raw %} - $ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $INSTANCE_ID - {% endraw %} - -**Get an instance's MAC address:** - -For the most part, you can pick out any field from the JSON in a fairly -straightforward manner. - - {% raw %} - $ docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $INSTANCE_ID - {% endraw %} - -**Get an instance's log path:** - - {% raw %} - $ docker inspect --format='{{.LogPath}}' $INSTANCE_ID - {% endraw %} - -**Get a Task's image name:** - - {% raw %} - $ docker inspect --format='{{.Container.Spec.Image}}' $INSTANCE_ID - {% endraw %} - -**List all port bindings:** - -One can loop over arrays and maps in the results to produce simple text -output: - - {% raw %} - $ docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID - {% endraw %} - -**Find a specific port mapping:** - -The `.Field` syntax doesn't work when the field name begins with a -number, but the template language's `index` function does. The -`.NetworkSettings.Ports` section contains a map of the internal port -mappings to a list of external address/port objects. To grab just the -numeric public port, you use `index` to find the specific port map, and -then `index` 0 contains the first object inside of that. Then we ask for -the `HostPort` field to get the public address. - - {% raw %} - $ docker inspect --format='{{(index (index .NetworkSettings.Ports "8787/tcp") 0).HostPort}}' $INSTANCE_ID - {% endraw %} - -**Get a subsection in JSON format:** - -If you request a field which is itself a structure containing other -fields, by default you get a Go-style dump of the inner values. -Docker adds a template function, `json`, which can be applied to get -results in JSON format. - - {% raw %} - $ docker inspect --format='{{json .Config}}' $INSTANCE_ID - {% endraw %} diff --git a/engine/reference/commandline/kill.md b/engine/reference/commandline/kill.md deleted file mode 100644 index 04b9d83792..0000000000 --- a/engine/reference/commandline/kill.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -redirect_from: - - /reference/commandline/kill/ -description: The kill command description and usage -keywords: -- container, kill, signal -title: docker kill ---- - -```markdown -Usage: docker kill [OPTIONS] CONTAINER [CONTAINER...] - -Kill one or more running containers - -Options: - --help Print usage - -s, --signal string Signal to send to the container (default "KILL") -``` - -The main process inside the container will be sent `SIGKILL`, or any -signal specified with option `--signal`. - -> **Note:** -> `ENTRYPOINT` and `CMD` in the *shell* form run as a subcommand of `/bin/sh -c`, -> which does not pass signals. This means that the executable is not the container’s PID 1 -> and does not receive Unix signals. diff --git a/engine/reference/commandline/load.md b/engine/reference/commandline/load.md deleted file mode 100644 index f73821dc7f..0000000000 --- a/engine/reference/commandline/load.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -redirect_from: - - /reference/commandline/load/ -description: The load command description and usage -keywords: -- stdin, tarred, repository -title: docker load ---- - -```markdown -Usage: docker load [OPTIONS] - -Load an image from a tar archive or STDIN - -Options: - --help Print usage - -i, --input string Read from tar archive file, instead of STDIN. - The tarball may be compressed with gzip, bzip, or xz - -q, --quiet Suppress the load output but still outputs the imported images -``` - -Loads a tarred repository from a file or the standard input stream. -Restores both images and tags. - - $ docker images - REPOSITORY TAG IMAGE ID CREATED SIZE - $ docker load < busybox.tar.gz - # […] - Loaded image: busybox:latest - $ docker images - REPOSITORY TAG IMAGE ID CREATED SIZE - busybox latest 769b9341d937 7 weeks ago 2.489 MB - $ docker load --input fedora.tar - # […] - Loaded image: fedora:rawhide - # […] - Loaded image: fedora:20 - # […] - $ docker images - REPOSITORY TAG IMAGE ID CREATED SIZE - busybox latest 769b9341d937 7 weeks ago 2.489 MB - fedora rawhide 0d20aec6529d 7 weeks ago 387 MB - fedora 20 58394af37342 7 weeks ago 385.5 MB - fedora heisenbug 58394af37342 7 weeks ago 385.5 MB - fedora latest 58394af37342 7 weeks ago 385.5 MB diff --git a/engine/reference/commandline/login.md b/engine/reference/commandline/login.md deleted file mode 100644 index 7fe8d6a43e..0000000000 --- a/engine/reference/commandline/login.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -redirect_from: - - /reference/commandline/login/ -description: The login command description and usage -keywords: -- registry, login, image -title: docker login ---- - -```markdown -Usage: docker login [OPTIONS] [SERVER] - -Log in to a Docker registry. -If no server is specified, the default is defined by the daemon. - -Options: - --help Print usage - -p, --password string Password - -u, --username string Username -``` - -If you want to login to a self-hosted registry you can specify this by -adding the server name. - - example: - $ docker login localhost:8080 - - -`docker login` requires user to use `sudo` or be `root`, except when: - -1. connecting to a remote daemon, such as a `docker-machine` provisioned `docker engine`. -2. user is added to the `docker` group. This will impact the security of your system; the `docker` group is `root` equivalent. See [Docker Daemon Attack Surface](/security/security/#docker-daemon-attack-surface) for details. - -You can log into any public or private repository for which you have -credentials. When you log in, the command stores encoded credentials in -`$HOME/.docker/config.json` on Linux or `%USERPROFILE%/.docker/config.json` on Windows. - -## Credentials store - -The Docker Engine can keep user credentials in an external credentials store, -such as the native keychain of the operating system. Using an external store -is more secure than storing credentials in the Docker configuration file. - -To use a credentials store, you need an external helper program to interact -with a specific keychain or external store. Docker requires the helper -program to be in the client's host `$PATH`. - -This is the list of currently available credentials helpers and where -you can download them from: - -- D-Bus Secret Service: https://github.com/docker/docker-credential-helpers/releases -- Apple macOS keychain: https://github.com/docker/docker-credential-helpers/releases -- Microsoft Windows Credential Manager: https://github.com/docker/docker-credential-helpers/releases - -### Usage - -You need to specify the credentials store in `$HOME/.docker/config.json` -to tell the docker engine to use it: - -```json -{ - "credsStore": "osxkeychain" -} -``` - -If you are currently logged in, run `docker logout` to remove -the credentials from the file and run `docker login` again. - -### Protocol - -Credential helpers can be any program or script that follows a very simple protocol. -This protocol is heavily inspired by Git, but it differs in the information shared. - -The helpers always use the first argument in the command to identify the action. -There are only three possible values for that argument: `store`, `get`, and `erase`. - -The `store` command takes a JSON payload from the standard input. That payload carries -the server address, to identify the credential, the user name, and either a password -or an identity token. - -```json -{ - "ServerURL": "https://index.docker.io/v1", - "Username": "david", - "Secret": "passw0rd1" -} -``` - -If the secret being stored is an identity token, the Username should be set to -``. - -The `store` command can write error messages to `STDOUT` that the docker engine -will show if there was an issue. - -The `get` command takes a string payload from the standard input. That payload carries -the server address that the docker engine needs credentials for. This is -an example of that payload: `https://index.docker.io/v1`. - -The `get` command writes a JSON payload to `STDOUT`. Docker reads the user name -and password from this payload: - -```json -{ - "Username": "david", - "Secret": "passw0rd1" -} -``` - -The `erase` command takes a string payload from `STDIN`. That payload carries -the server address that the docker engine wants to remove credentials for. This is -an example of that payload: `https://index.docker.io/v1`. - -The `erase` command can write error messages to `STDOUT` that the docker engine -will show if there was an issue. diff --git a/engine/reference/commandline/logout.md b/engine/reference/commandline/logout.md deleted file mode 100644 index e5f55d7579..0000000000 --- a/engine/reference/commandline/logout.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -redirect_from: - - /reference/commandline/logout/ -description: The logout command description and usage -keywords: -- logout, docker, registry -title: docker logout ---- - -```markdown -Usage: docker logout [SERVER] - -Log out from a Docker registry. -If no server is specified, the default is defined by the daemon. - -Options: - --help Print usage -``` - -For example: - - $ docker logout localhost:8080 diff --git a/engine/reference/commandline/logs.md b/engine/reference/commandline/logs.md deleted file mode 100644 index 13bc2cd28c..0000000000 --- a/engine/reference/commandline/logs.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -redirect_from: - - /reference/commandline/logs/ -description: The logs command description and usage -keywords: -- logs, retrieve, docker -title: docker logs ---- - -```markdown -Usage: docker logs [OPTIONS] CONTAINER - -Fetch the logs of a container - -Options: - --details Show extra details provided to logs - -f, --follow Follow log output - --help Print usage - --since string Show logs since timestamp - --tail string Number of lines to show from the end of the logs (default "all") - -t, --timestamps Show timestamps -``` - -The `docker logs` command batch-retrieves logs present at the time of execution. - -> **Note**: this command is only functional for containers that are started with -> the `json-file` or `journald` logging driver. - -For more information about selecting and configuring login-drivers, refer to -[Configure logging drivers](../../admin/logging/overview.md). - -The `docker logs --follow` command will continue streaming the new output from -the container's `STDOUT` and `STDERR`. - -Passing a negative number or a non-integer to `--tail` is invalid and the -value is set to `all` in that case. - -The `docker logs --timestamps` command will add an [RFC3339Nano timestamp](https://golang.org/pkg/time/#pkg-constants) -, for example `2014-09-16T06:17:46.000000000Z`, to each -log entry. To ensure that the timestamps are aligned the -nano-second part of the timestamp will be padded with zero when necessary. - -The `docker logs --details` command will add on extra attributes, such as -environment variables and labels, provided to `--log-opt` when creating the -container. - -The `--since` option shows only the container logs generated after -a given date. You can specify the date as an RFC 3339 date, a UNIX -timestamp, or a Go duration string (e.g. `1m30s`, `3h`). Besides RFC3339 date -format you may also use RFC3339Nano, `2006-01-02T15:04:05`, -`2006-01-02T15:04:05.999999999`, `2006-01-02Z07:00`, and `2006-01-02`. The local -timezone on the client will be used if you do not provide either a `Z` or a -`+-00:00` timezone offset at the end of the timestamp. When providing Unix -timestamps enter seconds[.nanoseconds], where seconds is the number of seconds -that have elapsed since January 1, 1970 (midnight UTC/GMT), not counting leap -seconds (aka Unix epoch or Unix time), and the optional .nanoseconds field is a -fraction of a second no more than nine digits long. You can combine the -`--since` option with either or both of the `--follow` or `--tail` options. diff --git a/engine/reference/commandline/network_connect.md b/engine/reference/commandline/network_connect.md deleted file mode 100644 index a4ef2ebb4f..0000000000 --- a/engine/reference/commandline/network_connect.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -redirect_from: - - /reference/commandline/network_connect/ -description: The network connect command description and usage -keywords: -- network, connect, user-defined -title: docker network connect ---- - -```markdown -Usage: docker network connect [OPTIONS] NETWORK CONTAINER - -Connect a container to a network - -Options: - --alias value Add network-scoped alias for the container (default []) - --help Print usage - --ip string IP Address - --ip6 string IPv6 Address - --link value Add link to another container (default []) - --link-local-ip value Add a link-local address for the container (default []) -``` - -Connects a container to a network. You can connect a container by name -or by ID. Once connected, the container can communicate with other containers in -the same network. - -```bash -$ docker network connect multi-host-network container1 -``` - -You can also use the `docker run --network=` option to start a container and immediately connect it to a network. - -```bash -$ docker run -itd --network=multi-host-network busybox -``` - -You can specify the IP address you want to be assigned to the container's interface. - -```bash -$ docker network connect --ip 10.10.36.122 multi-host-network container2 -``` - -You can use `--link` option to link another container with a preferred alias - -```bash -$ docker network connect --link container1:c1 multi-host-network container2 -``` - -`--alias` option can be used to resolve the container by another name in the network -being connected to. - -```bash -$ docker network connect --alias db --alias mysql multi-host-network container2 -``` - -You can pause, restart, and stop containers that are connected to a network. -Paused containers remain connected and can be revealed by a `network inspect`. -When the container is stopped, it does not appear on the network until you restart -it. - -If specified, the container's IP address(es) is reapplied when a stopped -container is restarted. If the IP address is no longer available, the container -fails to start. One way to guarantee that the IP address is available is -to specify an `--ip-range` when creating the network, and choose the static IP -address(es) from outside that range. This ensures that the IP address is not -given to another container while this container is not on the network. - -```bash -$ docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 multi-host-network -``` - -```bash -$ docker network connect --ip 172.20.128.2 multi-host-network container2 -``` - -To verify the container is connected, use the `docker network inspect` command. Use `docker network disconnect` to remove a container from the network. - -Once connected in network, containers can communicate using only another -container's IP address or name. For `overlay` networks or custom plugins that -support multi-host connectivity, containers connected to the same multi-host -network but launched from different Engines can also communicate in this way. - -You can connect a container to one or more networks. The networks need not be the same type. For example, you can connect a single container bridge and overlay networks. - -## Related information - -* [network inspect](network_inspect.md) -* [network create](network_create.md) -* [network disconnect](network_disconnect.md) -* [network ls](network_ls.md) -* [network rm](network_rm.md) -* [Understand Docker container networks](../../userguide/networking/index.md) -* [Work with networks](../../userguide/networking/work-with-networks.md) diff --git a/engine/reference/commandline/network_create.md b/engine/reference/commandline/network_create.md deleted file mode 100644 index 6beb3ddf06..0000000000 --- a/engine/reference/commandline/network_create.md +++ /dev/null @@ -1,192 +0,0 @@ ---- -redirect_from: - - /reference/commandline/network_create/ -description: The network create command description and usage -keywords: -- network, create -title: docker network create ---- - -```markdown -Usage: docker network create [OPTIONS] NETWORK - -Create a network - -Options: - --aux-address value Auxiliary IPv4 or IPv6 addresses used by Network - driver (default map[]) - -d, --driver string Driver to manage the Network (default "bridge") - --gateway value IPv4 or IPv6 Gateway for the master subnet (default []) - --help Print usage - --internal Restrict external access to the network - --ip-range value Allocate container ip from a sub-range (default []) - --ipam-driver string IP Address Management Driver (default "default") - --ipam-opt value Set IPAM driver specific options (default map[]) - --ipv6 Enable IPv6 networking - --label value Set metadata on a network (default []) - -o, --opt value Set driver specific options (default map[]) - --subnet value Subnet in CIDR format that represents a - network segment (default []) -``` - -Creates a new network. The `DRIVER` accepts `bridge` or `overlay` which are the -built-in network drivers. If you have installed a third party or your own custom -network driver you can specify that `DRIVER` here also. If you don't specify the -`--driver` option, the command automatically creates a `bridge` network for you. -When you install Docker Engine it creates a `bridge` network automatically. This -network corresponds to the `docker0` bridge that Engine has traditionally relied -on. When you launch a new container with `docker run` it automatically connects to -this bridge network. You cannot remove this default bridge network, but you can -create new ones using the `network create` command. - -```bash -$ docker network create -d bridge my-bridge-network -``` - -Bridge networks are isolated networks on a single Engine installation. If you -want to create a network that spans multiple Docker hosts each running an -Engine, you must create an `overlay` network. Unlike `bridge` networks, overlay -networks require some pre-existing conditions before you can create one. These -conditions are: - -* Access to a key-value store. Engine supports Consul, Etcd, and ZooKeeper (Distributed store) key-value stores. -* A cluster of hosts with connectivity to the key-value store. -* A properly configured Engine `daemon` on each host in the cluster. - -The `dockerd` options that support the `overlay` network are: - -* `--cluster-store` -* `--cluster-store-opt` -* `--cluster-advertise` - -To read more about these options and how to configure them, see ["*Get started -with multi-host network*"](../../userguide/networking/get-started-overlay.md). - -While not required, it is a good idea to install Docker Swarm to -manage the cluster that makes up your network. Swarm provides sophisticated -discovery and server management tools that can assist your implementation. - -Once you have prepared the `overlay` network prerequisites you simply choose a -Docker host in the cluster and issue the following to create the network: - -```bash -$ docker network create -d overlay my-multihost-network -``` - -Network names must be unique. The Docker daemon attempts to identify naming -conflicts but this is not guaranteed. It is the user's responsibility to avoid -name conflicts. - -## Connect containers - -When you start a container, use the `--network` flag to connect it to a network. -This example adds the `busybox` container to the `mynet` network: - -```bash -$ docker run -itd --network=mynet busybox -``` - -If you want to add a container to a network after the container is already -running, use the `docker network connect` subcommand. - -You can connect multiple containers to the same network. Once connected, the -containers can communicate using only another container's IP address or name. -For `overlay` networks or custom plugins that support multi-host connectivity, -containers connected to the same multi-host network but launched from different -Engines can also communicate in this way. - -You can disconnect a container from a network using the `docker network -disconnect` command. - -## Specifying advanced options - -When you create a network, Engine creates a non-overlapping subnetwork for the -network by default. This subnetwork is not a subdivision of an existing -network. It is purely for ip-addressing purposes. You can override this default -and specify subnetwork values directly using the `--subnet` option. On a -`bridge` network you can only create a single subnet: - -```bash -$ docker network create --driver=bridge --subnet=192.168.0.0/16 br0 -``` - -Additionally, you also specify the `--gateway` `--ip-range` and `--aux-address` -options. - -```bash -$ docker network create \ - --driver=bridge \ - --subnet=172.28.0.0/16 \ - --ip-range=172.28.5.0/24 \ - --gateway=172.28.5.254 \ - br0 -``` - -If you omit the `--gateway` flag the Engine selects one for you from inside a -preferred pool. For `overlay` networks and for network driver plugins that -support it you can create multiple subnetworks. - -```bash -$ docker network create -d overlay \ - --subnet=192.168.0.0/16 \ - --subnet=192.170.0.0/16 \ - --gateway=192.168.0.100 \ - --gateway=192.170.0.100 \ - --ip-range=192.168.1.0/24 \ - --aux-address="my-router=192.168.1.5" --aux-address="my-switch=192.168.1.6" \ - --aux-address="my-printer=192.170.1.5" --aux-address="my-nas=192.170.1.6" \ - my-multihost-network -``` - -Be sure that your subnetworks do not overlap. If they do, the network create -fails and Engine returns an error. - -# Bridge driver options - -When creating a custom network, the default network driver (i.e. `bridge`) has -additional options that can be passed. The following are those options and the -equivalent docker daemon flags used for docker0 bridge: - -| Option | Equivalent | Description | -|--------------------------------------------------|-------------|-------------------------------------------------------| -| `com.docker.network.bridge.name` | - | bridge name to be used when creating the Linux bridge | -| `com.docker.network.bridge.enable_ip_masquerade` | `--ip-masq` | Enable IP masquerading | -| `com.docker.network.bridge.enable_icc` | `--icc` | Enable or Disable Inter Container Connectivity | -| `com.docker.network.bridge.host_binding_ipv4` | `--ip` | Default IP when binding container ports | -| `com.docker.network.driver.mtu` | `--mtu` | Set the containers network MTU | - -The following arguments can be passed to `docker network create` for any -network driver, again with their approximate equivalents to `docker daemon`. - -| Argument | Equivalent | Description | -|--------------|----------------|--------------------------------------------| -| `--gateway` | - | IPv4 or IPv6 Gateway for the master subnet | -| `--ip-range` | `--fixed-cidr` | Allocate IPs from a range | -| `--internal` | - | Restrict external access to the network | -| `--ipv6` | `--ipv6` | Enable IPv6 networking | -| `--subnet` | `--bip` | Subnet for network | - -For example, let's use `-o` or `--opt` options to specify an IP address binding -when publishing ports: - -```bash -$ docker network create \ - -o "com.docker.network.bridge.host_binding_ipv4"="172.19.0.1" \ - simple-network -``` - -### Network internal mode - -By default, when you connect a container to an `overlay` network, Docker also -connects a bridge network to it to provide external connectivity. If you want -to create an externally isolated `overlay` network, you can specify the -`--internal` option. - -## Related information - -* [network inspect](network_inspect.md) -* [network connect](network_connect.md) -* [network disconnect](network_disconnect.md) -* [network ls](network_ls.md) -* [network rm](network_rm.md) -* [Understand Docker container networks](../../userguide/networking/index.md) diff --git a/engine/reference/commandline/network_disconnect.md b/engine/reference/commandline/network_disconnect.md deleted file mode 100644 index 8b49edaf6d..0000000000 --- a/engine/reference/commandline/network_disconnect.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -redirect_from: - - /reference/commandline/network_disconnect/ -description: The network disconnect command description and usage -keywords: -- network, disconnect, user-defined -title: docker network disconnect ---- - -```markdown -Usage: docker network disconnect [OPTIONS] NETWORK CONTAINER - -Disconnect a container from a network - -Options: - -f, --force Force the container to disconnect from a network - --help Print usage -``` - -Disconnects a container from a network. The container must be running to disconnect it from the network. - -```bash - $ docker network disconnect multi-host-network container1 -``` - - -## Related information - -* [network inspect](network_inspect.md) -* [network connect](network_connect.md) -* [network create](network_create.md) -* [network ls](network_ls.md) -* [network rm](network_rm.md) -* [Understand Docker container networks](../../userguide/networking/index.md) diff --git a/engine/reference/commandline/network_inspect.md b/engine/reference/commandline/network_inspect.md deleted file mode 100644 index 173dd9c391..0000000000 --- a/engine/reference/commandline/network_inspect.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -redirect_from: - - /reference/commandline/network_inspect/ -description: The network inspect command description and usage -keywords: -- network, inspect, user-defined -title: docker network inspect ---- - -```markdown -Usage: docker network inspect [OPTIONS] NETWORK [NETWORK...] - -Display detailed information on one or more networks - -Options: - -f, --format string Format the output using the given go template - --help Print usage -``` - -Returns information about one or more networks. By default, this command renders all results in a JSON object. For example, if you connect two containers to the default `bridge` network: - -```bash -$ sudo docker run -itd --name=container1 busybox -f2870c98fd504370fb86e59f32cd0753b1ac9b69b7d80566ffc7192a82b3ed27 - -$ sudo docker run -itd --name=container2 busybox -bda12f8922785d1f160be70736f26c1e331ab8aaf8ed8d56728508f2e2fd4727 -``` - -The `network inspect` command shows the containers, by id, in its -results. For networks backed by multi-host network driver, such as Overlay, -this command also shows the container endpoints in other hosts in the -cluster. These endpoints are represented as "ep-{endpoint-id}" in the output. -You can specify an alternate format to execute a given -template for each result. Go's -[text/template](http://golang.org/pkg/text/template/) package describes all the -details of the format. - -```bash -$ sudo docker network inspect bridge -[ - { - "Name": "bridge", - "Id": "b2b1a2cba717161d984383fd68218cf70bbbd17d328496885f7c921333228b0f", - "Scope": "local", - "Driver": "bridge", - "IPAM": { - "Driver": "default", - "Config": [ - { - "Subnet": "172.17.42.1/16", - "Gateway": "172.17.42.1" - } - ] - }, - "Internal": false, - "Containers": { - "bda12f8922785d1f160be70736f26c1e331ab8aaf8ed8d56728508f2e2fd4727": { - "Name": "container2", - "EndpointID": "0aebb8fcd2b282abe1365979536f21ee4ceaf3ed56177c628eae9f706e00e019", - "MacAddress": "02:42:ac:11:00:02", - "IPv4Address": "172.17.0.2/16", - "IPv6Address": "" - }, - "f2870c98fd504370fb86e59f32cd0753b1ac9b69b7d80566ffc7192a82b3ed27": { - "Name": "container1", - "EndpointID": "a00676d9c91a96bbe5bcfb34f705387a33d7cc365bac1a29e4e9728df92d10ad", - "MacAddress": "02:42:ac:11:00:01", - "IPv4Address": "172.17.0.1/16", - "IPv6Address": "" - } - }, - "Options": { - "com.docker.network.bridge.default_bridge": "true", - "com.docker.network.bridge.enable_icc": "true", - "com.docker.network.bridge.enable_ip_masquerade": "true", - "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", - "com.docker.network.bridge.name": "docker0", - "com.docker.network.driver.mtu": "1500" - } - } -] -``` - -Returns the information about the user-defined network: - -```bash -$ docker network create simple-network -69568e6336d8c96bbf57869030919f7c69524f71183b44d80948bd3927c87f6a -$ docker network inspect simple-network -[ - { - "Name": "simple-network", - "Id": "69568e6336d8c96bbf57869030919f7c69524f71183b44d80948bd3927c87f6a", - "Scope": "local", - "Driver": "bridge", - "IPAM": { - "Driver": "default", - "Config": [ - { - "Subnet": "172.22.0.0/16", - "Gateway": "172.22.0.1/16" - } - ] - }, - "Containers": {}, - "Options": {} - } -] -``` - -## Related information - -* [network disconnect ](network_disconnect.md) -* [network connect](network_connect.md) -* [network create](network_create.md) -* [network ls](network_ls.md) -* [network rm](network_rm.md) -* [Understand Docker container networks](../../userguide/networking/index.md) diff --git a/engine/reference/commandline/network_ls.md b/engine/reference/commandline/network_ls.md deleted file mode 100644 index 4143759b44..0000000000 --- a/engine/reference/commandline/network_ls.md +++ /dev/null @@ -1,176 +0,0 @@ ---- -redirect_from: - - /reference/commandline/network_ls/ -description: The network ls command description and usage -keywords: -- network, list, user-defined -title: docker network ls ---- - -```markdown -Usage: docker network ls [OPTIONS] - -List networks - -Aliases: - ls, list - -Options: - -f, --filter value Provide filter values (i.e. 'dangling=true') (default []) - --help Print usage - --no-trunc Do not truncate the output - -q, --quiet Only display network IDs -``` - -Lists all the networks the Engine `daemon` knows about. This includes the -networks that span across multiple hosts in a cluster, for example: - -```bash - $ sudo docker network ls - NETWORK ID NAME DRIVER - 7fca4eb8c647 bridge bridge - 9f904ee27bf5 none null - cf03ee007fb4 host host - 78b03ee04fc4 multi-host overlay -``` - -Use the `--no-trunc` option to display the full network id: - -```bash -docker network ls --no-trunc -NETWORK ID NAME DRIVER -18a2866682b85619a026c81b98a5e375bd33e1b0936a26cc497c283d27bae9b3 none null -c288470c46f6c8949c5f7e5099b5b7947b07eabe8d9a27d79a9cbf111adcbf47 host host -7b369448dccbf865d397c8d2be0cda7cf7edc6b0945f77d2529912ae917a0185 bridge bridge -95e74588f40db048e86320c6526440c504650a1ff3e9f7d60a497c4d2163e5bd foo bridge -63d1ff1f77b07ca51070a8c227e962238358bd310bde1529cf62e6c307ade161 dev bridge -``` - -## Filtering - -The filtering flag (`-f` or `--filter`) format is a `key=value` pair. If there -is more than one filter, then pass multiple flags (e.g. `--filter "foo=bar" --filter "bif=baz"`). -Multiple filter flags are combined as an `OR` filter. For example, -`-f type=custom -f type=builtin` returns both `custom` and `builtin` networks. - -The currently supported filters are: - -* driver -* id (network's id) -* label (`label=` or `label==`) -* name (network's name) -* type (custom|builtin) - -#### Driver - -The `driver` filter matches networks based on their driver. - -The following example matches networks with the `bridge` driver: - -```bash -$ docker network ls --filter driver=bridge -NETWORK ID NAME DRIVER -db9db329f835 test1 bridge -f6e212da9dfd test2 bridge -``` - -#### ID - -The `id` filter matches on all or part of a network's ID. - -The following filter matches all networks with an ID containing the -`63d1ff1f77b0...` string. - -```bash -$ docker network ls --filter id=63d1ff1f77b07ca51070a8c227e962238358bd310bde1529cf62e6c307ade161 -NETWORK ID NAME DRIVER -63d1ff1f77b0 dev bridge -``` - -You can also filter for a substring in an ID as this shows: - -```bash -$ docker network ls --filter id=95e74588f40d -NETWORK ID NAME DRIVER -95e74588f40d foo bridge - -$ docker network ls --filter id=95e -NETWORK ID NAME DRIVER -95e74588f40d foo bridge -``` - -#### Label - -The `label` filter matches networks based on the presence of a `label` alone or a `label` and a -value. - -The following filter matches networks with the `usage` label regardless of its value. - -```bash -$ docker network ls -f "label=usage" -NETWORK ID NAME DRIVER -db9db329f835 test1 bridge -f6e212da9dfd test2 bridge -``` - -The following filter matches networks with the `usage` label with the `prod` value. - -```bash -$ docker network ls -f "label=usage=prod" -NETWORK ID NAME DRIVER -f6e212da9dfd test2 bridge -``` - -#### Name - -The `name` filter matches on all or part of a network's name. - -The following filter matches all networks with a name containing the `foobar` string. - -```bash -$ docker network ls --filter name=foobar -NETWORK ID NAME DRIVER -06e7eef0a170 foobar bridge -``` - -You can also filter for a substring in a name as this shows: - -```bash -$ docker network ls --filter name=foo -NETWORK ID NAME DRIVER -95e74588f40d foo bridge -06e7eef0a170 foobar bridge -``` - -#### Type - -The `type` filter supports two values; `builtin` displays predefined networks -(`bridge`, `none`, `host`), whereas `custom` displays user defined networks. - -The following filter matches all user defined networks: - -```bash -$ docker network ls --filter type=custom -NETWORK ID NAME DRIVER -95e74588f40d foo bridge -63d1ff1f77b0 dev bridge -``` - -By having this flag it allows for batch cleanup. For example, use this filter -to delete all user defined networks: - -```bash -$ docker network rm `docker network ls --filter type=custom -q` -``` - -A warning will be issued when trying to remove a network that has containers -attached. - -## Related information - -* [network disconnect ](network_disconnect.md) -* [network connect](network_connect.md) -* [network create](network_create.md) -* [network inspect](network_inspect.md) -* [network rm](network_rm.md) -* [Understand Docker container networks](../../userguide/networking/index.md) diff --git a/engine/reference/commandline/network_rm.md b/engine/reference/commandline/network_rm.md deleted file mode 100644 index 59e3e1ab87..0000000000 --- a/engine/reference/commandline/network_rm.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -redirect_from: - - /reference/commandline/network_rm/ -description: the network rm command description and usage -keywords: -- network, rm, user-defined -title: docker network rm ---- - -```markdown -Usage: docker network rm NETWORK [NETWORK...] - -Remove one or more networks - -Aliases: - rm, remove - -Options: - --help Print usage -``` - -Removes one or more networks by name or identifier. To remove a network, -you must first disconnect any containers connected to it. -To remove the network named 'my-network': - -```bash - $ docker network rm my-network -``` - -To delete multiple networks in a single `docker network rm` command, provide -multiple network names or ids. The following example deletes a network with id -`3695c422697f` and a network named `my-network`: - -```bash - $ docker network rm 3695c422697f my-network -``` - -When you specify multiple networks, the command attempts to delete each in turn. -If the deletion of one network fails, the command continues to the next on the -list and tries to delete that. The command reports success or failure for each -deletion. - -## Related information - -* [network disconnect ](network_disconnect.md) -* [network connect](network_connect.md) -* [network create](network_create.md) -* [network ls](network_ls.md) -* [network inspect](network_inspect.md) -* [Understand Docker container networks](../../userguide/networking/index.md) diff --git a/engine/reference/commandline/node_demote.md b/engine/reference/commandline/node_demote.md deleted file mode 100644 index e6ab0d6b4f..0000000000 --- a/engine/reference/commandline/node_demote.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -redirect_from: - - /reference/commandline/node_demote/ -description: The node demote command description and usage -keywords: -- node, demote -title: docker node demote ---- - -```markdown -Usage: docker node demote NODE [NODE...] - -Demote one or more nodes from manager in the swarm - -Options: - --help Print usage - -``` - -Demotes an existing manager so that it is no longer a manager. This command targets a docker engine that is a manager in the swarm. - - -```bash -$ docker node demote -``` - -## Related information - -* [node promote](node_promote.md) diff --git a/engine/reference/commandline/node_inspect.md b/engine/reference/commandline/node_inspect.md deleted file mode 100644 index ca94edb56b..0000000000 --- a/engine/reference/commandline/node_inspect.md +++ /dev/null @@ -1,127 +0,0 @@ ---- -redirect_from: - - /reference/commandline/node_inspect/ -description: The node inspect command description and usage -keywords: -- node, inspect -title: docker node inspect ---- - -**Warning:** this command is part of the Swarm management feature introduced in Docker 1.12, and might be subject to non backward-compatible changes. - -```markdown -Usage: docker node inspect [OPTIONS] self|NODE [NODE...] - -Display detailed information on one or more nodes - -Options: - -f, --format string Format the output using the given go template - --help Print usage - --pretty Print the information in a human friendly format. -``` - -Returns information about a node. By default, this command renders all results -in a JSON array. You can specify an alternate format to execute a -given template for each result. Go's -[text/template](http://golang.org/pkg/text/template/) package describes all the -details of the format. - -Example output: - - $ docker node inspect swarm-manager - [ - { - "ID": "e216jshn25ckzbvmwlnh5jr3g", - "Version": { - "Index": 10 - }, - "CreatedAt": "2016-06-16T22:52:44.9910662Z", - "UpdatedAt": "2016-06-16T22:52:45.230878043Z", - "Spec": { - "Role": "manager", - "Availability": "active" - }, - "Description": { - "Hostname": "swarm-manager", - "Platform": { - "Architecture": "x86_64", - "OS": "linux" - }, - "Resources": { - "NanoCPUs": 1000000000, - "MemoryBytes": 1039843328 - }, - "Engine": { - "EngineVersion": "1.12.0", - "Plugins": [ - { - "Type": "Volume", - "Name": "local" - }, - { - "Type": "Network", - "Name": "overlay" - }, - { - "Type": "Network", - "Name": "null" - }, - { - "Type": "Network", - "Name": "host" - }, - { - "Type": "Network", - "Name": "bridge" - }, - { - "Type": "Network", - "Name": "overlay" - } - ] - } - }, - "Status": { - "State": "ready" - }, - "ManagerStatus": { - "Leader": true, - "Reachability": "reachable", - "Addr": "168.0.32.137:2377" - } - } - ] - - {% raw %} - $ docker node inspect --format '{{ .ManagerStatus.Leader }}' self - false - {% endraw %} - - $ docker node inspect --pretty self - ID: e216jshn25ckzbvmwlnh5jr3g - Hostname: swarm-manager - Joined at: 2016-06-16 22:52:44.9910662 +0000 utc - Status: - State: Ready - Availability: Active - Manager Status: - Address: 172.17.0.2:2377 - Raft Status: Reachable - Leader: Yes - Platform: - Operating System: linux - Architecture: x86_64 - Resources: - CPUs: 4 - Memory: 7.704 GiB - Plugins: - Network: overlay, bridge, null, host, overlay - Volume: local - Engine Version: 1.12.0 - -## Related information - -* [node update](node_update.md) -* [node ps](node_ps.md) -* [node ls](node_ls.md) -* [node rm](node_rm.md) diff --git a/engine/reference/commandline/node_ls.md b/engine/reference/commandline/node_ls.md deleted file mode 100644 index d231a368de..0000000000 --- a/engine/reference/commandline/node_ls.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -redirect_from: - - /reference/commandline/node_ls/ -description: The node ls command description and usage -keywords: -- node, list -title: docker node ls ---- - -**Warning:** this command is part of the Swarm management feature introduced in Docker 1.12, and might be subject to non backward-compatible changes. - -```markdown -Usage: docker node ls [OPTIONS] - -List nodes in the swarm - -Aliases: - ls, list - -Options: - -f, --filter value Filter output based on conditions provided - --help Print usage - -q, --quiet Only display IDs -``` - -Lists all the nodes that the Docker Swarm manager knows about. You can filter using the `-f` or `--filter` flag. Refer to the [filtering](node_ls.md#filtering) section for more information about available filter options. - -Example output: - -```bash -$ docker node ls - -ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS -1bcef6utixb0l0ca7gxuivsj0 swarm-worker2 Ready Active -38ciaotwjuritcdtn9npbnkuz swarm-worker1 Ready Active -e216jshn25ckzbvmwlnh5jr3g * swarm-manager1 Ready Active Leader -``` - -## Filtering - -The filtering flag (`-f` or `--filter`) format is of "key=value". If there is more -than one filter, then pass multiple flags (e.g., `--filter "foo=bar" --filter "bif=baz"`) - -The currently supported filters are: - -* name -* id -* label - -### name - -The `name` filter matches on all or part of a node name. - -The following filter matches the node with a name equal to `swarm-master` string. - -```bash -$ docker node ls -f name=swarm-manager1 - -ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS -e216jshn25ckzbvmwlnh5jr3g * swarm-manager1 Ready Active Leader -``` - -### id - -The `id` filter matches all or part of a node's id. - -```bash -$ docker node ls -f id=1 - -ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS -1bcef6utixb0l0ca7gxuivsj0 swarm-worker2 Ready Active -``` - -#### label - -The `label` filter matches tasks based on the presence of a `label` alone or a `label` and a -value. - -The following filter matches nodes with the `usage` label regardless of its value. - -```bash -$ docker node ls -f "label=foo" - -ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS -1bcef6utixb0l0ca7gxuivsj0 swarm-worker2 Ready Active -``` - - -## Related information - -* [node inspect](node_inspect.md) -* [node update](node_update.md) -* [node ps](node_ps.md) -* [node rm](node_rm.md) diff --git a/engine/reference/commandline/node_promote.md b/engine/reference/commandline/node_promote.md deleted file mode 100644 index 4b50de1f36..0000000000 --- a/engine/reference/commandline/node_promote.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -redirect_from: - - /reference/commandline/node_promote/ -description: The node promote command description and usage -keywords: -- node, promote -title: docker node promote ---- - -```markdown -Usage: docker node promote NODE [NODE...] - -Promote one or more nodes to manager in the swarm - -Options: - --help Print usage -``` - -Promotes a node to manager. This command targets a docker engine that is a manager in the swarm. - - -```bash -$ docker node promote -``` - -## Related information - -* [node demote](node_demote.md) diff --git a/engine/reference/commandline/node_ps.md b/engine/reference/commandline/node_ps.md deleted file mode 100644 index d023f728d6..0000000000 --- a/engine/reference/commandline/node_ps.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -redirect_from: - - /reference/commandline/node_ps/ - - /engine/reference/commandline/node_tasks/ -description: The node ps command description and usage -keywords: -- node, tasks -- ps -title: docker node ps ---- - -**Warning:** this command is part of the Swarm management feature introduced in Docker 1.12, and might be subject to non backward-compatible changes. - -```markdown -Usage: docker node ps [OPTIONS] self|NODE - -List tasks running on a node - -Options: - -a, --all Display all instances - -f, --filter value Filter output based on conditions provided - --help Print usage - --no-resolve Do not map IDs to Names -``` - -Lists all the tasks on a Node that Docker knows about. You can filter using the `-f` or `--filter` flag. Refer to the [filtering](node_ps.md#filtering) section for more information about available filter options. - -Example output: - - $ docker node ps swarm-manager1 - ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE - 7q92v0nr1hcgts2amcjyqg3pq redis.1 redis redis:3.0.6 Running 5 hours Running swarm-manager1 - b465edgho06e318egmgjbqo4o redis.6 redis redis:3.0.6 Running 29 seconds Running swarm-manager1 - bg8c07zzg87di2mufeq51a2qp redis.7 redis redis:3.0.6 Running 5 seconds Running swarm-manager1 - dkkual96p4bb3s6b10r7coxxt redis.9 redis redis:3.0.6 Running 5 seconds Running swarm-manager1 - 0tgctg8h8cech4w0k0gwrmr23 redis.10 redis redis:3.0.6 Running 5 seconds Running swarm-manager1 - - -## Filtering - -The filtering flag (`-f` or `--filter`) format is of "key=value". If there is more -than one filter, then pass multiple flags (e.g., `--filter "foo=bar" --filter "bif=baz"`) - -The currently supported filters are: - -* [name](node_ps.md#name) -* [id](node_ps.md#id) -* [label](node_ps.md#label) -* [desired-state](node_ps.md#desired-state) - -#### name - -The `name` filter matches on all or part of a task's name. - -The following filter matches all tasks with a name containing the `redis` string. - - $ docker node ps -f name=redis swarm-manager1 - ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE - 7q92v0nr1hcgts2amcjyqg3pq redis.1 redis redis:3.0.6 Running 5 hours Running swarm-manager1 - b465edgho06e318egmgjbqo4o redis.6 redis redis:3.0.6 Running 29 seconds Running swarm-manager1 - bg8c07zzg87di2mufeq51a2qp redis.7 redis redis:3.0.6 Running 5 seconds Running swarm-manager1 - dkkual96p4bb3s6b10r7coxxt redis.9 redis redis:3.0.6 Running 5 seconds Running swarm-manager1 - 0tgctg8h8cech4w0k0gwrmr23 redis.10 redis redis:3.0.6 Running 5 seconds Running swarm-manager1 - - -#### id - -The `id` filter matches a task's id. - - $ docker node ps -f id=bg8c07zzg87di2mufeq51a2qp swarm-manager1 - ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE - bg8c07zzg87di2mufeq51a2qp redis.7 redis redis:3.0.6 Running 5 seconds Running swarm-manager1 - - -#### label - -The `label` filter matches tasks based on the presence of a `label` alone or a `label` and a -value. - -The following filter matches tasks with the `usage` label regardless of its value. - -```bash -$ docker node ps -f "label=usage" -ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE -b465edgho06e318egmgjbqo4o redis.6 redis redis:3.0.6 Running 10 minutes Running swarm-manager1 -bg8c07zzg87di2mufeq51a2qp redis.7 redis redis:3.0.6 Running 9 minutes Running swarm-manager1 -``` - - -#### desired-state - -The `desired-state` filter can take the values `running`, `shutdown`, and `accepted`. - - -## Related information - -* [node inspect](node_inspect.md) -* [node update](node_update.md) -* [node ls](node_ls.md) -* [node rm](node_rm.md) diff --git a/engine/reference/commandline/node_rm.md b/engine/reference/commandline/node_rm.md deleted file mode 100644 index 757d6092fb..0000000000 --- a/engine/reference/commandline/node_rm.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -redirect_from: - - /reference/commandline/node_rm/ -description: The node rm command description and usage -keywords: -- node, remove -title: docker node rm ---- - -**Warning:** this command is part of the Swarm management feature introduced in Docker 1.12, and might be subject to non backward-compatible changes. - -```markdown -Usage: docker node rm [OPTIONS] NODE [NODE...] - -Remove one or more nodes from the swarm - -Aliases: - rm, remove - -Options: - --force Force remove an active node - --help Print usage -``` - -When run from a manager node, removes the specified nodes from a swarm. - - -Example output: - -```nohighlight -$ docker node rm swarm-node-02 - -Node swarm-node-02 removed from swarm -``` - -Removes the specified nodes from the swarm, but only if the nodes are in the -down state. If you attempt to remove an active node you will receive an error: - -```nohighlight -$ docker node rm swarm-node-03 - -Error response from daemon: rpc error: code = 9 desc = node swarm-node-03 is not -down and can't be removed -``` - -If you lose access to a worker node or need to shut it down because it has been -compromised or is not behaving as expected, you can use the `--force` option. -This may cause transient errors or interruptions, depending on the type of task -being run on the node. - -```nohighlight -$ docker node rm --force swarm-node-03 - -Node swarm-node-03 removed from swarm -``` - -A manager node must be demoted to a worker node (using `docker node demote`) -before you can remove it from the swarm. - -## Related information - -* [node inspect](node_inspect.md) -* [node update](node_update.md) -* [node demote](node_demote.md) -* [node ps](node_ps.md) -* [node ls](node_ls.md) diff --git a/engine/reference/commandline/node_update.md b/engine/reference/commandline/node_update.md deleted file mode 100644 index e22b5cd0d4..0000000000 --- a/engine/reference/commandline/node_update.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -redirect_from: - - /reference/commandline/node_update/ -description: The node update command description and usage -keywords: -- resources, update, dynamically -title: docker node update ---- - -**Warning:** this command is part of the Swarm management feature introduced in Docker 1.12, and might be subject to non backward-compatible changes. - -```markdown -Usage: docker node update [OPTIONS] NODE - -Update a node - -Options: - --availability string Availability of the node (active/pause/drain) - --help Print usage - --label-add value Add or update a node label (key=value) (default []) - --label-rm value Remove a node label if exists (default []) - --role string Role of the node (worker/manager) -``` - -### Add label metadata to a node - -Add metadata to a swarm node using node labels. You can specify a node label as -a key with an empty value: - -``` bash -$ docker node update --label-add foo worker1 -``` - -To add multiple labels to a node, pass the `--label-add` flag for each label: - -``` bash -$ docker node update --label-add foo --label-add bar worker1 -``` - -When you [create a service](service_create.md), -you can use node labels as a constraint. A constraint limits the nodes where the -scheduler deploys tasks for a service. - -For example, to add a `type` label to identify nodes where the scheduler should -deploy message queue service tasks: - -``` bash -$ docker node update --label-add type=queue worker1 -``` - -The labels you set for nodes using `docker node update` apply only to the node -entity within the swarm. Do not confuse them with the docker daemon labels for -[dockerd]( ../../userguide/labels-custom-metadata.md#daemon-labels). - -For more information about labels, refer to [apply custom -metadata](../../userguide/labels-custom-metadata.md). - -## Related information - -* [node inspect](node_inspect.md) -* [node ps](node_ps.md) -* [node ls](node_ls.md) -* [node rm](node_rm.md) diff --git a/engine/reference/commandline/pause.md b/engine/reference/commandline/pause.md deleted file mode 100644 index 974f758d21..0000000000 --- a/engine/reference/commandline/pause.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -redirect_from: - - /reference/commandline/pause/ -description: The pause command description and usage -keywords: -- cgroups, container, suspend, SIGSTOP -title: docker pause ---- - -```markdown -Usage: docker pause CONTAINER [CONTAINER...] - -Pause all processes within one or more containers - -Options: - --help Print usage -``` - -The `docker pause` command uses the cgroups freezer to suspend all processes in -a container. Traditionally, when suspending a process the `SIGSTOP` signal is -used, which is observable by the process being suspended. With the cgroups freezer -the process is unaware, and unable to capture, that it is being suspended, -and subsequently resumed. - -See the -[cgroups freezer documentation](https://www.kernel.org/doc/Documentation/cgroup-v1/freezer-subsystem.txt) -for further details. diff --git a/engine/reference/commandline/plugin_disable.md b/engine/reference/commandline/plugin_disable.md deleted file mode 100644 index 49f7d6ae91..0000000000 --- a/engine/reference/commandline/plugin_disable.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -redirect_from: - - /reference/commandline/plugin_disable/ -advisory: experimental -description: the plugin disable command description and usage -keywords: -- plugin, disable -title: docker plugin disable (experimental) ---- - -```markdown -Usage: docker plugin disable PLUGIN - -Disable a plugin - -Options: - --help Print usage -``` - -Disables a plugin. The plugin must be installed before it can be disabled, -see [`docker plugin install`](plugin_install.md). - - -The following example shows that the `no-remove` plugin is installed -and active: - -```bash -$ docker plugin ls - -NAME TAG ACTIVE -tiborvass/no-remove latest true -``` - -To disable the plugin, use the following command: - -```bash -$ docker plugin disable tiborvass/no-remove - -tiborvass/no-remove -``` - -After the plugin is disabled, it appears as "inactive" in the list of plugins: - -```bash -$ docker plugin ls - -NAME VERSION ACTIVE -tiborvass/no-remove latest false -``` - -## Related information - -* [plugin ls](plugin_ls.md) -* [plugin enable](plugin_enable.md) -* [plugin inspect](plugin_inspect.md) -* [plugin install](plugin_install.md) -* [plugin rm](plugin_rm.md) diff --git a/engine/reference/commandline/plugin_enable.md b/engine/reference/commandline/plugin_enable.md deleted file mode 100644 index e925154a2e..0000000000 --- a/engine/reference/commandline/plugin_enable.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -redirect_from: - - /reference/commandline/plugin_enable/ -advisory: experimental -description: the plugin enable command description and usage -keywords: -- plugin, enable -title: docker plugin enable (experimental) ---- - -```markdown -Usage: docker plugin enable PLUGIN - -Enable a plugin - -Options: - --help Print usage -``` - -Enables a plugin. The plugin must be installed before it can be enabled, -see [`docker plugin install`](plugin_install.md). - - -The following example shows that the `no-remove` plugin is installed, -but disabled ("inactive"): - -```bash -$ docker plugin ls - -NAME VERSION ACTIVE -tiborvass/no-remove latest false -``` - -To enable the plugin, use the following command: - -```bash -$ docker plugin enable tiborvass/no-remove - -tiborvass/no-remove -``` - -After the plugin is enabled, it appears as "active" in the list of plugins: - -```bash -$ docker plugin ls - -NAME VERSION ACTIVE -tiborvass/no-remove latest true -``` - -## Related information - -* [plugin ls](plugin_ls.md) -* [plugin disable](plugin_disable.md) -* [plugin inspect](plugin_inspect.md) -* [plugin install](plugin_install.md) -* [plugin rm](plugin_rm.md) diff --git a/engine/reference/commandline/plugin_inspect.md b/engine/reference/commandline/plugin_inspect.md deleted file mode 100644 index 653efd9b26..0000000000 --- a/engine/reference/commandline/plugin_inspect.md +++ /dev/null @@ -1,145 +0,0 @@ ---- -redirect_from: - - /reference/commandline/plugin_inspect/ -advisory: experimental -description: The plugin inspect command description and usage -keywords: -- plugin, inspect -title: docker plugin inspect (experimental) ---- - -```markdown -Usage: docker plugin inspect [OPTIONS] PLUGIN [PLUGIN...] - -Display detailed information on one or more plugins - -Options: - --help Print usage -``` - -Returns information about a plugin. By default, this command renders all results -in a JSON array. - -Example output: - -```bash -$ docker plugin inspect tiborvass/no-remove:latest -``` -```JSON -{ - "Id": "8c74c978c434745c3ade82f1bc0acf38d04990eaf494fa507c16d9f1daa99c21", - "Name": "tiborvass/no-remove", - "Tag": "latest", - "Active": true, - "Config": { - "Mounts": [ - { - "Name": "", - "Description": "", - "Settable": null, - "Source": "/data", - "Destination": "/data", - "Type": "bind", - "Options": [ - "shared", - "rbind" - ] - }, - { - "Name": "", - "Description": "", - "Settable": null, - "Source": null, - "Destination": "/foobar", - "Type": "tmpfs", - "Options": null - } - ], - "Env": [ - "DEBUG=1" - ], - "Args": null, - "Devices": null - }, - "Manifest": { - "ManifestVersion": "v0", - "Description": "A test plugin for Docker", - "Documentation": "https://docs.docker.com/engine/extend/plugins/", - "Interface": { - "Types": [ - "docker.volumedriver/1.0" - ], - "Socket": "plugins.sock" - }, - "Entrypoint": [ - "plugin-no-remove", - "/data" - ], - "Workdir": "", - "User": { - }, - "Network": { - "Type": "host" - }, - "Capabilities": null, - "Mounts": [ - { - "Name": "", - "Description": "", - "Settable": null, - "Source": "/data", - "Destination": "/data", - "Type": "bind", - "Options": [ - "shared", - "rbind" - ] - }, - { - "Name": "", - "Description": "", - "Settable": null, - "Source": null, - "Destination": "/foobar", - "Type": "tmpfs", - "Options": null - } - ], - "Devices": [ - { - "Name": "device", - "Description": "a host device to mount", - "Settable": null, - "Path": "/dev/cpu_dma_latency" - } - ], - "Env": [ - { - "Name": "DEBUG", - "Description": "If set, prints debug messages", - "Settable": null, - "Value": "1" - } - ], - "Args": { - "Name": "args", - "Description": "command line arguments", - "Settable": null, - "Value": [ - - ] - } - } -} -``` -(output formatted for readability) - - - -## Related information - -* [plugin ls](plugin_ls.md) -* [plugin enable](plugin_enable.md) -* [plugin disable](plugin_disable.md) -* [plugin install](plugin_install.md) -* [plugin rm](plugin_rm.md) diff --git a/engine/reference/commandline/plugin_install.md b/engine/reference/commandline/plugin_install.md deleted file mode 100644 index bd669f8370..0000000000 --- a/engine/reference/commandline/plugin_install.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -redirect_from: - - /reference/commandline/plugin_install/ -advisory: experimental -description: the plugin install command description and usage -keywords: -- plugin, install -title: docker plugin install (experimental) ---- - -```markdown -Usage: docker plugin install [OPTIONS] PLUGIN - -Install a plugin - -Options: - --disable do not enable the plugin on install - --grant-all-permissions grant all permissions necessary to run the plugin - --help Print usage -``` - -Installs and enables a plugin. Docker looks first for the plugin on your Docker -host. If the plugin does not exist locally, then the plugin is pulled from -Docker Hub. - - -The following example installs `no-remove` plugin. Install consists of pulling the -plugin from Docker Hub, prompting the user to accept the list of privileges that -the plugin needs and enabling the plugin. - -```bash -$ docker plugin install tiborvass/no-remove - -Plugin "tiborvass/no-remove" is requesting the following privileges: - - network: [host] - - mount: [/data] - - device: [/dev/cpu_dma_latency] -Do you grant the above permissions? [y/N] y -tiborvass/no-remove -``` - -After the plugin is installed, it appears in the list of plugins: - -```bash -$ docker plugin ls - -NAME VERSION ACTIVE -tiborvass/no-remove latest true -``` - -## Related information - -* [plugin ls](plugin_ls.md) -* [plugin enable](plugin_enable.md) -* [plugin disable](plugin_disable.md) -* [plugin inspect](plugin_inspect.md) -* [plugin rm](plugin_rm.md) diff --git a/engine/reference/commandline/plugin_ls.md b/engine/reference/commandline/plugin_ls.md deleted file mode 100644 index b3b21b7913..0000000000 --- a/engine/reference/commandline/plugin_ls.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -redirect_from: - - /reference/commandline/plugin_ls/ -advisory: experimental -description: The plugin ls command description and usage -keywords: -- plugin, list -title: docker plugin ls (experimental) ---- - -```markdown -Usage: docker plugin ls - -List plugins - -Aliases: - ls, list - -Options: - --help Print usage -``` - -Lists all the plugins that are currently installed. You can install plugins -using the [`docker plugin install`](plugin_install.md) command. - -Example output: - -```bash -$ docker plugin ls - -NAME VERSION ACTIVE -tiborvass/no-remove latest true -``` - -## Related information - -* [plugin enable](plugin_enable.md) -* [plugin disable](plugin_disable.md) -* [plugin inspect](plugin_inspect.md) -* [plugin install](plugin_install.md) -* [plugin rm](plugin_rm.md) diff --git a/engine/reference/commandline/plugin_rm.md b/engine/reference/commandline/plugin_rm.md deleted file mode 100644 index 06b72928cf..0000000000 --- a/engine/reference/commandline/plugin_rm.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -redirect_from: - - /reference/commandline/plugin_rm/ -advisory: experimental -description: the plugin rm command description and usage -keywords: -- plugin, rm -title: docker plugin rm (experimental) ---- - -```markdown -Usage: docker plugin rm PLUGIN - -Remove one or more plugins - -Aliases: - rm, remove - -Options: - --help Print usage -``` - -Removes a plugin. You cannot remove a plugin if it is active, you must disable -a plugin using the [`docker plugin disable`](plugin_disable.md) before removing -it. - -The following example disables and removes the `no-remove:latest` plugin; - -```bash -$ docker plugin disable tiborvass/no-remove -tiborvass/no-remove - -$ docker plugin rm tiborvass/no-remove:latest -tiborvass/no-remove -``` - -## Related information - -* [plugin ls](plugin_ls.md) -* [plugin enable](plugin_enable.md) -* [plugin disable](plugin_disable.md) -* [plugin inspect](plugin_inspect.md) -* [plugin install](plugin_install.md) diff --git a/engine/reference/commandline/port.md b/engine/reference/commandline/port.md deleted file mode 100644 index 9f87dae92d..0000000000 --- a/engine/reference/commandline/port.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -redirect_from: - - /reference/commandline/port/ -description: The port command description and usage -keywords: -- port, mapping, container -title: docker port ---- - -```markdown -Usage: docker port CONTAINER [PRIVATE_PORT[/PROTO]] - -List port mappings or a specific mapping for the container - -Options: - --help Print usage -``` - -You can find out all the ports mapped by not specifying a `PRIVATE_PORT`, or -just a specific mapping: - - $ docker ps - CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES - b650456536c7 busybox:latest top 54 minutes ago Up 54 minutes 0.0.0.0:1234->9876/tcp, 0.0.0.0:4321->7890/tcp test - $ docker port test - 7890/tcp -> 0.0.0.0:4321 - 9876/tcp -> 0.0.0.0:1234 - $ docker port test 7890/tcp - 0.0.0.0:4321 - $ docker port test 7890/udp - 2014/06/24 11:53:36 Error: No public port '7890/udp' published for test - $ docker port test 7890 - 0.0.0.0:4321 diff --git a/engine/reference/commandline/ps.md b/engine/reference/commandline/ps.md deleted file mode 100644 index 5febadbe0b..0000000000 --- a/engine/reference/commandline/ps.md +++ /dev/null @@ -1,372 +0,0 @@ ---- -redirect_from: - - /reference/commandline/ps/ -description: The ps command description and usage -keywords: -- container, running, list -title: docker ps ---- - -```markdown -Usage: docker ps [OPTIONS] - -List containers - -Options: - -a, --all Show all containers (default shows just running) - -f, --filter value Filter output based on conditions provided (default []) - - exited= an exit code of - - label= or label== - - status=(created|restarting|running|paused|exited) - - name= a container's name - - id= a container's ID - - before=(|) - - since=(|) - - ancestor=([:tag]||) - containers created from an image or a descendant. - --format string Pretty-print containers using a Go template - --help Print usage - -n, --last int Show n last created containers (includes all states) (default -1) - -l, --latest Show the latest created container (includes all states) - --no-trunc Don't truncate output - -q, --quiet Only display numeric IDs - -s, --size Display total file sizes -``` - -Running `docker ps --no-trunc` showing 2 linked containers. - -```bash -$ docker ps - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -4c01db0b339c ubuntu:12.04 bash 17 seconds ago Up 16 seconds 3300-3310/tcp webapp -d7886598dbe2 crosbymichael/redis:latest /redis-server --dir 33 minutes ago Up 33 minutes 6379/tcp redis,webapp/db -``` - -The `docker ps` command only shows running containers by default. To see all -containers, use the `-a` (or `--all`) flag: - -```bash -$ docker ps -a -``` - -`docker ps` groups exposed ports into a single range if possible. E.g., a -container that exposes TCP ports `100, 101, 102` displays `100-102/tcp` in -the `PORTS` column. - -## Filtering - -The filtering flag (`-f` or `--filter`) format is a `key=value` pair. If there is more -than one filter, then pass multiple flags (e.g. `--filter "foo=bar" --filter "bif=baz"`) - -The currently supported filters are: - -* id (container's id) -* label (`label=` or `label==`) -* name (container's name) -* exited (int - the code of exited containers. Only useful with `--all`) -* status (created|restarting|running|paused|exited|dead) -* ancestor (`[:]`, `` or ``) - filters containers that were created from the given image or a descendant. -* before (container's id or name) - filters containers created before given id or name -* since (container's id or name) - filters containers created since given id or name -* isolation (default|process|hyperv) (Windows daemon only) -* volume (volume name or mount point) - filters containers that mount volumes. -* network (network id or name) - filters containers connected to the provided network - -#### Label - -The `label` filter matches containers based on the presence of a `label` alone or a `label` and a -value. - -The following filter matches containers with the `color` label regardless of its value. - -```bash -$ docker ps --filter "label=color" - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -673394ef1d4c busybox "top" 47 seconds ago Up 45 seconds nostalgic_shockley -d85756f57265 busybox "top" 52 seconds ago Up 51 seconds high_albattani -``` - -The following filter matches containers with the `color` label with the `blue` value. - -```bash -$ docker ps --filter "label=color=blue" - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -d85756f57265 busybox "top" About a minute ago Up About a minute high_albattani -``` - -#### Name - -The `name` filter matches on all or part of a container's name. - -The following filter matches all containers with a name containing the `nostalgic_stallman` string. - -```bash -$ docker ps --filter "name=nostalgic_stallman" - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -9b6247364a03 busybox "top" 2 minutes ago Up 2 minutes nostalgic_stallman -``` - -You can also filter for a substring in a name as this shows: - -```bash -$ docker ps --filter "name=nostalgic" - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -715ebfcee040 busybox "top" 3 seconds ago Up 1 seconds i_am_nostalgic -9b6247364a03 busybox "top" 7 minutes ago Up 7 minutes nostalgic_stallman -673394ef1d4c busybox "top" 38 minutes ago Up 38 minutes nostalgic_shockley -``` - -#### Exited - -The `exited` filter matches containers by exist status code. For example, to -filter for containers that have exited successfully: - -```bash -$ docker ps -a --filter 'exited=0' - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -ea09c3c82f6e registry:latest /srv/run.sh 2 weeks ago Exited (0) 2 weeks ago 127.0.0.1:5000->5000/tcp desperate_leakey -106ea823fe4e fedora:latest /bin/sh -c 'bash -l' 2 weeks ago Exited (0) 2 weeks ago determined_albattani -48ee228c9464 fedora:20 bash 2 weeks ago Exited (0) 2 weeks ago tender_torvalds -``` - -#### Killed containers - -You can use a filter to locate containers that exited with status of `137` -meaning a `SIGKILL(9)` killed them. - -```bash -$ docker ps -a --filter 'exited=137' -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -b3e1c0ed5bfe ubuntu:latest "sleep 1000" 12 seconds ago Exited (137) 5 seconds ago grave_kowalevski -a2eb5558d669 redis:latest "/entrypoint.sh redi 2 hours ago Exited (137) 2 hours ago sharp_lalande -``` - -Any of these events result in a `137` status: - -* the `init` process of the container is killed manually -* `docker kill` kills the container -* Docker daemon restarts which kills all running containers - -#### Status - -The `status` filter matches containers by status. You can filter using -`created`, `restarting`, `running`, `paused`, `exited` and `dead`. For example, -to filter for `running` containers: - -```bash -$ docker ps --filter status=running - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -715ebfcee040 busybox "top" 16 minutes ago Up 16 minutes i_am_nostalgic -d5c976d3c462 busybox "top" 23 minutes ago Up 23 minutes top -9b6247364a03 busybox "top" 24 minutes ago Up 24 minutes nostalgic_stallman -``` - -To filter for `paused` containers: - -```bash -$ docker ps --filter status=paused - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -673394ef1d4c busybox "top" About an hour ago Up About an hour (Paused) nostalgic_shockley -``` - -#### Ancestor - -The `ancestor` filter matches containers based on its image or a descendant of -it. The filter supports the following image representation: - -- image -- image:tag -- image:tag@digest -- short-id -- full-id - -If you don't specify a `tag`, the `latest` tag is used. For example, to filter -for containers that use the latest `ubuntu` image: - -```bash -$ docker ps --filter ancestor=ubuntu - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -919e1179bdb8 ubuntu-c1 "top" About a minute ago Up About a minute admiring_lovelace -5d1e4a540723 ubuntu-c2 "top" About a minute ago Up About a minute admiring_sammet -82a598284012 ubuntu "top" 3 minutes ago Up 3 minutes sleepy_bose -bab2a34ba363 ubuntu "top" 3 minutes ago Up 3 minutes focused_yonath -``` - -Match containers based on the `ubuntu-c1` image which, in this case, is a child -of `ubuntu`: - -```bash -$ docker ps --filter ancestor=ubuntu-c1 - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -919e1179bdb8 ubuntu-c1 "top" About a minute ago Up About a minute admiring_lovelace -``` - -Match containers based on the `ubuntu` version `12.04.5` image: - -```bash -$ docker ps --filter ancestor=ubuntu:12.04.5 - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -82a598284012 ubuntu:12.04.5 "top" 3 minutes ago Up 3 minutes sleepy_bose -``` - -The following matches containers based on the layer `d0e008c6cf02` or an image -that have this layer in it's layer stack. - -```bash -$ docker ps --filter ancestor=d0e008c6cf02 - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -82a598284012 ubuntu:12.04.5 "top" 3 minutes ago Up 3 minutes sleepy_bose -``` - -#### Before - -The `before` filter shows only containers created before the container with -given id or name. For example, having these containers created: - -```bash -$ docker ps - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -9c3527ed70ce busybox "top" 14 seconds ago Up 15 seconds desperate_dubinsky -4aace5031105 busybox "top" 48 seconds ago Up 49 seconds focused_hamilton -6e63f6ff38b0 busybox "top" About a minute ago Up About a minute distracted_fermat -``` - -Filtering with `before` would give: - -```bash -$ docker ps -f before=9c3527ed70ce - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -4aace5031105 busybox "top" About a minute ago Up About a minute focused_hamilton -6e63f6ff38b0 busybox "top" About a minute ago Up About a minute distracted_fermat -``` - -#### Since - -The `since` filter shows only containers created since the container with given -id or name. For example, with the same containers as in `before` filter: - -```bash -$ docker ps -f since=6e63f6ff38b0 - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -9c3527ed70ce busybox "top" 10 minutes ago Up 10 minutes desperate_dubinsky -4aace5031105 busybox "top" 10 minutes ago Up 10 minutes focused_hamilton -``` - -#### Volume - -The `volume` filter shows only containers that mount a specific volume or have -a volume mounted in a specific path: - -```bash{% raw %} -$ docker ps --filter volume=remote-volume --format "table {{.ID}}\t{{.Mounts}}" -CONTAINER ID MOUNTS -9c3527ed70ce remote-volume - -$ docker ps --filter volume=/data --format "table {{.ID}}\t{{.Mounts}}" -CONTAINER ID MOUNTS -9c3527ed70ce remote-volume -{% endraw %}``` - -#### Network - -The `network` filter shows only containers that are connected to a network with -a given name or id. - -The following filter matches all containers that are connected to a network -with a name containing `net1`. - -```bash -$ docker run -d --net=net1 --name=test1 ubuntu top -$ docker run -d --net=net2 --name=test2 ubuntu top - -$ docker ps --filter network=net1 - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -9d4893ed80fe ubuntu "top" 10 minutes ago Up 10 minutes test1 -``` - -The network filter matches on both the network's name and id. The following -example shows all containers that are attached to the `net1` network, using -the network id as a filter; - -```bash -{% raw %} -$ docker network inspect --format "{{.ID}}" net1 -{% endraw %} - -8c0b4110ae930dbe26b258de9bc34a03f98056ed6f27f991d32919bfe401d7c5 - -$ docker ps --filter network=8c0b4110ae930dbe26b258de9bc34a03f98056ed6f27f991d32919bfe401d7c5 - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -9d4893ed80fe ubuntu "top" 10 minutes ago Up 10 minutes test1 -``` - -## Formatting - -The formatting option (`--format`) pretty-prints container output using a Go -template. - -Valid placeholders for the Go template are listed below: - -Placeholder | Description ---------------|---------------------------------------------------------------------------------------------------- -`.ID` | Container ID -`.Image` | Image ID -`.Command` | Quoted command -`.CreatedAt` | Time when the container was created. -`.RunningFor` | Elapsed time since the container was started. -`.Ports` | Exposed ports. -`.Status` | Container status. -`.Size` | Container disk size. -`.Names` | Container names. -`.Labels` | All labels assigned to the container. -`.Label` | Value of a specific label for this container. For example `'{% raw %}{{.Label "com.docker.swarm.cpu"}}{% endraw %}'` -`.Mounts` | Names of the volumes mounted in this container. - -When using the `--format` option, the `ps` command will either output the data -exactly as the template declares or, when using the `table` directive, includes -column headers as well. - -The following example uses a template without headers and outputs the `ID` and -`Command` entries separated by a colon for all running containers: - -```bash -{% raw %} -$ docker ps --format "{{.ID}}: {{.Command}}" -{% endraw %} - -a87ecb4f327c: /bin/sh -c #(nop) MA -01946d9d34d8: /bin/sh -c #(nop) MA -c1d3b0166030: /bin/sh -c yum -y up -41d50ecd2f57: /bin/sh -c #(nop) MA -``` - -To list all running containers with their labels in a table format you can use: - -```bash -{% raw %} -$ docker ps --format "table {{.ID}}\t{{.Labels}}" -{% endraw %} - -CONTAINER ID LABELS -a87ecb4f327c com.docker.swarm.node=ubuntu,com.docker.swarm.storage=ssd -01946d9d34d8 -c1d3b0166030 com.docker.swarm.node=debian,com.docker.swarm.cpu=6 -41d50ecd2f57 com.docker.swarm.node=fedora,com.docker.swarm.cpu=3,com.docker.swarm.storage=ssd -``` diff --git a/engine/reference/commandline/pull.md b/engine/reference/commandline/pull.md deleted file mode 100644 index e664398e6f..0000000000 --- a/engine/reference/commandline/pull.md +++ /dev/null @@ -1,237 +0,0 @@ ---- -redirect_from: - - /reference/commandline/pull/ -description: The pull command description and usage -keywords: -- pull, image, hub, docker -title: docker pull ---- - -```markdown -Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST] - -Pull an image or a repository from a registry - -Options: - -a, --all-tags Download all tagged images in the repository - --disable-content-trust Skip image verification (default true) - --help Print usage -``` - -Most of your images will be created on top of a base image from the -[Docker Hub](https://hub.docker.com) registry. - -[Docker Hub](https://hub.docker.com) contains many pre-built images that you -can `pull` and try without needing to define and configure your own. - -To download a particular image, or set of images (i.e., a repository), -use `docker pull`. - -## Proxy configuration - -If you are behind an HTTP proxy server, for example in corporate settings, -before open a connect to registry, you may need to configure the Docker -daemon's proxy settings, using the `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY` -environment variables. To set these environment variables on a host using -`systemd`, refer to the [control and configure Docker with systemd](../../admin/systemd.md#http-proxy) -for variables configuration. - -## Examples - -### Pull an image from Docker Hub - -To download a particular image, or set of images (i.e., a repository), use -`docker pull`. If no tag is provided, Docker Engine uses the `:latest` tag as a -default. This command pulls the `debian:latest` image: - -```bash -$ docker pull debian - -Using default tag: latest -latest: Pulling from library/debian -fdd5d7827f33: Pull complete -a3ed95caeb02: Pull complete -Digest: sha256:e7d38b3517548a1c71e41bffe9c8ae6d6d29546ce46bf62159837aad072c90aa -Status: Downloaded newer image for debian:latest -``` - -Docker images can consist of multiple layers. In the example above, the image -consists of two layers; `fdd5d7827f33` and `a3ed95caeb02`. - -Layers can be reused by images. For example, the `debian:jessie` image shares -both layers with `debian:latest`. Pulling the `debian:jessie` image therefore -only pulls its metadata, but not its layers, because all layers are already -present locally: - -```bash -$ docker pull debian:jessie - -jessie: Pulling from library/debian -fdd5d7827f33: Already exists -a3ed95caeb02: Already exists -Digest: sha256:a9c958be96d7d40df920e7041608f2f017af81800ca5ad23e327bc402626b58e -Status: Downloaded newer image for debian:jessie -``` - -To see which images are present locally, use the [`docker images`](images.md) -command: - -```bash -$ docker images - -REPOSITORY TAG IMAGE ID CREATED SIZE -debian jessie f50f9524513f 5 days ago 125.1 MB -debian latest f50f9524513f 5 days ago 125.1 MB -``` - -Docker uses a content-addressable image store, and the image ID is a SHA256 -digest covering the image's configuration and layers. In the example above, -`debian:jessie` and `debian:latest` have the same image ID because they are -actually the *same* image tagged with different names. Because they are the -same image, their layers are stored only once and do not consume extra disk -space. - -For more information about images, layers, and the content-addressable store, -refer to [understand images, containers, and storage drivers](../../userguide/storagedriver/imagesandcontainers.md). - - -## Pull an image by digest (immutable identifier) - -So far, you've pulled images by their name (and "tag"). Using names and tags is -a convenient way to work with images. When using tags, you can `docker pull` an -image again to make sure you have the most up-to-date version of that image. -For example, `docker pull ubuntu:14.04` pulls the latest version of the Ubuntu -14.04 image. - -In some cases you don't want images to be updated to newer versions, but prefer -to use a fixed version of an image. Docker enables you to pull an image by its -*digest*. When pulling an image by digest, you specify *exactly* which version -of an image to pull. Doing so, allows you to "pin" an image to that version, -and guarantee that the image you're using is always the same. - -To know the digest of an image, pull the image first. Let's pull the latest -`ubuntu:14.04` image from Docker Hub: - -```bash -$ docker pull ubuntu:14.04 - -14.04: Pulling from library/ubuntu -5a132a7e7af1: Pull complete -fd2731e4c50c: Pull complete -28a2f68d1120: Pull complete -a3ed95caeb02: Pull complete -Digest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 -Status: Downloaded newer image for ubuntu:14.04 -``` - -Docker prints the digest of the image after the pull has finished. In the example -above, the digest of the image is: - - sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 - -Docker also prints the digest of an image when *pushing* to a registry. This -may be useful if you want to pin to a version of the image you just pushed. - -A digest takes the place of the tag when pulling an image, for example, to -pull the above image by digest, run the following command: - -```bash -$ docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 - -sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2: Pulling from library/ubuntu -5a132a7e7af1: Already exists -fd2731e4c50c: Already exists -28a2f68d1120: Already exists -a3ed95caeb02: Already exists -Digest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 -Status: Downloaded newer image for ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 -``` - -Digest can also be used in the `FROM` of a Dockerfile, for example: - -```Dockerfile -FROM ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 -MAINTAINER some maintainer -``` - -> **Note**: Using this feature "pins" an image to a specific version in time. -> Docker will therefore not pull updated versions of an image, which may include -> security updates. If you want to pull an updated image, you need to change the -> digest accordingly. - - -## Pulling from a different registry - -By default, `docker pull` pulls images from [Docker Hub](https://hub.docker.com). It is also possible to -manually specify the path of a registry to pull from. For example, if you have -set up a local registry, you can specify its path to pull from it. A registry -path is similar to a URL, but does not contain a protocol specifier (`https://`). - -The following command pulls the `testing/test-image` image from a local registry -listening on port 5000 (`myregistry.local:5000`): - -```bash -$ docker pull myregistry.local:5000/testing/test-image -``` - -Registry credentials are managed by [docker login](login.md). - -Docker uses the `https://` protocol to communicate with a registry, unless the -registry is allowed to be accessed over an insecure connection. Refer to the -[insecure registries](dockerd.md#insecure-registries) section for more information. - - -## Pull a repository with multiple images - -By default, `docker pull` pulls a *single* image from the registry. A repository -can contain multiple images. To pull all images from a repository, provide the -`-a` (or `--all-tags`) option when using `docker pull`. - -This command pulls all images from the `fedora` repository: - -```bash -$ docker pull --all-tags fedora - -Pulling repository fedora -ad57ef8d78d7: Download complete -105182bb5e8b: Download complete -511136ea3c5a: Download complete -73bd853d2ea5: Download complete -.... - -Status: Downloaded newer image for fedora -``` - -After the pull has completed use the `docker images` command to see the -images that were pulled. The example below shows all the `fedora` images -that are present locally: - -```bash -$ docker images fedora - -REPOSITORY TAG IMAGE ID CREATED SIZE -fedora rawhide ad57ef8d78d7 5 days ago 359.3 MB -fedora 20 105182bb5e8b 5 days ago 372.7 MB -fedora heisenbug 105182bb5e8b 5 days ago 372.7 MB -fedora latest 105182bb5e8b 5 days ago 372.7 MB -``` - -## Canceling a pull - -Killing the `docker pull` process, for example by pressing `CTRL-c` while it is -running in a terminal, will terminate the pull operation. - -```bash -$ docker pull fedora - -Using default tag: latest -latest: Pulling from library/fedora -a3ed95caeb02: Pulling fs layer -236608c7b546: Pulling fs layer -^C -``` - -> **Note**: Technically, the Engine terminates a pull operation when the -> connection between the Docker Engine daemon and the Docker Engine client -> initiating the pull is lost. If the connection with the Engine daemon is -> lost for other reasons than a manual interaction, the pull is also aborted. diff --git a/engine/reference/commandline/push.md b/engine/reference/commandline/push.md deleted file mode 100644 index 035a121387..0000000000 --- a/engine/reference/commandline/push.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -redirect_from: - - /reference/commandline/push/ -description: The push command description and usage -keywords: -- share, push, image -title: docker push ---- - -```markdown -Usage: docker push [OPTIONS] NAME[:TAG] - -Push an image or a repository to a registry - -Options: - --disable-content-trust Skip image verification (default true) - --help Print usage -``` - -Use `docker push` to share your images to the [Docker Hub](https://hub.docker.com) -registry or to a self-hosted one. - -Refer to the [`docker tag`](tag.md) reference for more information about valid -image and tag names. - -Killing the `docker push` process, for example by pressing `CTRL-c` while it is -running in a terminal, terminates the push operation. - -Registry credentials are managed by [docker login](login.md). - -## Examples - -### Pushing a new image to a registry - -First save the new image by finding the container ID (using [`docker ps`](ps.md)) -and then committing it to a new image name. Note that only `a-z0-9-_.` are -allowed when naming images: - -```bash -$ docker commit c16378f943fe rhel-httpd -``` - -Now, push the image to the registry using the image ID. In this example the -registry is on host named `registry-host` and listening on port `5000`. To do -this, tag the image with the host name or IP address, and the port of the -registry: - -```bash -$ docker tag rhel-httpd registry-host:5000/myadmin/rhel-httpd -$ docker push registry-host:5000/myadmin/rhel-httpd -``` - -Check that this worked by running: - -```bash -$ docker images -``` - -You should see both `rhel-httpd` and `registry-host:5000/myadmin/rhel-httpd` -listed. diff --git a/engine/reference/commandline/rename.md b/engine/reference/commandline/rename.md deleted file mode 100644 index 7dd672474c..0000000000 --- a/engine/reference/commandline/rename.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -redirect_from: - - /reference/commandline/rename/ -description: The rename command description and usage -keywords: -- rename, docker, container -title: docker rename ---- - -```markdown -Usage: docker rename CONTAINER NEW_NAME - -Rename a container - -Options: - --help Print usage -``` - -The `docker rename` command allows the container to be renamed to a different name. diff --git a/engine/reference/commandline/restart.md b/engine/reference/commandline/restart.md deleted file mode 100644 index 14df58e86d..0000000000 --- a/engine/reference/commandline/restart.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -redirect_from: - - /reference/commandline/restart/ -description: The restart command description and usage -keywords: -- restart, container, Docker -title: docker restart ---- - -```markdown -Usage: docker restart [OPTIONS] CONTAINER [CONTAINER...] - -Restart one or more containers - -Options: - --help Print usage - -t, --time int Seconds to wait for stop before killing the container (default 10) -``` diff --git a/engine/reference/commandline/rm.md b/engine/reference/commandline/rm.md deleted file mode 100644 index 3d21eae80e..0000000000 --- a/engine/reference/commandline/rm.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -redirect_from: - - /reference/commandline/rm/ -description: The rm command description and usage -keywords: -- remove, Docker, container -title: docker rm ---- - -```markdown -Usage: docker rm [OPTIONS] CONTAINER [CONTAINER...] - -Remove one or more containers - -Options: - -f, --force Force the removal of a running container (uses SIGKILL) - --help Print usage - -l, --link Remove the specified link - -v, --volumes Remove the volumes associated with the container -``` - -## Examples - - $ docker rm /redis - /redis - -This will remove the container referenced under the link -`/redis`. - - $ docker rm --link /webapp/redis - /webapp/redis - -This will remove the underlying link between `/webapp` and the `/redis` -containers removing all network communication. - - $ docker rm --force redis - redis - -The main process inside the container referenced under the link `/redis` will receive -`SIGKILL`, then the container will be removed. - - $ docker rm $(docker ps -a -q) - -This command will delete all stopped containers. The command -`docker ps -a -q` will return all existing container IDs and pass them to -the `rm` command which will delete them. Any running containers will not be -deleted. - - $ docker rm -v redis - redis - -This command will remove the container and any volumes associated with it. -Note that if a volume was specified with a name, it will not be removed. - - $ docker create -v awesome:/foo -v /bar --name hello redis - hello - $ docker rm -v hello - -In this example, the volume for `/foo` will remain intact, but the volume for -`/bar` will be removed. The same behavior holds for volumes inherited with -`--volumes-from`. diff --git a/engine/reference/commandline/rmi.md b/engine/reference/commandline/rmi.md deleted file mode 100644 index 759b67a858..0000000000 --- a/engine/reference/commandline/rmi.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -redirect_from: - - /reference/commandline/rmi/ -description: The rmi command description and usage -keywords: -- remove, image, Docker -title: docker rmi ---- - -```markdown -Usage: docker rmi [OPTIONS] IMAGE [IMAGE...] - -Remove one or more images - -Options: - -f, --force Force removal of the image - --help Print usage - --no-prune Do not delete untagged parents -``` - -You can remove an image using its short or long ID, its tag, or its digest. If -an image has one or more tag referencing it, you must remove all of them before -the image is removed. Digest references are removed automatically when an image -is removed by tag. - - $ docker images - REPOSITORY TAG IMAGE ID CREATED SIZE - test1 latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) - test latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) - test2 latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) - - $ docker rmi fd484f19954f - Error: Conflict, cannot delete image fd484f19954f because it is tagged in multiple repositories, use -f to force - 2013/12/11 05:47:16 Error: failed to remove one or more images - - $ docker rmi test1 - Untagged: test1:latest - $ docker rmi test2 - Untagged: test2:latest - - $ docker images - REPOSITORY TAG IMAGE ID CREATED SIZE - test latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) - $ docker rmi test - Untagged: test:latest - Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8 - -If you use the `-f` flag and specify the image's short or long ID, then this -command untags and removes all images that match the specified ID. - - $ docker images - REPOSITORY TAG IMAGE ID CREATED SIZE - test1 latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) - test latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) - test2 latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) - - $ docker rmi -f fd484f19954f - Untagged: test1:latest - Untagged: test:latest - Untagged: test2:latest - Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8 - -An image pulled by digest has no tag associated with it: - - $ docker images --digests - REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE - localhost:5000/test/busybox sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf 4986bf8c1536 9 weeks ago 2.43 MB - -To remove an image using its digest: - - $ docker rmi localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf - Untagged: localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf - Deleted: 4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125 - Deleted: ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2 - Deleted: df7546f9f060a2268024c8a230d8639878585defcc1bc6f79d2728a13957871b diff --git a/engine/reference/commandline/run.md b/engine/reference/commandline/run.md deleted file mode 100644 index 3b5a28b2cb..0000000000 --- a/engine/reference/commandline/run.md +++ /dev/null @@ -1,676 +0,0 @@ ---- -redirect_from: - - /reference/commandline/run/ -description: The run command description and usage -keywords: -- run, command, container -title: docker run ---- - -```markdown -Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] - -Run a command in a new container - -Options: - --add-host value Add a custom host-to-IP mapping (host:ip) (default []) - -a, --attach value Attach to STDIN, STDOUT or STDERR (default []) - --blkio-weight value Block IO (relative weight), between 10 and 1000 - --blkio-weight-device value Block IO weight (relative device weight) (default []) - --cap-add value Add Linux capabilities (default []) - --cap-drop value Drop Linux capabilities (default []) - --cgroup-parent string Optional parent cgroup for the container - --cidfile string Write the container ID to the file - --cpu-percent int CPU percent (Windows only) - --cpu-period int Limit CPU CFS (Completely Fair Scheduler) period - --cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota - -c, --cpu-shares int CPU shares (relative weight) - --cpuset-cpus string CPUs in which to allow execution (0-3, 0,1) - --cpuset-mems string MEMs in which to allow execution (0-3, 0,1) - -d, --detach Run container in background and print container ID - --detach-keys string Override the key sequence for detaching a container - --device value Add a host device to the container (default []) - --device-read-bps value Limit read rate (bytes per second) from a device (default []) - --device-read-iops value Limit read rate (IO per second) from a device (default []) - --device-write-bps value Limit write rate (bytes per second) to a device (default []) - --device-write-iops value Limit write rate (IO per second) to a device (default []) - --disable-content-trust Skip image verification (default true) - --dns value Set custom DNS servers (default []) - --dns-opt value Set DNS options (default []) - --dns-search value Set custom DNS search domains (default []) - --entrypoint string Overwrite the default ENTRYPOINT of the image - -e, --env value Set environment variables (default []) - --env-file value Read in a file of environment variables (default []) - --expose value Expose a port or a range of ports (default []) - --group-add value Add additional groups to join (default []) - --health-cmd string Command to run to check health - --health-interval duration Time between running the check - --health-retries int Consecutive failures needed to report unhealthy - --health-timeout duration Maximum time to allow one check to run - --help Print usage - -h, --hostname string Container host name - -i, --interactive Keep STDIN open even if not attached - --io-maxbandwidth string Maximum IO bandwidth limit for the system drive (Windows only) - (Windows only). The format is ``. - Unit is optional and can be `b` (bytes per second), - `k` (kilobytes per second), `m` (megabytes per second), - or `g` (gigabytes per second). If you omit the unit, - the system uses bytes per second. - --io-maxbandwidth and --io-maxiops are mutually exclusive options. - --io-maxiops uint Maximum IOps limit for the system drive (Windows only) - --ip string Container IPv4 address (e.g. 172.30.100.104) - --ip6 string Container IPv6 address (e.g. 2001:db8::33) - --ipc string IPC namespace to use - --isolation string Container isolation technology - --kernel-memory string Kernel memory limit - -l, --label value Set meta data on a container (default []) - --label-file value Read in a line delimited file of labels (default []) - --link value Add link to another container (default []) - --link-local-ip value Container IPv4/IPv6 link-local addresses (default []) - --log-driver string Logging driver for the container - --log-opt value Log driver options (default []) - --mac-address string Container MAC address (e.g. 92:d0:c6:0a:29:33) - -m, --memory string Memory limit - --memory-reservation string Memory soft limit - --memory-swap string Swap limit equal to memory plus swap: '-1' to enable unlimited swap - --memory-swappiness int Tune container memory swappiness (0 to 100) (default -1). - --name string Assign a name to the container - --network-alias value Add network-scoped alias for the container (default []) - --network string Connect a container to a network - 'bridge': create a network stack on the default Docker bridge - 'none': no networking - 'container:': reuse another container's network stack - 'host': use the Docker host network stack - '|': connect to a user-defined network - --no-healthcheck Disable any container-specified HEALTHCHECK - --oom-kill-disable Disable OOM Killer - --oom-score-adj int Tune host's OOM preferences (-1000 to 1000) - --pid string PID namespace to use - --pids-limit int Tune container pids limit (set -1 for unlimited) - --privileged Give extended privileges to this container - -p, --publish value Publish a container's port(s) to the host (default []) - -P, --publish-all Publish all exposed ports to random ports - --read-only Mount the container's root filesystem as read only - --restart string Restart policy to apply when a container exits (default "no") - Possible values are : no, on-failure[:max-retry], always, unless-stopped - --rm Automatically remove the container when it exits - --runtime string Runtime to use for this container - --security-opt value Security Options (default []) - --shm-size string Size of /dev/shm, default value is 64MB. - The format is ``. `number` must be greater than `0`. - Unit is optional and can be `b` (bytes), `k` (kilobytes), `m` (megabytes), - or `g` (gigabytes). If you omit the unit, the system uses bytes. - --sig-proxy Proxy received signals to the process (default true) - --stop-signal string Signal to stop a container, SIGTERM by default (default "SIGTERM") - --storage-opt value Storage driver options for the container (default []) - --sysctl value Sysctl options (default map[]) - --tmpfs value Mount a tmpfs directory (default []) - -t, --tty Allocate a pseudo-TTY - --ulimit value Ulimit options (default []) - -u, --user string Username or UID (format: [:]) - --userns string User namespace to use - 'host': Use the Docker host user namespace - '': Use the Docker daemon user namespace specified by `--userns-remap` option. - --uts string UTS namespace to use - -v, --volume value Bind mount a volume (default []). The format - is `[host-src:]container-dest[:]`. - The comma-delimited `options` are [rw|ro], - [z|Z], [[r]shared|[r]slave|[r]private], and - [nocopy]. The 'host-src' is an absolute path - or a name value. - --volume-driver string Optional volume driver for the container - --volumes-from value Mount volumes from the specified container(s) (default []) - -w, --workdir string Working directory inside the container -``` - -The `docker run` command first `creates` a writeable container layer over the -specified image, and then `starts` it using the specified command. That is, -`docker run` is equivalent to the API `/containers/create` then -`/containers/(id)/start`. A stopped container can be restarted with all its -previous changes intact using `docker start`. See `docker ps -a` to view a list -of all containers. - -The `docker run` command can be used in combination with `docker commit` to -[*change the command that a container runs*](commit.md). There is additional detailed information about `docker run` in the [Docker run reference](../run.md). - -For information on connecting a container to a network, see the ["*Docker network overview*"](../../userguide/networking/index.md). - -## Examples - -### Assign name and allocate pseudo-TTY (--name, -it) - - $ docker run --name test -it debian - root@d6c0fe130dba:/# exit 13 - $ echo $? - 13 - $ docker ps -a | grep test - d6c0fe130dba debian:7 "/bin/bash" 26 seconds ago Exited (13) 17 seconds ago test - -This example runs a container named `test` using the `debian:latest` -image. The `-it` instructs Docker to allocate a pseudo-TTY connected to -the container's stdin; creating an interactive `bash` shell in the container. -In the example, the `bash` shell is quit by entering -`exit 13`. This exit code is passed on to the caller of -`docker run`, and is recorded in the `test` container's metadata. - -### Capture container ID (--cidfile) - - $ docker run --cidfile /tmp/docker_test.cid ubuntu echo "test" - -This will create a container and print `test` to the console. The `cidfile` -flag makes Docker attempt to create a new file and write the container ID to it. -If the file exists already, Docker will return an error. Docker will close this -file when `docker run` exits. - -### Full container capabilities (--privileged) - - $ docker run -t -i --rm ubuntu bash - root@bc338942ef20:/# mount -t tmpfs none /mnt - mount: permission denied - -This will *not* work, because by default, most potentially dangerous kernel -capabilities are dropped; including `cap_sys_admin` (which is required to mount -filesystems). However, the `--privileged` flag will allow it to run: - - $ docker run -t -i --privileged ubuntu bash - root@50e3f57e16e6:/# mount -t tmpfs none /mnt - root@50e3f57e16e6:/# df -h - Filesystem Size Used Avail Use% Mounted on - none 1.9G 0 1.9G 0% /mnt - -The `--privileged` flag gives *all* capabilities to the container, and it also -lifts all the limitations enforced by the `device` cgroup controller. In other -words, the container can then do almost everything that the host can do. This -flag exists to allow special use-cases, like running Docker within Docker. - -### Set working directory (-w) - - $ docker run -w /path/to/dir/ -i -t ubuntu pwd - -The `-w` lets the command being executed inside directory given, here -`/path/to/dir/`. If the path does not exist it is created inside the container. - -### Set storage driver options per container - - $ docker run -it --storage-opt size=120G fedora /bin/bash - -This (size) will allow to set the container rootfs size to 120G at creation time. -User cannot pass a size less than the Default BaseFS Size. This option is only -available for the `devicemapper`, `btrfs`, and `zfs` graph drivers. - -### Mount tmpfs (--tmpfs) - - $ docker run -d --tmpfs /run:rw,noexec,nosuid,size=65536k my_image - -The `--tmpfs` flag mounts an empty tmpfs into the container with the `rw`, -`noexec`, `nosuid`, `size=65536k` options. - -### Mount volume (-v, --read-only) - - $ docker run -v `pwd`:`pwd` -w `pwd` -i -t ubuntu pwd - -The `-v` flag mounts the current working directory into the container. The `-w` -lets the command being executed inside the current working directory, by -changing into the directory to the value returned by `pwd`. So this -combination executes the command using the container, but inside the -current working directory. - - $ docker run -v /doesnt/exist:/foo -w /foo -i -t ubuntu bash - -When the host directory of a bind-mounted volume doesn't exist, Docker -will automatically create this directory on the host for you. In the -example above, Docker will create the `/doesnt/exist` -folder before starting your container. - - $ docker run --read-only -v /icanwrite busybox touch /icanwrite/here - -Volumes can be used in combination with `--read-only` to control where -a container writes files. The `--read-only` flag mounts the container's root -filesystem as read only prohibiting writes to locations other than the -specified volumes for the container. - - $ docker run -t -i -v /var/run/docker.sock:/var/run/docker.sock -v /path/to/static-docker-binary:/usr/bin/docker busybox sh - -By bind-mounting the docker unix socket and statically linked docker -binary (refer to [get the linux binary]( -../../installation/binaries.md#get-the-linux-binary)), -you give the container the full access to create and manipulate the host's -Docker daemon. - -For in-depth information about volumes, refer to [manage data in containers](../../tutorials/dockervolumes.md) - -### Publish or expose port (-p, --expose) - - $ docker run -p 127.0.0.1:80:8080 ubuntu bash - -This binds port `8080` of the container to port `80` on `127.0.0.1` of the host -machine. The [Docker User -Guide](../../userguide/networking/default_network/dockerlinks.md) -explains in detail how to manipulate ports in Docker. - - $ docker run --expose 80 ubuntu bash - -This exposes port `80` of the container without publishing the port to the host -system's interfaces. - -### Set environment variables (-e, --env, --env-file) - - $ docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash - -This sets simple (non-array) environmental variables in the container. For -illustration all three -flags are shown here. Where `-e`, `--env` take an environment variable and -value, or if no `=` is provided, then that variable's current value, set via -`export`, is passed through (i.e. `$MYVAR1` from the host is set to `$MYVAR1` -in the container). When no `=` is provided and that variable is not defined -in the client's environment then that variable will be removed from the -container's list of environment variables. All three flags, `-e`, `--env` and -`--env-file` can be repeated. - -Regardless of the order of these three flags, the `--env-file` are processed -first, and then `-e`, `--env` flags. This way, the `-e` or `--env` will -override variables as needed. - - $ cat ./env.list - TEST_FOO=BAR - $ docker run --env TEST_FOO="This is a test" --env-file ./env.list busybox env | grep TEST_FOO - TEST_FOO=This is a test - -The `--env-file` flag takes a filename as an argument and expects each line -to be in the `VAR=VAL` format, mimicking the argument passed to `--env`. Comment -lines need only be prefixed with `#` - -An example of a file passed with `--env-file` - - $ cat ./env.list - TEST_FOO=BAR - - # this is a comment - TEST_APP_DEST_HOST=10.10.0.127 - TEST_APP_DEST_PORT=8888 - _TEST_BAR=FOO - TEST_APP_42=magic - helloWorld=true - 123qwe=bar - org.spring.config=something - - # pass through this variable from the caller - TEST_PASSTHROUGH - $ TEST_PASSTHROUGH=howdy docker run --env-file ./env.list busybox env - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin - HOSTNAME=5198e0745561 - TEST_FOO=BAR - TEST_APP_DEST_HOST=10.10.0.127 - TEST_APP_DEST_PORT=8888 - _TEST_BAR=FOO - TEST_APP_42=magic - helloWorld=true - TEST_PASSTHROUGH=howdy - HOME=/root - 123qwe=bar - org.spring.config=something - - $ docker run --env-file ./env.list busybox env - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin - HOSTNAME=5198e0745561 - TEST_FOO=BAR - TEST_APP_DEST_HOST=10.10.0.127 - TEST_APP_DEST_PORT=8888 - _TEST_BAR=FOO - TEST_APP_42=magic - helloWorld=true - TEST_PASSTHROUGH= - HOME=/root - 123qwe=bar - org.spring.config=something - -### Set metadata on container (-l, --label, --label-file) - -A label is a `key=value` pair that applies metadata to a container. To label a container with two labels: - - $ docker run -l my-label --label com.example.foo=bar ubuntu bash - -The `my-label` key doesn't specify a value so the label defaults to an empty -string(`""`). To add multiple labels, repeat the label flag (`-l` or `--label`). - -The `key=value` must be unique to avoid overwriting the label value. If you -specify labels with identical keys but different values, each subsequent value -overwrites the previous. Docker uses the last `key=value` you supply. - -Use the `--label-file` flag to load multiple labels from a file. Delimit each -label in the file with an EOL mark. The example below loads labels from a -labels file in the current directory: - - $ docker run --label-file ./labels ubuntu bash - -The label-file format is similar to the format for loading environment -variables. (Unlike environment variables, labels are not visible to processes -running inside a container.) The following example illustrates a label-file -format: - - com.example.label1="a label" - - # this is a comment - com.example.label2=another\ label - com.example.label3 - -You can load multiple label-files by supplying multiple `--label-file` flags. - -For additional information on working with labels, see [*Labels - custom -metadata in Docker*](../../userguide/labels-custom-metadata.md) in the Docker User -Guide. - -### Connect a container to a network (--network) - -When you start a container use the `--network` flag to connect it to a network. -This adds the `busybox` container to the `my-net` network. - -```bash -$ docker run -itd --network=my-net busybox -``` - -You can also choose the IP addresses for the container with `--ip` and `--ip6` -flags when you start the container on a user-defined network. - -```bash -$ docker run -itd --network=my-net --ip=10.10.9.75 busybox -``` - -If you want to add a running container to a network use the `docker network connect` subcommand. - -You can connect multiple containers to the same network. Once connected, the -containers can communicate easily need only another container's IP address -or name. For `overlay` networks or custom plugins that support multi-host -connectivity, containers connected to the same multi-host network but launched -from different Engines can also communicate in this way. - -**Note**: Service discovery is unavailable on the default bridge network. -Containers can communicate via their IP addresses by default. To communicate -by name, they must be linked. - -You can disconnect a container from a network using the `docker network -disconnect` command. - -### Mount volumes from container (--volumes-from) - - $ docker run --volumes-from 777f7dc92da7 --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd - -The `--volumes-from` flag mounts all the defined volumes from the referenced -containers. Containers can be specified by repetitions of the `--volumes-from` -argument. The container ID may be optionally suffixed with `:ro` or `:rw` to -mount the volumes in read-only or read-write mode, respectively. By default, -the volumes are mounted in the same mode (read write or read only) as -the reference container. - -Labeling systems like SELinux require that proper labels are placed on volume -content mounted into a container. Without a label, the security system might -prevent the processes running inside the container from using the content. By -default, Docker does not change the labels set by the OS. - -To change the label in the container context, you can add either of two suffixes -`:z` or `:Z` to the volume mount. These suffixes tell Docker to relabel file -objects on the shared volumes. The `z` option tells Docker that two containers -share the volume content. As a result, Docker labels the content with a shared -content label. Shared volume labels allow all containers to read/write content. -The `Z` option tells Docker to label the content with a private unshared label. -Only the current container can use a private volume. - -### Attach to STDIN/STDOUT/STDERR (-a) - -The `-a` flag tells `docker run` to bind to the container's `STDIN`, `STDOUT` -or `STDERR`. This makes it possible to manipulate the output and input as -needed. - - $ echo "test" | docker run -i -a stdin ubuntu cat - - -This pipes data into a container and prints the container's ID by attaching -only to the container's `STDIN`. - - $ docker run -a stderr ubuntu echo test - -This isn't going to print anything unless there's an error because we've -only attached to the `STDERR` of the container. The container's logs -still store what's been written to `STDERR` and `STDOUT`. - - $ cat somefile | docker run -i -a stdin mybuilder dobuild - -This is how piping a file into a container could be done for a build. -The container's ID will be printed after the build is done and the build -logs could be retrieved using `docker logs`. This is -useful if you need to pipe a file or something else into a container and -retrieve the container's ID once the container has finished running. - -### Add host device to container (--device) - - $ docker run --device=/dev/sdc:/dev/xvdc --device=/dev/sdd --device=/dev/zero:/dev/nulo -i -t ubuntu ls -l /dev/{xvdc,sdd,nulo} - brw-rw---- 1 root disk 8, 2 Feb 9 16:05 /dev/xvdc - brw-rw---- 1 root disk 8, 3 Feb 9 16:05 /dev/sdd - crw-rw-rw- 1 root root 1, 5 Feb 9 16:05 /dev/nulo - -It is often necessary to directly expose devices to a container. The `--device` -option enables that. For example, a specific block storage device or loop -device or audio device can be added to an otherwise unprivileged container -(without the `--privileged` flag) and have the application directly access it. - -By default, the container will be able to `read`, `write` and `mknod` these devices. -This can be overridden using a third `:rwm` set of options to each `--device` -flag: - - - $ docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk /dev/xvdc - - Command (m for help): q - $ docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk /dev/xvdc - You will not be able to write the partition table. - - Command (m for help): q - - $ docker run --device=/dev/sda:/dev/xvdc:rw --rm -it ubuntu fdisk /dev/xvdc - - Command (m for help): q - - $ docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk /dev/xvdc - fdisk: unable to open /dev/xvdc: Operation not permitted - -> **Note:** -> `--device` cannot be safely used with ephemeral devices. Block devices -> that may be removed should not be added to untrusted containers with -> `--device`. - -### Restart policies (--restart) - -Use Docker's `--restart` to specify a container's *restart policy*. A restart -policy controls whether the Docker daemon restarts a container after exit. -Docker supports the following restart policies: - - - - - - - - - - - - - - - - - - - - - - - - - - -
PolicyResult
no - Do not automatically restart the container when it exits. This is the - default. -
- - on-failure[:max-retries] - - - Restart only if the container exits with a non-zero exit status. - Optionally, limit the number of restart retries the Docker - daemon attempts. -
always - Always restart the container regardless of the exit status. - When you specify always, the Docker daemon will try to restart - the container indefinitely. The container will also always start - on daemon startup, regardless of the current state of the container. -
unless-stopped - Always restart the container regardless of the exit status, but - do not start it on daemon startup if the container has been put - to a stopped state before. -
- - $ docker run --restart=always redis - -This will run the `redis` container with a restart policy of **always** -so that if the container exits, Docker will restart it. - -More detailed information on restart policies can be found in the -[Restart Policies (--restart)](../run.md#restart-policies-restart) -section of the Docker run reference page. - -### Add entries to container hosts file (--add-host) - -You can add other hosts into a container's `/etc/hosts` file by using one or -more `--add-host` flags. This example adds a static address for a host named -`docker`: - - $ docker run --add-host=docker:10.180.0.1 --rm -it debian - root@f38c87f2a42d:/# ping docker - PING docker (10.180.0.1): 48 data bytes - 56 bytes from 10.180.0.1: icmp_seq=0 ttl=254 time=7.600 ms - 56 bytes from 10.180.0.1: icmp_seq=1 ttl=254 time=30.705 ms - ^C--- docker ping statistics --- - 2 packets transmitted, 2 packets received, 0% packet loss - round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms - -Sometimes you need to connect to the Docker host from within your -container. To enable this, pass the Docker host's IP address to -the container using the `--add-host` flag. To find the host's address, -use the `ip addr show` command. - -The flags you pass to `ip addr show` depend on whether you are -using IPv4 or IPv6 networking in your containers. Use the following -flags for IPv4 address retrieval for a network device named `eth0`: - - $ HOSTIP=`ip -4 addr show scope global dev eth0 | grep inet | awk '{print \$2}' | cut -d / -f 1` - $ docker run --add-host=docker:${HOSTIP} --rm -it debian - -For IPv6 use the `-6` flag instead of the `-4` flag. For other network -devices, replace `eth0` with the correct device name (for example `docker0` -for the bridge device). - -### Set ulimits in container (--ulimit) - -Since setting `ulimit` settings in a container requires extra privileges not -available in the default container, you can set these using the `--ulimit` flag. -`--ulimit` is specified with a soft and hard limit as such: -`=[:]`, for example: - - $ docker run --ulimit nofile=1024:1024 --rm debian sh -c "ulimit -n" - 1024 - -> **Note:** -> If you do not provide a `hard limit`, the `soft limit` will be used -> for both values. If no `ulimits` are set, they will be inherited from -> the default `ulimits` set on the daemon. `as` option is disabled now. -> In other words, the following script is not supported: -> `$ docker run -it --ulimit as=1024 fedora /bin/bash` - -The values are sent to the appropriate `syscall` as they are set. -Docker doesn't perform any byte conversion. Take this into account when setting the values. - -#### For `nproc` usage - -Be careful setting `nproc` with the `ulimit` flag as `nproc` is designed by Linux to set the -maximum number of processes available to a user, not to a container. For example, start four -containers with `daemon` user: - - docker run -d -u daemon --ulimit nproc=3 busybox top - docker run -d -u daemon --ulimit nproc=3 busybox top - docker run -d -u daemon --ulimit nproc=3 busybox top - docker run -d -u daemon --ulimit nproc=3 busybox top - -The 4th container fails and reports "[8] System error: resource temporarily unavailable" error. -This fails because the caller set `nproc=3` resulting in the first three containers using up -the three processes quota set for the `daemon` user. - -### Stop container with signal (--stop-signal) - -The `--stop-signal` flag sets the system call signal that will be sent to the container to exit. -This signal can be a valid unsigned number that matches a position in the kernel's syscall table, for instance 9, -or a signal name in the format SIGNAME, for instance SIGKILL. - -### Specify isolation technology for container (--isolation) - -This option is useful in situations where you are running Docker containers on -Microsoft Windows. The `--isolation ` option sets a container's isolation -technology. On Linux, the only supported is the `default` option which uses -Linux namespaces. These two commands are equivalent on Linux: - -``` -$ docker run -d busybox top -$ docker run -d --isolation default busybox top -``` - -On Microsoft Windows, can take any of these values: - - -| Value | Description | -|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `default` | Use the value specified by the Docker daemon's `--exec-opt` . If the `daemon` does not specify an isolation technology, Microsoft Windows uses `process` as its default value. | -| `process` | Namespace isolation only. | -| `hyperv` | Hyper-V hypervisor partition-based isolation. | - -On Windows, the default isolation for client is `hyperv`, and for server is -`process`. Therefore when running on Windows server without a `daemon` option -set, these two commands are equivalent: -``` -$ docker run -d --isolation default busybox top -$ docker run -d --isolation process busybox top -``` - -If you have set the `--exec-opt isolation=hyperv` option on the Docker `daemon`, -if running on Windows server, any of these commands also result in `hyperv` isolation: - -``` -$ docker run -d --isolation default busybox top -$ docker run -d --isolation hyperv busybox top -``` - -### Configure namespaced kernel parameters (sysctls) at runtime - -The `--sysctl` sets namespaced kernel parameters (sysctls) in the -container. For example, to turn on IP forwarding in the containers -network namespace, run this command: - - $ docker run --sysctl net.ipv4.ip_forward=1 someimage - - -> **Note**: Not all sysctls are namespaced. Docker does not support changing sysctls -> inside of a container that also modify the host system. As the kernel -> evolves we expect to see more sysctls become namespaced. - -#### Currently supported sysctls - - `IPC Namespace`: - - kernel.msgmax, kernel.msgmnb, kernel.msgmni, kernel.sem, kernel.shmall, kernel.shmmax, kernel.shmmni, kernel.shm_rmid_forced - Sysctls beginning with fs.mqueue.* - - If you use the `--ipc=host` option these sysctls will not be allowed. - - `Network Namespace`: - Sysctls beginning with net.* - - If you use the `--network=host` option using these sysctls will not be allowed. diff --git a/engine/reference/commandline/save.md b/engine/reference/commandline/save.md deleted file mode 100644 index 1b666b8eb6..0000000000 --- a/engine/reference/commandline/save.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -redirect_from: - - /reference/commandline/save/ -description: The save command description and usage -keywords: -- tarred, repository, backup -title: docker save ---- - -```markdown -Usage: docker save [OPTIONS] IMAGE [IMAGE...] - -Save one or more images to a tar archive (streamed to STDOUT by default) - -Options: - --help Print usage - -o, --output string Write to a file, instead of STDOUT -``` - -Produces a tarred repository to the standard output stream. -Contains all parent layers, and all tags + versions, or specified `repo:tag`, for -each argument provided. - -It is used to create a backup that can then be used with `docker load` - - $ docker save busybox > busybox.tar - $ ls -sh busybox.tar - 2.7M busybox.tar - $ docker save --output busybox.tar busybox - $ ls -sh busybox.tar - 2.7M busybox.tar - $ docker save -o fedora-all.tar fedora - $ docker save -o fedora-latest.tar fedora:latest - -It is even useful to cherry-pick particular tags of an image repository - - $ docker save -o ubuntu.tar ubuntu:lucid ubuntu:saucy diff --git a/engine/reference/commandline/search.md b/engine/reference/commandline/search.md deleted file mode 100644 index 4c59b90cce..0000000000 --- a/engine/reference/commandline/search.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -redirect_from: - - /reference/commandline/search/ -description: The search command description and usage -keywords: -- search, hub, images -title: docker search ---- - -```markdown -Usage: docker search [OPTIONS] TERM - -Search the Docker Hub for images - -Options: - -f, --filter value Filter output based on conditions provided (default []) - - is-automated=(true|false) - - is-official=(true|false) - - stars= - image has at least 'number' stars - --help Print usage - --limit int Max number of search results (default 25) - --no-trunc Don't truncate output -``` - -Search [Docker Hub](https://hub.docker.com) for images - -See [*Find Public Images on Docker Hub*](../../tutorials/dockerrepos.md#searching-for-images) for -more details on finding shared images from the command line. - -> **Note:** -> Search queries will only return up to 25 results - -## Examples - -### Search images by name - -This example displays images with a name containing 'busybox': - - $ docker search busybox - NAME DESCRIPTION STARS OFFICIAL AUTOMATED - busybox Busybox base image. 316 [OK] - progrium/busybox 50 [OK] - radial/busyboxplus Full-chain, Internet enabled, busybox made... 8 [OK] - odise/busybox-python 2 [OK] - azukiapp/busybox This image is meant to be used as the base... 2 [OK] - ofayau/busybox-jvm Prepare busybox to install a 32 bits JVM. 1 [OK] - shingonoide/archlinux-busybox Arch Linux, a lightweight and flexible Lin... 1 [OK] - odise/busybox-curl 1 [OK] - ofayau/busybox-libc32 Busybox with 32 bits (and 64 bits) libs 1 [OK] - peelsky/zulu-openjdk-busybox 1 [OK] - skomma/busybox-data Docker image suitable for data volume cont... 1 [OK] - elektritter/busybox-teamspeak Lightweight teamspeak3 container based on... 1 [OK] - socketplane/busybox 1 [OK] - oveits/docker-nginx-busybox This is a tiny NginX docker image based on... 0 [OK] - ggtools/busybox-ubuntu Busybox ubuntu version with extra goodies 0 [OK] - nikfoundas/busybox-confd Minimal busybox based distribution of confd 0 [OK] - openshift/busybox-http-app 0 [OK] - jllopis/busybox 0 [OK] - swyckoff/busybox 0 [OK] - powellquiring/busybox 0 [OK] - williamyeh/busybox-sh Docker image for BusyBox's sh 0 [OK] - simplexsys/busybox-cli-powered Docker busybox images, with a few often us... 0 [OK] - fhisamoto/busybox-java Busybox java 0 [OK] - scottabernethy/busybox 0 [OK] - marclop/busybox-solr - -### Display non-truncated description (--no-trunc) - -This example displays images with a name containing 'busybox', -at least 3 stars and the description isn't truncated in the output: - - $ docker search --stars=3 --no-trunc busybox - NAME DESCRIPTION STARS OFFICIAL AUTOMATED - busybox Busybox base image. 325 [OK] - progrium/busybox 50 [OK] - radial/busyboxplus Full-chain, Internet enabled, busybox made from scratch. Comes in git and cURL flavors. 8 [OK] - -## Limit search results (--limit) - -The flag `--limit` is the maximum number of results returned by a search. This value could -be in the range between 1 and 100. The default value of `--limit` is 25. - - -## Filtering - -The filtering flag (`-f` or `--filter`) format is a `key=value` pair. If there is more -than one filter, then pass multiple flags (e.g. `--filter "foo=bar" --filter "bif=baz"`) - -The currently supported filters are: - -* stars (int - number of stars the image has) -* is-automated (true|false) - is the image automated or not -* is-official (true|false) - is the image official or not - - -### stars - -This example displays images with a name containing 'busybox' and at -least 3 stars: - - $ docker search --filter stars=3 busybox - NAME DESCRIPTION STARS OFFICIAL AUTOMATED - busybox Busybox base image. 325 [OK] - progrium/busybox 50 [OK] - radial/busyboxplus Full-chain, Internet enabled, busybox made... 8 [OK] - - -### is-automated - -This example displays images with a name containing 'busybox' -and are automated builds: - - $ docker search --filter is-automated busybox - NAME DESCRIPTION STARS OFFICIAL AUTOMATED - progrium/busybox 50 [OK] - radial/busyboxplus Full-chain, Internet enabled, busybox made... 8 [OK] - -### is-official - -This example displays images with a name containing 'busybox', at least -3 stars and are official builds: - - $ docker search --filter "is-automated=true" --filter "stars=3" busybox - NAME DESCRIPTION STARS OFFICIAL AUTOMATED - progrium/busybox 50 [OK] - radial/busyboxplus Full-chain, Internet enabled, busybox made... 8 [OK] diff --git a/engine/reference/commandline/service_create.md b/engine/reference/commandline/service_create.md deleted file mode 100644 index 9a81e198a6..0000000000 --- a/engine/reference/commandline/service_create.md +++ /dev/null @@ -1,469 +0,0 @@ ---- -redirect_from: - - /reference/commandline/service_create/ -description: The service create command description and usage -keywords: -- service, create -title: docker service create ---- - -**Warning:** this command is part of the Swarm management feature introduced in Docker 1.12, and might be subject to non backward-compatible changes. - -```Markdown -Usage: docker service create [OPTIONS] IMAGE [COMMAND] [ARG...] - -Create a new service - -Options: - --constraint value Placement constraints (default []) - --container-label value Service container labels (default []) - --endpoint-mode string Endpoint mode (vip or dnsrr) - -e, --env value Set environment variables (default []) - --help Print usage - -l, --label value Service labels (default []) - --limit-cpu value Limit CPUs (default 0.000) - --limit-memory value Limit Memory (default 0 B) - --log-driver string Logging driver for service - --log-opt value Logging driver options (default []) - --mode string Service mode (replicated or global) (default "replicated") - --mount value Attach a mount to the service - --name string Service name - --network value Network attachments (default []) - -p, --publish value Publish a port as a node port (default []) - --replicas value Number of tasks (default none) - --reserve-cpu value Reserve CPUs (default 0.000) - --reserve-memory value Reserve Memory (default 0 B) - --restart-condition string Restart when condition is met (none, on-failure, or any) - --restart-delay value Delay between restart attempts (default none) - --restart-max-attempts value Maximum number of restarts before giving up (default none) - --restart-window value Window used to evaluate the restart policy (default none) - --stop-grace-period value Time to wait before force killing a container (default none) - --update-delay duration Delay between updates - --update-failure-action string Action on update failure (pause|continue) (default "pause") - --update-parallelism uint Maximum number of tasks updated simultaneously (0 to update all at once) (default 1) - -u, --user string Username or UID - --with-registry-auth Send registry authentication details to Swarm agents - -w, --workdir string Working directory inside the container -``` - -Creates a service as described by the specified parameters. You must run this -command on a manager node. - -## Examples - -### Create a service - -```bash -$ docker service create --name redis redis:3.0.6 -dmu1ept4cxcfe8k8lhtux3ro3 - -$ docker service ls -ID NAME REPLICAS IMAGE COMMAND -dmu1ept4cxcf redis 1/1 redis:3.0.6 -``` - -### Create a service with 5 replica tasks (--replicas) - -Use the `--replicas` flag to set the number of replica tasks for a replicated -service. The following command creates a `redis` service with `5` replica tasks: - -```bash -$ docker service create --name redis --replicas=5 redis:3.0.6 -4cdgfyky7ozwh3htjfw0d12qv -``` - -The above command sets the *desired* number of tasks for the service. Even -though the command returns immediately, actual scaling of the service may take -some time. The `REPLICAS` column shows both the *actual* and *desired* number -of replica tasks for the service. - -In the following example the desired state is `5` replicas, but the current -number of `RUNNING` tasks is `3`: - -```bash -$ docker service ls -ID NAME REPLICAS IMAGE COMMAND -4cdgfyky7ozw redis 3/5 redis:3.0.7 -``` - -Once all the tasks are created and `RUNNING`, the actual number of tasks is -equal to the desired number: - -```bash -$ docker service ls -ID NAME REPLICAS IMAGE COMMAND -4cdgfyky7ozw redis 5/5 redis:3.0.7 -``` - -### Create a service with a rolling update policy - -```bash -$ docker service create \ - --replicas 10 \ - --name redis \ - --update-delay 10s \ - --update-parallelism 2 \ - redis:3.0.6 -``` - -When you run a [service update](service_update.md), the scheduler updates a -maximum of 2 tasks at a time, with `10s` between updates. For more information, -refer to the [rolling updates -tutorial](../../swarm/swarm-tutorial/rolling-update.md). - -### Set environment variables (-e, --env) - -This sets environmental variables for all tasks in a service. For example: - -```bash -$ docker service create --name redis_2 --replicas 5 --env MYVAR=foo redis:3.0.6 -``` - -### Set metadata on a service (-l, --label) - -A label is a `key=value` pair that applies metadata to a service. To label a -service with two labels: - -```bash -$ docker service create \ - --name redis_2 \ - --label com.example.foo="bar" - --label bar=baz \ - redis:3.0.6 -``` - -For more information about labels, refer to [apply custom -metadata](../../userguide/labels-custom-metadata.md). - -### Add bind-mounts or volumes - -Docker supports two different kinds of mounts, which allow containers to read to -or write from files or directories on other containers or the host operating -system. These types are _data volumes_ (often referred to simply as volumes) and -_bind-mounts_. - -A **bind-mount** makes a file or directory on the host available to the -container it is mounted within. A bind-mount may be either read-only or -read-write. For example, a container might share its host's DNS information by -means of a bind-mount of the host's `/etc/resolv.conf` or a container might -write logs to its host's `/var/log/myContainerLogs` directory. If you use -bind-mounts and your host and containers have different notions of permissions, -access controls, or other such details, you will run into portability issues. - -A **named volume** is a mechanism for decoupling persistent data needed by your -container from the image used to create the container and from the host machine. -Named volumes are created and managed by Docker, and a named volume persists -even when no container is currently using it. Data in named volumes can be -shared between a container and the host machine, as well as between multiple -containers. Docker uses a _volume driver_ to create, manage, and mount volumes. -You can back up or restore volumes using Docker commands. - -Consider a situation where your image starts a lightweight web server. You could -use that image as a base image, copy in your website's HTML files, and package -that into another image. Each time your website changed, you'd need to update -the new image and redeploy all of the containers serving your website. A better -solution is to store the website in a named volume which is attached to each of -your web server containers when they start. To update the website, you just -update the named volume. - -For more information about named volumes, see -[Data Volumes](/engine/tutorials/dockervolumes/). - -The following table describes options which apply to both bind-mounts and named -volumes in a service: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionRequiredDescription
typeThe type of mount, can be either volume, or bind. Defaults to volume if no type is specified.
  • volume: mounts a managed volume into the container.
  • bind: bind-mounts a directory or file from the host into the container.
src or sourcefor type=bind only
  • type=volume: src is an optional way to specify the name of the volume (for example, src=my-volume). If the named volume does not exist, it is automatically created. If no src is specified, the volume is assigned a random name which is guaranteed to be unique on the host, but may not be unique cluster-wide. A randomly-named volume has the same lifecycle as its container and is destroyed when the container is destroyed (which is upon service update, or when scaling or re-balancing the service).
  • type=bind: src is required, and specifies an absolute path to the file or directory to bind-mount (for example, src=/path/on/host/). An error is produced if the file or directory does not exist.
dst or destination or targetyesMount path inside the container, for example /some/path/in/container/. If the path does not exist in the container’s filesystem, the Engine creates a directory at the specified location before mounting the volume or bind-mount.
readonly or roThe Engine mounts binds and volumes read-write unless readonly option is given when mounting the bind or volume.

  • true or 1 or no value: Mounts the bind or volume read-only.
  • false or 0: Mounts the bind or volume read-write.
- -#### Bind Propagation - -Bind propagation refers to whether or not mounts created within a given -bind-mount or named volume can be propagated to replicas of that mount. Consider -a mount point `/mnt`, which is also mounted on `/tmp`. The propagation settings -control whether a mount on `/tmp/a` would also be available on `/mnt/a`. Each -propagation setting has a recursive counterpoint. In the case of recursion, -consider that `/tmp/a` is also mounted as `/foo`. The propagation settings -control whether `/mnt/a` and/or `/tmp/a` would exist. - -The `bind-propagation` option defaults to `rprivate` for both bind-mounts and -volume mounts, and is only configurable for bind-mounts. In other words, named -volumes do not support bind propagation. - -- **`shared`**: Sub-mounts of the original mount are exposed to replica mounts, - and sub-mounts of replica mounts are also propagated to the - original mount. -- **`slave`**: similar to a shared mount, but only in one direction. If the - original mount exposes a sub-mount, the replica mount can see it. - However, if the replica mount exposes a sub-mount, the original - mount cannot see it. -- **`private`**: The mount is private. Sub-mounts within it are not exposed to - replica mounts, and sub-mounts of replica mounts are not - exposed to the original mount. -- **`rshared`**: The same as shared, but the propagation also extends to and from - mount points nested within any of the original or replica mount - points. -- **`rslave`**: The same as `slave`, but the propagation also extends to and from - mount points nested within any of the original or replica mount - points. -- **`rprivate`**: The default. The same as `private`, meaning that no mount points - anywhere within the original or replica mount points propagate - in either direction. - -For more information about bind propagation, see the -[Linux kernel documentation for shared subtree](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt). - -#### Options for Named Volumes -The following options can only be used for named volumes (`type=volume`); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescription
volume-driverName of the volume-driver plugin to use for the volume. Defaults to "local", to use the local volume driver to create the volume if the volume does not exist.
volume-labelOne or more custom metadata (“labels”) to apply to the volume upon creation. For example, volume-label=mylabel=hello-world,my-other-label=hello-mars. For more information about labels, refer to apply custom metadata.
volume-nocopyBy default, if you attach an empty volume to a container, and files or directories already existed at the mount-path in the container (dst), the Engine copies those files and directories into the volume, allowing the host to access them. Set volume-nocopy to disables copying files from the container’s filesystem to the volume and mount the empty volume.

A value is optional:
  • true or 1: Default if you do not provide a value. Disables copying.
  • false or 0: Enables copying.
volume-optOptions specific to a given volume driver, which will be passed to the driver when creating the volume. Options are provided as a comma-separated list of key/value pairs, for example, volume-opt=some-option=some-value,some-other-option=some-other-value. For available options for a given driver, refer to that driver’s documentation.
- - -#### Differences between "--mount" and "--volume" - -The `--mount` flag supports most options that are supported by the `-v` -or `--volume` flag for `docker run`, with some important exceptions: - -- The `--mount` flag allows you to specify a volume driver and volume driver - options *per volume*, without creating the volumes in advance. In contrast, - `docker run` allows you to specify a single volume driver which is shared - by all volumes, using the `--volume-driver` flag. - -- The `--mount` flag allows you to specify custom metadata ("labels") for a volume, - before the volume is created. - -- When you use `--mount` with `type=bind`, the host-path must refer to an *existing* - path on the host. The path will not be created for you and the service will fail - with an error if the path does not exist. - -- The `--mount` flag does not allow you to relabel a volume with `Z` or `z` flags, - which are used for `selinux` labeling. - -#### Create a service using a named volume - -The following example creates a service that uses a named volume: - -```bash -$ docker service create \ - --name my-service \ - --replicas 3 \ - --mount type=volume,source=my-volume,destination=/path/in/container,volume-label="color=red",volume-label="shape=round" \ - nginx:alpine -``` - -For each replica of the service, the engine requests a volume named "my-volume" -from the default ("local") volume driver where the task is deployed. If the -volume does not exist, the engine creates a new volume and applies the "color" -and "shape" labels. - -When the task is started, the volume is mounted on `/path/in/container/` inside -the container. - -Be aware that the default ("local") volume is a locally scoped volume driver. -This means that depending on where a task is deployed, either that task gets a -*new* volume named "my-volume", or shares the same "my-volume" with other tasks -of the same service. Multiple containers writing to a single shared volume can -cause data corruption if the software running inside the container is not -designed to handle concurrent processes writing to the same location. Also take -into account that containers can be re-scheduled by the Swarm orchestrator and -be deployed on a different node. - -#### Create a service that uses an anonymous volume - -The following command creates a service with three replicas with an anonymous -volume on `/path/in/container`: - -```bash -$ docker service create \ - --name my-service \ - --replicas 3 \ - --mount type=volume,destination=/path/in/container \ - nginx:alpine -``` - -In this example, no name (`source`) is specified for the volume, so a new volume -is created for each task. This guarantees that each task gets its own volume, -and volumes are not shared between tasks. Anonymous volumes are removed after -the task using them is complete. - -#### Create a service that uses a bind-mounted host directory - -The following example bind-mounts a host directory at `/path/in/container` in -the containers backing the service: - -```bash -$ docker service create \ - --name my-service \ - --mount type=bind,source=/path/on/host,destination=/path/in/container \ - nginx:alpine -``` - -### Set service mode (--mode) - -The service mode determines whether this is a _replicated_ service or a _global_ -service. A replicated service runs as many tasks as specified, while a global -service runs on each active node in the swarm. - -The following command creates a global service: - -```bash -$ docker service create \ - --name redis_2 \ - --mode global \ - redis:3.0.6 -``` - -### Specify service constraints (--constraint) - -You can limit the set of nodes where a task can be scheduled by defining -constraint expressions. Multiple constraints find nodes that satisfy every -expression (AND match). Constraints can match node or Docker Engine labels as -follows: - -| node attribute | matches | example | -|:----------------|:--------------------------|:------------------------------------------------| -| node.id | node ID | `node.id == 2ivku8v2gvtg4` | -| node.hostname | node hostname | `node.hostname != node-2` | -| node.role | node role: manager | `node.role == manager` | -| node.labels | user defined node labels | `node.labels.security == high` | -| engine.labels | Docker Engine's labels | `engine.labels.operatingsystem == ubuntu 14.04` | - -`engine.labels` apply to Docker Engine labels like operating system, -drivers, etc. Swarm administrators add `node.labels` for operational purposes by -using the [`docker node update`](node_update.md) command. - -For example, the following limits tasks for the redis service to nodes where the -node type label equals queue: - -```bash -$ docker service create \ - --name redis_2 \ - --constraint 'node.labels.type == queue' \ - redis:3.0.6 -``` - -### Attach a service to an existing network (--network) - -You can use overlay networks to connect one or more services within the swarm. - -First, create an overlay network on a manager node the docker network create -command: - -```bash -$ docker network create --driver overlay my-network - -etjpu59cykrptrgw0z0hk5snf -``` - -After you create an overlay network in swarm mode, all manager nodes have -access to the network. - -When you create a service and pass the --network flag to attach the service to -the overlay network: - -```bash -$ docker service create \ - --replicas 3 \ - --network my-network \ - --name my-web \ - nginx - -716thylsndqma81j6kkkb5aus -``` - -The swarm extends my-network to each node running the service. - -Containers on the same network can access each other using -[service discovery](../../swarm/networking.md#use-swarm-mode-service-discovery). - -### Publish service ports externally to the swarm (-p, --publish) - -You can publish service ports to make them available externally to the swarm -using the `--publish` flag: - -```bash -$ docker service create --publish : nginx -``` - -For example: - -```bash -$ docker service create --name my_web --replicas 3 --publish 8080:80 nginx -``` - -When you publish a service port, the swarm routing mesh makes the service -accessible at the target port on every node regardless if there is a task for -the service running on the node. For more information refer to -[Use swarm mode routing mesh](../../swarm/ingress.md). - -## Related information - -* [service inspect](service_inspect.md) -* [service ls](service_ls.md) -* [service rm](service_rm.md) -* [service scale](service_scale.md) -* [service ps](service_ps.md) -* [service update](service_update.md) - - diff --git a/engine/reference/commandline/service_inspect.md b/engine/reference/commandline/service_inspect.md deleted file mode 100644 index 5954bb8c41..0000000000 --- a/engine/reference/commandline/service_inspect.md +++ /dev/null @@ -1,152 +0,0 @@ ---- -redirect_from: - - /reference/commandline/service_inspect/ -description: The service inspect command description and usage -keywords: -- service, inspect -title: docker service inspect ---- - -**Warning:** this command is part of the Swarm management feature introduced in Docker 1.12, and might be subject to non backward-compatible changes. - -```Markdown -Usage: docker service inspect [OPTIONS] SERVICE [SERVICE...] - -Display detailed information on one or more services - -Options: - -f, --format string Format the output using the given go template - --help Print usage - --pretty Print the information in a human friendly format. -``` - - -Inspects the specified service. This command has to be run targeting a manager -node. - -By default, this renders all results in a JSON array. If a format is specified, -the given template will be executed for each result. - -Go's [text/template](http://golang.org/pkg/text/template/) package -describes all the details of the format. - -## Examples - -### Inspecting a service by name or ID - -You can inspect a service, either by its *name*, or *ID* - -For example, given the following service; - -```bash -$ docker service ls -ID NAME REPLICAS IMAGE COMMAND -dmu1ept4cxcf redis 3/3 redis:3.0.6 -``` - -Both `docker service inspect redis`, and `docker service inspect dmu1ept4cxcf` -produce the same result: - -```bash -$ docker service inspect redis -[ - { - "ID": "dmu1ept4cxcfe8k8lhtux3ro3", - "Version": { - "Index": 12 - }, - "CreatedAt": "2016-06-17T18:44:02.558012087Z", - "UpdatedAt": "2016-06-17T18:44:02.558012087Z", - "Spec": { - "Name": "redis", - "TaskTemplate": { - "ContainerSpec": { - "Image": "redis:3.0.6" - }, - "Resources": { - "Limits": {}, - "Reservations": {} - }, - "RestartPolicy": { - "Condition": "any", - "MaxAttempts": 0 - }, - "Placement": {} - }, - "Mode": { - "Replicated": { - "Replicas": 1 - } - }, - "UpdateConfig": {}, - "EndpointSpec": { - "Mode": "vip" - } - }, - "Endpoint": { - "Spec": {} - } - } -] -``` - -```bash -$ docker service inspect dmu1ept4cxcf -[ - { - "ID": "dmu1ept4cxcfe8k8lhtux3ro3", - "Version": { - "Index": 12 - }, - ... - } -] -``` - -### Inspect a service using pretty-print - -You can print the inspect output in a human-readable format instead of the default -JSON output, by using the `--pretty` option: - -```bash -$ docker service inspect --pretty frontend -ID: c8wgl7q4ndfd52ni6qftkvnnp -Name: frontend -Labels: - - org.example.projectname=demo-app -Mode: REPLICATED - Replicas: 5 -Placement: -UpdateConfig: - Parallelism: 0 -ContainerSpec: - Image: nginx:alpine -Resources: -Ports: - Name = - Protocol = tcp - TargetPort = 443 - PublishedPort = 4443 -``` - - -### Finding the number of tasks running as part of a service - -The `--format` option can be used to obtain specific information about a -service. For example, the following command outputs the number of replicas -of the "redis" service. - -```bash{% raw %} -$ docker service inspect --format='{{.Spec.Mode.Replicated.Replicas}}' redis -10 -{% endraw %}``` - - -## Related information - -* [service create](service_create.md) -* [service ls](service_ls.md) -* [service rm](service_rm.md) -* [service scale](service_scale.md) -* [service ps](service_ps.md) -* [service update](service_update.md) diff --git a/engine/reference/commandline/service_ls.md b/engine/reference/commandline/service_ls.md deleted file mode 100644 index ed5b98f558..0000000000 --- a/engine/reference/commandline/service_ls.md +++ /dev/null @@ -1,108 +0,0 @@ ---- -redirect_from: - - /reference/commandline/service_ls/ -description: The service ls command description and usage -keywords: -- service, ls -title: docker service ls ---- - -**Warning:** this command is part of the Swarm management feature introduced in Docker 1.12, and might be subject to non backward-compatible changes. - -```Markdown -Usage: docker service ls [OPTIONS] - -List services - -Aliases: - ls, list - -Options: - -f, --filter value Filter output based on conditions provided - --help Print usage - -q, --quiet Only display IDs -``` - -This command when run targeting a manager, lists services are running in the -swarm. - -On a manager node: - -```bash -ID NAME REPLICAS IMAGE COMMAND -c8wgl7q4ndfd frontend 5/5 nginx:alpine -dmu1ept4cxcf redis 3/3 redis:3.0.6 -``` - -The `REPLICAS` column shows both the *actual* and *desired* number of tasks for -the service. - - -## Filtering - -The filtering flag (`-f` or `--filter`) format is of "key=value". If there is more -than one filter, then pass multiple flags (e.g., `--filter "foo=bar" --filter "bif=baz"`) - -The currently supported filters are: - -* [id](service_ls.md#id) -* [label](service_ls.md#label) -* [name](service_ls.md#name) - -#### ID - -The `id` filter matches all or part of a service's id. - -```bash -$ docker service ls -f "id=0bcjw" -ID NAME REPLICAS IMAGE COMMAND -0bcjwfh8ychr redis 1/1 redis:3.0.6 -``` - -#### Label - -The `label` filter matches services based on the presence of a `label` alone or -a `label` and a value. - -The following filter matches all services with a `project` label regardless of -its value: - -```bash -$ docker service ls --filter label=project -ID NAME REPLICAS IMAGE COMMAND -01sl1rp6nj5u frontend2 1/1 nginx:alpine -36xvvwwauej0 frontend 5/5 nginx:alpine -74nzcxxjv6fq backend 3/3 redis:3.0.6 -``` - -The following filter matches only services with the `project` label with the -`project-a` value. - -```bash -$ docker service ls --filter label=project=project-a -ID NAME REPLICAS IMAGE COMMAND -36xvvwwauej0 frontend 5/5 nginx:alpine -74nzcxxjv6fq backend 3/3 redis:3.0.6 -``` - - -#### Name - -The `name` filter matches on all or part of a tasks's name. - -The following filter matches services with a name containing `redis`. - -```bash -$ docker service ls --filter name=redis -ID NAME REPLICAS IMAGE COMMAND -0bcjwfh8ychr redis 1/1 redis:3.0.6 -``` - -## Related information - -* [service create](service_create.md) -* [service inspect](service_inspect.md) -* [service rm](service_rm.md) -* [service scale](service_scale.md) -* [service ps](service_ps.md) -* [service update](service_update.md) diff --git a/engine/reference/commandline/service_ps.md b/engine/reference/commandline/service_ps.md deleted file mode 100644 index 65d4e602a4..0000000000 --- a/engine/reference/commandline/service_ps.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -redirect_from: -- /reference/commandline/service_ps/ -- /engine/reference/commandline/service_tasks/ -description: The service ps command description and usage -keywords: -- service, tasks -- ps -title: docker service ps ---- - -**Warning:** this command is part of the Swarm management feature introduced in Docker 1.12, and might be subject to non backward-compatible changes. - -```Markdown -Usage: docker service ps [OPTIONS] SERVICE - -List the tasks of a service - -Options: - -a, --all Display all tasks - -f, --filter value Filter output based on conditions provided - --help Print usage - --no-resolve Do not map IDs to Names -``` - -Lists the tasks that are running as part of the specified service. This command -has to be run targeting a manager node. - - -## Examples - -### Listing the tasks that are part of a service - -The following command shows all the tasks that are part of the `redis` service: - -```bash -$ docker service ps redis -ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE -0qihejybwf1x5vqi8lgzlgnpq redis.1 redis redis:3.0.6 Running 8 seconds Running manager1 -bk658fpbex0d57cqcwoe3jthu redis.2 redis redis:3.0.6 Running 9 seconds Running worker2 -5ls5s5fldaqg37s9pwayjecrf redis.3 redis redis:3.0.6 Running 9 seconds Running worker1 -8ryt076polmclyihzx67zsssj redis.4 redis redis:3.0.6 Running 9 seconds Running worker1 -1x0v8yomsncd6sbvfn0ph6ogc redis.5 redis redis:3.0.6 Running 8 seconds Running manager1 -71v7je3el7rrw0osfywzs0lko redis.6 redis redis:3.0.6 Running 9 seconds Running worker2 -4l3zm9b7tfr7cedaik8roxq6r redis.7 redis redis:3.0.6 Running 9 seconds Running worker2 -9tfpyixiy2i74ad9uqmzp1q6o redis.8 redis redis:3.0.6 Running 9 seconds Running worker1 -3w1wu13yuplna8ri3fx47iwad redis.9 redis redis:3.0.6 Running 8 seconds Running manager1 -8eaxrb2fqpbnv9x30vr06i6vt redis.10 redis redis:3.0.6 Running 8 seconds Running manager1 -``` - - -## Filtering - -The filtering flag (`-f` or `--filter`) format is a `key=value` pair. If there -is more than one filter, then pass multiple flags (e.g. `--filter "foo=bar" --filter "bif=baz"`). -Multiple filter flags are combined as an `OR` filter. For example, -`-f name=redis.1 -f name=redis.7` returns both `redis.1` and `redis.7` tasks. - -The currently supported filters are: - -* [id](service_ps.md#id) -* [name](service_ps.md#name) -* [desired-state](service_ps.md#desired-state) - - -#### ID - -The `id` filter matches on all or a prefix of a task's ID. - -```bash -$ docker service ps -f "id=8" redis -ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE -8ryt076polmclyihzx67zsssj redis.4 redis redis:3.0.6 Running 4 minutes Running worker1 -8eaxrb2fqpbnv9x30vr06i6vt redis.10 redis redis:3.0.6 Running 4 minutes Running manager1 -``` - -#### Name - -The `name` filter matches on task names. - -```bash -$ docker service ps -f "name=redis.1" redis -ID NAME SERVICE IMAGE DESIRED STATE LAST STATE NODE -0qihejybwf1x5vqi8lgzlgnpq redis.1 redis redis:3.0.6 Running Running 8 seconds manager1 -``` - - -#### desired-state - -The `desired-state` filter can take the values `running`, `shutdown`, and `accepted`. - - -## Related information - -* [service create](service_create.md) -* [service inspect](service_inspect.md) -* [service ls](service_ls.md) -* [service rm](service_rm.md) -* [service scale](service_scale.md) -* [service update](service_update.md) diff --git a/engine/reference/commandline/service_rm.md b/engine/reference/commandline/service_rm.md deleted file mode 100644 index 2560f73734..0000000000 --- a/engine/reference/commandline/service_rm.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -redirect_from: - - /reference/commandline/service_rm/ -description: The service rm command description and usage -keywords: -- service, rm -title: docker service rm ---- - -**Warning:** this command is part of the Swarm management feature introduced in Docker 1.12, and might be subject to non backward-compatible changes. - -```Markdown -Usage: docker service rm [OPTIONS] SERVICE [SERVICE...] - -Remove one or more services - -Aliases: - rm, remove - -Options: - --help Print usage -``` - -Removes the specified services from the swarm. This command has to be run -targeting a manager node. - -For example, to remove the redis service: - -```bash -$ docker service rm redis -redis -$ docker service ls -ID NAME SCALE IMAGE COMMAND -``` - -> **Warning**: Unlike `docker rm`, this command does not ask for confirmation -> before removing a running service. - - - -## Related information - -* [service create](service_create.md) -* [service inspect](service_inspect.md) -* [service ls](service_ls.md) -* [service scale](service_scale.md) -* [service ps](service_ps.md) -* [service update](service_update.md) diff --git a/engine/reference/commandline/service_scale.md b/engine/reference/commandline/service_scale.md deleted file mode 100644 index 9393d84923..0000000000 --- a/engine/reference/commandline/service_scale.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -redirect_from: - - /reference/commandline/service_scale/ -description: The service scale command description and usage -keywords: -- service, scale -title: docker service scale ---- - -**Warning:** this command is part of the Swarm management feature introduced in Docker 1.12, and might be subject to non backward-compatible changes. - -```markdown -Usage: docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...] - -Scale one or multiple services - -Options: - --help Print usage -``` - -## Examples - -### Scale a service - -The scale command enables you to scale one or more services either up or down to the desired number of replicas. The command will return immediatly, but the actual scaling of the service may take some time. To stop all replicas of a service while keeping the service active in the swarm you can set the scale to 0. - - -For example, the following command scales the "frontend" service to 50 tasks. - -```bash -$ docker service scale frontend=50 -frontend scaled to 50 -``` - -Directly afterwards, run `docker service ls`, to see the actual number of -replicas - -```bash -$ docker service ls --filter name=frontend - -ID NAME REPLICAS IMAGE COMMAND -3pr5mlvu3fh9 frontend 15/50 nginx:alpine -``` - -You can also scale a service using the [`docker service update`](service_update.md) -command. The following commands are therefore equivalent: - -```bash -$ docker service scale frontend=50 -$ docker service update --replicas=50 frontend -``` - -### Scale multiple services - -The `docker service scale` command allows you to set the desired number of -tasks for multiple services at once. The following example scales both the -backend and frontend services: - -```bash -$ docker service scale backend=3 frontend=5 -backend scaled to 3 -frontend scaled to 5 - -$ docker service ls -ID NAME REPLICAS IMAGE COMMAND -3pr5mlvu3fh9 frontend 5/5 nginx:alpine -74nzcxxjv6fq backend 3/3 redis:3.0.6 -``` - -## Related information - -* [service create](service_create.md) -* [service inspect](service_inspect.md) -* [service ls](service_ls.md) -* [service rm](service_rm.md) -* [service ps](service_ps.md) -* [service update](service_update.md) diff --git a/engine/reference/commandline/service_update.md b/engine/reference/commandline/service_update.md deleted file mode 100644 index 8aef9114a8..0000000000 --- a/engine/reference/commandline/service_update.md +++ /dev/null @@ -1,113 +0,0 @@ ---- -redirect_from: - - /reference/commandline/service_update/ -description: The service update command description and usage -keywords: -- service, update -title: docker service update ---- - -**Warning:** this command is part of the Swarm management feature introduced in Docker 1.12, and might be subject to non backward-compatible changes. - -```Markdown -Usage: docker service update [OPTIONS] SERVICE - -Update a service - -Options: - --args string Service command args - --constraint-add value Add or update placement constraints (default []) - --constraint-rm value Remove a constraint (default []) - --container-label-add value Add or update container labels (default []) - --container-label-rm value Remove a container label by its key (default []) - --endpoint-mode string Endpoint mode (vip or dnsrr) - --env-add value Add or update environment variables (default []) - --env-rm value Remove an environment variable (default []) - --help Print usage - --image string Service image tag - --label-add value Add or update service labels (default []) - --label-rm value Remove a label by its key (default []) - --limit-cpu value Limit CPUs (default 0.000) - --limit-memory value Limit Memory (default 0 B) - --log-driver string Logging driver for service - --log-opt value Logging driver options (default []) - --mount-add value Add or update a mount on a service - --mount-rm value Remove a mount by its target path (default []) - --name string Service name - --publish-add value Add or update a published port (default []) - --publish-rm value Remove a published port by its target port (default []) - --replicas value Number of tasks (default none) - --reserve-cpu value Reserve CPUs (default 0.000) - --reserve-memory value Reserve Memory (default 0 B) - --restart-condition string Restart when condition is met (none, on-failure, or any) - --restart-delay value Delay between restart attempts (default none) - --restart-max-attempts value Maximum number of restarts before giving up (default none) - --restart-window value Window used to evaluate the restart policy (default none) - --stop-grace-period value Time to wait before force killing a container (default none) - --update-delay duration Delay between updates - --update-failure-action string Action on update failure (pause|continue) (default "pause") - --update-parallelism uint Maximum number of tasks updated simultaneously (0 to update all at once) (default 1) - -u, --user string Username or UID - --with-registry-auth Send registry authentication details to Swarm agents - -w, --workdir string Working directory inside the container -``` - -Updates a service as described by the specified parameters. This command has to be run targeting a manager node. -The parameters are the same as [`docker service create`](service_create.md). Please look at the description there -for further information. - -## Examples - -### Update a service - -```bash -$ docker service update --limit-cpu 2 redis -``` - -### Adding and removing mounts - -Use the `--mount-add` or `--mount-rm` options add or remove a service's bind-mounts -or volumes. - -The following example creates a service which mounts the `test-data` volume to -`/somewhere`. The next step updates the service to also mount the `other-volume` -volume to `/somewhere-else`volume, The last step unmounts the `/somewhere` mount -point, effectively removing the `test-data` volume. Each command returns the -service name. - -- The `--mount-add` flag takes the same parameters as the `--mount` flag on - `service create`. Refer to the [volumes and - bind-mounts](service_create.md#volumes-and-bind-mounts-mount) section in the - `service create` reference for details. - -- The `--mount-rm` flag takes the `target` path of the mount. - -```bash -$ docker service create \ - --name=myservice \ - --mount \ - type=volume,source=test-data,target=/somewhere \ - nginx:alpine \ - myservice - -myservice - -$ docker service update \ - --mount-add \ - type=volume,source=other-volume,target=/somewhere-else \ - myservice - -myservice - -$ docker service update --mount-rm /somewhere myservice - -myservice -``` - -## Related information - -* [service create](service_create.md) -* [service inspect](service_inspect.md) -* [service ps](service_ps.md) -* [service ls](service_ls.md) -* [service rm](service_rm.md) diff --git a/engine/reference/commandline/stack_config.md b/engine/reference/commandline/stack_config.md deleted file mode 100644 index cf74f76137..0000000000 --- a/engine/reference/commandline/stack_config.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -redirect_from: - - /reference/commandline/stack_config/ -advisory: experimental -description: The stack config command description and usage -keywords: -- stack, config -title: docker stack config (experimental) ---- - -```markdown -Usage: docker stack config [OPTIONS] STACK - -Print the stack configuration - -Options: - --file string Path to a Distributed Application Bundle file (Default: STACK.dab) - --help Print usage -``` - -Displays the configuration of a stack. - -## Related information - -* [stack deploy](stack_deploy.md) -* [stack rm](stack_rm.md) -* [stack services](stack_services.md) -* [stack tasks](stack_tasks.md) diff --git a/engine/reference/commandline/stack_deploy.md b/engine/reference/commandline/stack_deploy.md deleted file mode 100644 index bb72084cd0..0000000000 --- a/engine/reference/commandline/stack_deploy.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -redirect_from: - - /reference/commandline/stack_deploy/ -advisory: experimental -description: The stack deploy command description and usage -keywords: -- stack, deploy, up -title: docker stack deploy (experimental) ---- - -```markdown -Usage: docker stack deploy [OPTIONS] STACK - -Create and update a stack from a Distributed Application Bundle (DAB) - -Aliases: - deploy, up - -Options: - --file string Path to a Distributed Application Bundle file (Default: STACK.dab) - --help Print usage -``` - -Create and update a stack from a `dab` file on the swarm. This command -has to be run targeting a manager node. - -```bash -$ docker stack deploy vossibility-stack -Loading bundle from vossibility-stack.dab -Creating service vossibility-stack_elasticsearch -Creating service vossibility-stack_kibana -Creating service vossibility-stack_logstash -Creating service vossibility-stack_lookupd -Creating service vossibility-stack_nsqd -Creating service vossibility-stack_vossibility-collector -``` - -You can verify that the services were correctly created: - -```bash -$ docker service ls -ID NAME REPLICAS IMAGE -COMMAND -29bv0vnlm903 vossibility-stack_lookupd 1 nsqio/nsq@sha256:eeba05599f31eba418e96e71e0984c3dc96963ceb66924dd37a47bf7ce18a662 /nsqlookupd -4awt47624qwh vossibility-stack_nsqd 1 nsqio/nsq@sha256:eeba05599f31eba418e96e71e0984c3dc96963ceb66924dd37a47bf7ce18a662 /nsqd --data-path=/data --lookupd-tcp-address=lookupd:4160 -4tjx9biia6fs vossibility-stack_elasticsearch 1 elasticsearch@sha256:12ac7c6af55d001f71800b83ba91a04f716e58d82e748fa6e5a7359eed2301aa -7563uuzr9eys vossibility-stack_kibana 1 kibana@sha256:6995a2d25709a62694a937b8a529ff36da92ebee74bafd7bf00e6caf6db2eb03 -9gc5m4met4he vossibility-stack_logstash 1 logstash@sha256:2dc8bddd1bb4a5a34e8ebaf73749f6413c101b2edef6617f2f7713926d2141fe logstash -f /etc/logstash/conf.d/logstash.conf -axqh55ipl40h vossibility-stack_vossibility-collector 1 icecrime/vossibility-collector@sha256:f03f2977203ba6253988c18d04061c5ec7aab46bca9dfd89a9a1fa4500989fba --config /config/config.toml --debug -``` - -## Related information - -* [stack config](stack_config.md) -* [stack rm](stack_rm.md) -* [stack services](stack_services.md) -* [stack tasks](stack_tasks.md) diff --git a/engine/reference/commandline/stack_rm.md b/engine/reference/commandline/stack_rm.md deleted file mode 100644 index 0d28698044..0000000000 --- a/engine/reference/commandline/stack_rm.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -redirect_from: - - /reference/commandline/stack_rm/ -advisory: experimental -description: The stack rm command description and usage -keywords: -- stack, rm, remove, down -title: docker stack rm (experimental) ---- - -```markdown -Usage: docker stack rm STACK - -Remove the stack - -Aliases: - rm, remove, down - -Options: - --help Print usage -``` - -Remove the stack from the swarm. This command has to be run targeting -a manager node. - -## Related information - -* [stack config](stack_config.md) -* [stack deploy](stack_deploy.md) -* [stack services](stack_services.md) -* [stack tasks](stack_tasks.md) diff --git a/engine/reference/commandline/stack_services.md b/engine/reference/commandline/stack_services.md deleted file mode 100644 index cbe8982fe2..0000000000 --- a/engine/reference/commandline/stack_services.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -redirect_from: - - /reference/commandline/stack_services/ -advisory: experimental -description: The stack services command description and usage -keywords: -- stack, services -title: docker stack services (experimental) ---- - -```markdown -Usage: docker stack services [OPTIONS] STACK - -List the services in the stack - -Options: - -f, --filter value Filter output based on conditions provided - --help Print usage - -q, --quiet Only display IDs -``` - -Lists the services that are running as part of the specified stack. This -command has to be run targeting a manager node. - -For example, the following command shows all services in the `myapp` stack: - -```bash -$ docker stack services myapp - -ID NAME REPLICAS IMAGE COMMAND -7be5ei6sqeye myapp_web 1/1 nginx@sha256:23f809e7fd5952e7d5be065b4d3643fbbceccd349d537b62a123ef2201bc886f -dn7m7nhhfb9y myapp_db 1/1 mysql@sha256:a9a5b559f8821fe73d58c3606c812d1c044868d42c63817fa5125fd9d8b7b539 -``` - -## Filtering - -The filtering flag (`-f` or `--filter`) format is a `key=value` pair. If there -is more than one filter, then pass multiple flags (e.g. `--filter "foo=bar" --filter "bif=baz"`). -Multiple filter flags are combined as an `OR` filter. - -The following command shows both the `web` and `db` services: - -```bash -$ docker stack services --filter name=myapp_web --filter name=myapp_db myapp - -ID NAME REPLICAS IMAGE COMMAND -7be5ei6sqeye myapp_web 1/1 nginx@sha256:23f809e7fd5952e7d5be065b4d3643fbbceccd349d537b62a123ef2201bc886f -dn7m7nhhfb9y myapp_db 1/1 mysql@sha256:a9a5b559f8821fe73d58c3606c812d1c044868d42c63817fa5125fd9d8b7b539 -``` - -The currently supported filters are: - -* id / ID (`--filter id=7be5ei6sqeye`, or `--filter ID=7be5ei6sqeye`) -* name (`--filter name=myapp_web`) -* label (`--filter label=key=value`) - -## Related information - -* [stack config](stack_config.md) -* [stack deploy](stack_deploy.md) -* [stack rm](stack_rm.md) -* [stack tasks](stack_tasks.md) diff --git a/engine/reference/commandline/stack_tasks.md b/engine/reference/commandline/stack_tasks.md deleted file mode 100644 index b0db9b8da1..0000000000 --- a/engine/reference/commandline/stack_tasks.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -redirect_from: - - /reference/commandline/stack_tasks/ -advisory: experimental -description: The stack tasks command description and usage -keywords: -- stack, tasks -title: docker stack tasks (experimental) ---- - -```markdown -Usage: docker stack tasks [OPTIONS] STACK - -List the tasks in the stack - -Options: - -a, --all Display all tasks - -f, --filter value Filter output based on conditions provided - --help Print usage - --no-resolve Do not map IDs to Names -``` - -Lists the tasks that are running as part of the specified stack. This -command has to be run targeting a manager node. - -## Filtering - -The filtering flag (`-f` or `--filter`) format is a `key=value` pair. If there -is more than one filter, then pass multiple flags (e.g. `--filter "foo=bar" --filter "bif=baz"`). -Multiple filter flags are combined as an `OR` filter. For example, -`-f name=redis.1 -f name=redis.7` returns both `redis.1` and `redis.7` tasks. - -The currently supported filters are: - -* [id](stack_tasks.md#id) -* [name](stack_tasks.md#name) -* [desired-state](stack_tasks.md#desired-state) - -## Related information - -* [stack config](stack_config.md) -* [stack deploy](stack_deploy.md) -* [stack rm](stack_rm.md) -* [stack services](stack_services.md) diff --git a/engine/reference/commandline/start.md b/engine/reference/commandline/start.md deleted file mode 100644 index 059867bbd7..0000000000 --- a/engine/reference/commandline/start.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -redirect_from: - - /reference/commandline/start/ -description: The start command description and usage -keywords: -- Start, container, stopped -title: docker start ---- - -```markdown -Usage: docker start [OPTIONS] CONTAINER [CONTAINER...] - -Start one or more stopped containers - -Options: - -a, --attach Attach STDOUT/STDERR and forward signals - --detach-keys string Override the key sequence for detaching a container - --help Print usage - -i, --interactive Attach container's STDIN -``` diff --git a/engine/reference/commandline/stats.md b/engine/reference/commandline/stats.md deleted file mode 100644 index 8cbcbfd3d6..0000000000 --- a/engine/reference/commandline/stats.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -redirect_from: - - /reference/commandline/stats/ -description: The stats command description and usage -keywords: -- container, resource, statistics -title: docker stats ---- - -```markdown -Usage: docker stats [OPTIONS] [CONTAINER...] - -Display a live stream of container(s) resource usage statistics - -Options: - -a, --all Show all containers (default shows just running) - --help Print usage - --no-stream Disable streaming stats and only pull the first result -``` - -The `docker stats` command returns a live data stream for running containers. To limit data to one or more specific containers, specify a list of container names or ids separated by a space. You can specify a stopped container but stopped containers do not return any data. - -If you want more detailed information about a container's resource usage, use the `/containers/(id)/stats` API endpoint. - -## Examples - -Running `docker stats` on all running containers - - $ docker stats - CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O - 1285939c1fd3 0.07% 796 KiB / 64 MiB 1.21% 788 B / 648 B 3.568 MB / 512 KB - 9c76f7834ae2 0.07% 2.746 MiB / 64 MiB 4.29% 1.266 KB / 648 B 12.4 MB / 0 B - d1ea048f04e4 0.03% 4.583 MiB / 64 MiB 6.30% 2.854 KB / 648 B 27.7 MB / 0 B - -Running `docker stats` on multiple containers by name and id. - - $ docker stats fervent_panini 5acfcb1b4fd1 - CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O - 5acfcb1b4fd1 0.00% 115.2 MiB/1.045 GiB 11.03% 1.422 kB/648 B - fervent_panini 0.02% 11.08 MiB/1.045 GiB 1.06% 648 B/648 B diff --git a/engine/reference/commandline/stop.md b/engine/reference/commandline/stop.md deleted file mode 100644 index c353b751e4..0000000000 --- a/engine/reference/commandline/stop.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -redirect_from: - - /reference/commandline/stop/ -description: The stop command description and usage -keywords: -- stop, SIGKILL, SIGTERM -title: docker stop ---- - -```markdown -Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...] - -Stop one or more running containers - -Options: - --help Print usage - -t, --time int Seconds to wait for stop before killing it (default 10) -``` - -The main process inside the container will receive `SIGTERM`, and after a grace -period, `SIGKILL`. diff --git a/engine/reference/commandline/swarm_init.md b/engine/reference/commandline/swarm_init.md deleted file mode 100644 index c379db9fa4..0000000000 --- a/engine/reference/commandline/swarm_init.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -redirect_from: - - /reference/commandline/swarm_init/ -description: The swarm init command description and usage -keywords: -- swarm, init -title: docker swarm init ---- - -**Warning:** this command is part of the Swarm management feature introduced in Docker 1.12, and might be subject to non backward-compatible changes. - -```markdown -Usage: docker swarm init [OPTIONS] - -Initialize a swarm - -Options: - --advertise-addr value Advertised address (format: [:port]) - --cert-expiry duration Validity period for node certificates (default 2160h0m0s) - --dispatcher-heartbeat duration Dispatcher heartbeat period (default 5s) - --external-ca value Specifications of one or more certificate signing endpoints - --force-new-cluster Force create a new cluster from current state. - --help Print usage - --listen-addr value Listen address (format: [:port]) - --task-history-limit int Task history retention limit (default 5) -``` - -Initialize a swarm. The docker engine targeted by this command becomes a manager -in the newly created single-node swarm. - - -```bash -$ docker swarm init --advertise-addr 192.168.99.121 -Swarm initialized: current node (bvz81updecsj6wjz393c09vti) is now a manager. - -To add a worker to this swarm, run the following command: - - docker swarm join \ - --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx \ - 172.17.0.2:2377 - -To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. -``` - -`docker swarm init` generates two random tokens, a worker token and a manager token. When you join -a new node to the swarm, the node joins as a worker or manager node based upon the token you pass -to [swarm join](swarm_join.md). - -After you create the swarm, you can display or rotate the token using -[swarm join-token](swarm_join_token.md). - -### `--cert-expiry` - -This flag sets the validity period for node certificates. - -### `--dispatcher-heartbeat` - -This flags sets the frequency with which nodes are told to use as a -period to report their health. - -### `--external-ca value` - -This flag sets up the swarm to use an external CA to issue node certificates. The value takes -the form `protocol=X,url=Y`. The value for `protocol` specifies what protocol should be used -to send signing requests to the external CA. Currently, the only supported value is `cfssl`. -The URL specifies the endpoint where signing requests should be submitted. - -### `--force-new-cluster` - -This flag forces an existing node that was part of a quorum that was lost to restart as a single node Manager without losing its data. - -### `--listen-addr value` - -The node listens for inbound swarm manager traffic on this address. The default is to listen on -0.0.0.0:2377. It is also possible to specify a network interface to listen on that interface's -address; for example `--listen-addr eth0:2377`. - -Specifying a port is optional. If the value is a bare IP address or interface -name, the default port 2377 will be used. - -### `--advertise-addr value` - -This flag specifies the address that will be advertised to other members of the -swarm for API access and overlay networking. If unspecified, Docker will check -if the system has a single IP address, and use that IP address with with the -listening port (see `--listen-addr`). If the system has multiple IP addresses, -`--advertise-addr` must be specified so that the correct address is chosen for -inter-manager communication and overlay networking. - -It is also possible to specify a network interface to advertise that interface's address; -for example `--advertise-addr eth0:2377`. - -Specifying a port is optional. If the value is a bare IP address or interface -name, the default port 2377 will be used. - -### `--task-history-limit` - -This flag sets up task history retention limit. - -## Related information - -* [swarm join](swarm_join.md) -* [swarm leave](swarm_leave.md) -* [swarm update](swarm_update.md) -* [swarm join-token](swarm_join_token.md) -* [node rm](node_rm.md) diff --git a/engine/reference/commandline/swarm_join.md b/engine/reference/commandline/swarm_join.md deleted file mode 100644 index 458a0ce118..0000000000 --- a/engine/reference/commandline/swarm_join.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -redirect_from: - - /reference/commandline/swarm_join/ -description: The swarm join command description and usage -keywords: -- swarm, join -title: docker swarm join ---- - -**Warning:** this command is part of the Swarm management feature introduced in Docker 1.12, and might be subject to non backward-compatible changes. - -```markdown -Usage: docker swarm join [OPTIONS] HOST:PORT - -Join a swarm as a node and/or manager - -Options: - --advertise-addr value Advertised address (format: [:port]) - --help Print usage - --listen-addr value Listen address (format: [:port) - --token string Token for entry into the swarm -``` - -Join a node to a swarm. The node joins as a manager node or worker node based upon the token you -pass with the `--token` flag. If you pass a manager token, the node joins as a manager. If you -pass a worker token, the node joins as a worker. - -### Join a node to swarm as a manager - -The example below demonstrates joining a manager node using a manager token. - -```bash -$ docker swarm join --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 192.168.99.121:2377 -This node joined a swarm as a manager. -$ docker node ls -ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS -dkp8vy1dq1kxleu9g4u78tlag * manager2 Ready Active Reachable -dvfxp4zseq4s0rih1selh0d20 manager1 Ready Active Leader -``` - -A cluster should only have 3-7 managers at most, because a majority of managers must be available -for the cluster to function. Nodes that aren't meant to participate in this management quorum -should join as workers instead. Managers should be stable hosts that have static IP addresses. - -### Join a node to swarm as a worker - -The example below demonstrates joining a worker node using a worker token. - -```bash -$ docker swarm join --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx 192.168.99.121:2377 -This node joined a swarm as a worker. -$ docker node ls -ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS -7ln70fl22uw2dvjn2ft53m3q5 worker2 Ready Active -dkp8vy1dq1kxleu9g4u78tlag worker1 Ready Active Reachable -dvfxp4zseq4s0rih1selh0d20 * manager1 Ready Active Leader -``` - -### `--listen-addr value` - -If the node is a manager, it will listen for inbound swarm manager traffic on this -address. The default is to listen on 0.0.0.0:2377. It is also possible to specify a -network interface to listen on that interface's address; for example `--listen-addr eth0:2377`. - -Specifying a port is optional. If the value is a bare IP address, or interface -name, the default port 2377 will be used. - -This flag is generally not necessary when joining an existing swarm. - -### `--advertise-addr value` - -This flag specifies the address that will be advertised to other members of the -swarm for API access. If unspecified, Docker will check if the system has a -single IP address, and use that IP address with with the listening port (see -`--listen-addr`). If the system has multiple IP addresses, `--advertise-addr` -must be specified so that the correct address is chosen for inter-manager -communication and overlay networking. - -It is also possible to specify a network interface to advertise that interface's address; -for example `--advertise-addr eth0:2377`. - -Specifying a port is optional. If the value is a bare IP address, or interface -name, the default port 2377 will be used. - -This flag is generally not necessary when joining an existing swarm. - -### `--token string` - -Secret value required for nodes to join the swarm - - -## Related information - -* [swarm init](swarm_init.md) -* [swarm leave](swarm_leave.md) -* [swarm update](swarm_update.md) diff --git a/engine/reference/commandline/swarm_join_token.md b/engine/reference/commandline/swarm_join_token.md deleted file mode 100644 index 8666f4e6ff..0000000000 --- a/engine/reference/commandline/swarm_join_token.md +++ /dev/null @@ -1,97 +0,0 @@ ---- -redirect_from: - - /reference/commandline/swarm_join_token/ -description: The swarm join-token command description and usage -keywords: -- swarm, join-token -title: docker swarm join-token ---- - -```markdown -Usage: docker swarm join-token [--rotate] (worker|manager) - -Manage join tokens - -Options: - --help Print usage - -q, --quiet Only display token - --rotate Rotate join token -``` - -Join tokens are secrets that allow a node to join the swarm. There are two -different join tokens available, one for the worker role and one for the manager -role. You pass the token using the `--token` flag when you run -[swarm join](swarm_join.md). Nodes use the join token only when they join the -swarm. - -You can view or rotate the join tokens using `swarm join-token`. - -As a convenience, you can pass `worker` or `manager` as an argument to -`join-token` to print the full `docker swarm join` command to join a new node to -the swarm: - -```bash -$ docker swarm join-token worker -To add a worker to this swarm, run the following command: - - docker swarm join \ - --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx \ - 172.17.0.2:2377 - -$ docker swarm join-token manager -To add a manager to this swarm, run the following command: - - docker swarm join \ - --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 \ - 172.17.0.2:2377 -``` - -Use the `--rotate` flag to generate a new join token for the specified role: - -```bash -$ docker swarm join-token --rotate worker -Succesfully rotated worker join token. - -To add a worker to this swarm, run the following command: - - docker swarm join \ - --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-b30ljddcqhef9b9v4rs7mel7t \ - 172.17.0.2:2377 -``` - -After using `--rotate`, only the new token will be valid for joining with the specified role. - -The `-q` (or `--quiet`) flag only prints the token: - -```bash -$ docker swarm join-token -q worker - -SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-b30ljddcqhef9b9v4rs7mel7t -``` - -### `--rotate` - -Because tokens allow new nodes to join the swarm, you should keep them secret. -Be particularly careful with manager tokens since they allow new manager nodes -to join the swarm. A rogue manager has the potential to disrupt the operation of -your swarm. - -Rotate your swarm's join token if a token gets checked-in to version control, -stolen, or a node is compromised. You may also want to periodically rotate the -token to ensure any unknown token leaks do not allow a rogue node to join -the swarm. - -To rotate the join token and print the newly generated token, run -`docker swarm join-token --rotate` and pass the role: `manager` or `worker`. - -Rotating a join-token means that no new nodes will be able to join the swarm -using the old token. Rotation does not affect existing nodes in the swarm -because the join token is only used for authorizing new nodes joining the swarm. - -### `--quiet` - -Only print the token. Do not print a complete command for joining. - -## Related information - -* [swarm join](swarm_join.md) diff --git a/engine/reference/commandline/swarm_leave.md b/engine/reference/commandline/swarm_leave.md deleted file mode 100644 index 48ca4c2b16..0000000000 --- a/engine/reference/commandline/swarm_leave.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -redirect_from: - - /reference/commandline/swarm_leave/ -description: The swarm leave command description and usage -keywords: -- swarm, leave -title: docker swarm leave ---- - -**Warning:** this command is part of the Swarm management feature introduced in Docker 1.12, and might be subject to non backward-compatible changes. - -```markdown -Usage: docker swarm leave [OPTIONS] - -Leave the swarm (workers only). - -Options: - --force Force this node to leave the swarm, ignoring warnings - --help Print usage -``` - -When you run this command on a worker, that worker leaves the swarm. - -You can use the `--force` option to on a manager to remove it from the swarm. -However, this does not reconfigure the swarm to ensure that there are enough -managers to maintain a quorum in the swarm. The safe way to remove a manager -from a swarm is to demote it to a worker and then direct it to leave the quorum -without using `--force`. Only use `--force` in situations where the swarm will -no longer be used after the manager leaves, such as in a single-node swarm. - -Consider the following swarm, as seen from the manager: - -```bash -$ docker node ls -ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS -7ln70fl22uw2dvjn2ft53m3q5 worker2 Ready Active -dkp8vy1dq1kxleu9g4u78tlag worker1 Ready Active -dvfxp4zseq4s0rih1selh0d20 * manager1 Ready Active Leader -``` - -To remove `worker2`, issue the following command from `worker2` itself: - -```bash -$ docker swarm leave -Node left the default swarm. -``` - -To remove an inactive node, use the [`node rm`](node_rm.md) command instead. - -## Related information - -* [node rm](node_rm.md) -* [swarm init](swarm_init.md) -* [swarm join](swarm_join.md) -* [swarm update](swarm_update.md) diff --git a/engine/reference/commandline/swarm_update.md b/engine/reference/commandline/swarm_update.md deleted file mode 100644 index 1034fab05d..0000000000 --- a/engine/reference/commandline/swarm_update.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -redirect_from: - - /reference/commandline/swarm_update/ -description: The swarm update command description and usage -keywords: -- swarm, update -title: docker swarm update ---- - -**Warning:** this command is part of the Swarm management feature introduced in Docker 1.12, and might be subject to non backward-compatible changes. - -```markdown -Usage: docker swarm update [OPTIONS] - -Update the swarm - -Options: - --cert-expiry duration Validity period for node certificates (default 2160h0m0s) - --dispatcher-heartbeat duration Dispatcher heartbeat period (default 5s) - --external-ca value Specifications of one or more certificate signing endpoints - --help Print usage - --task-history-limit int Task history retention limit (default 5) -``` - -Updates a swarm with new parameter values. This command must target a manager node. - - -```bash -$ docker swarm update --cert-expiry 720h -``` - -## Related information - -* [swarm init](swarm_init.md) -* [swarm join](swarm_join.md) -* [swarm leave](swarm_leave.md) diff --git a/engine/reference/commandline/tag.md b/engine/reference/commandline/tag.md deleted file mode 100644 index e416f625a4..0000000000 --- a/engine/reference/commandline/tag.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -redirect_from: - - /reference/commandline/tag/ -description: The tag command description and usage -keywords: -- tag, name, image -title: docker tag ---- - -```markdown -Usage: docker tag IMAGE[:TAG] IMAGE[:TAG] - -Tag an image into a repository - -Options: - --help Print usage -``` - -An image name is made up of slash-separated name components, optionally prefixed -by a registry hostname. The hostname must comply with standard DNS rules, but -may not contain underscores. If a hostname is present, it may optionally be -followed by a port number in the format `:8080`. If not present, the command -uses Docker's public registry located at `registry-1.docker.io` by default. Name -components may contain lowercase characters, digits and separators. A separator -is defined as a period, one or two underscores, or one or more dashes. A name -component may not start or end with a separator. - -A tag name may contain lowercase and uppercase characters, digits, underscores, -periods and dashes. A tag name may not start with a period or a dash and may -contain a maximum of 128 characters. - -You can group your images together using names and tags, and then upload them -to [*Share Images via Repositories*](../../tutorials/dockerrepos.md#contributing-to-docker-hub). - -# Examples - -## Tagging an image referenced by ID - -To tag a local image with ID "0e5574283393" into the "fedora" repository with -"version1.0": - - docker tag 0e5574283393 fedora/httpd:version1.0 - -## Tagging an image referenced by Name - -To tag a local image with name "httpd" into the "fedora" repository with -"version1.0": - - docker tag httpd fedora/httpd:version1.0 - -Note that since the tag name is not specified, the alias is created for an -existing local version `httpd:latest`. - -## Tagging an image referenced by Name and Tag - -To tag a local image with name "httpd" and tag "test" into the "fedora" -repository with "version1.0.test": - - docker tag httpd:test fedora/httpd:version1.0.test - -## Tagging an image for a private repository - -To push an image to a private registry and not the central Docker -registry you must tag it with the registry hostname and port (if needed). - - docker tag 0e5574283393 myregistryhost:5000/fedora/httpd:version1.0 diff --git a/engine/reference/commandline/top.md b/engine/reference/commandline/top.md deleted file mode 100644 index 302f8a4350..0000000000 --- a/engine/reference/commandline/top.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -redirect_from: - - /reference/commandline/top/ -description: The top command description and usage -keywords: -- container, running, processes -title: docker top ---- - -```markdown -Usage: docker top CONTAINER [ps OPTIONS] - -Display the running processes of a container - -Options: - --help Print usage -``` diff --git a/engine/reference/commandline/unpause.md b/engine/reference/commandline/unpause.md deleted file mode 100644 index 7cc2aefed0..0000000000 --- a/engine/reference/commandline/unpause.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -redirect_from: - - /reference/commandline/unpause/ -description: The unpause command description and usage -keywords: -- cgroups, suspend, container -title: docker unpause ---- - -```markdown -Usage: docker unpause CONTAINER [CONTAINER...] - -Unpause all processes within one or more containers - -Options: - --help Print usage -``` - -The `docker unpause` command uses the cgroups freezer to un-suspend all -processes in a container. - -See the -[cgroups freezer documentation](https://www.kernel.org/doc/Documentation/cgroup-v1/freezer-subsystem.txt) -for further details. diff --git a/engine/reference/commandline/update.md b/engine/reference/commandline/update.md deleted file mode 100644 index c49e3c230f..0000000000 --- a/engine/reference/commandline/update.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -redirect_from: - - /reference/commandline/update/ -description: The update command description and usage -keywords: -- resources, update, dynamically -title: docker update ---- - -```markdown -Usage: docker update [OPTIONS] CONTAINER [CONTAINER...] - -Update configuration of one or more containers - -Options: - --blkio-weight value Block IO (relative weight), between 10 and 1000 - --cpu-period int Limit CPU CFS (Completely Fair Scheduler) period - --cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota - -c, --cpu-shares int CPU shares (relative weight) - --cpuset-cpus string CPUs in which to allow execution (0-3, 0,1) - --cpuset-mems string MEMs in which to allow execution (0-3, 0,1) - --help Print usage - --kernel-memory string Kernel memory limit - -m, --memory string Memory limit - --memory-reservation string Memory soft limit - --memory-swap string Swap limit equal to memory plus swap: '-1' to enable unlimited swap - --restart string Restart policy to apply when a container exits -``` - -The `docker update` command dynamically updates container configuration. -You can use this command to prevent containers from consuming too many resources -from their Docker host. With a single command, you can place limits on -a single container or on many. To specify more than one container, provide -space-separated list of container names or IDs. - -With the exception of the `--kernel-memory` value, you can specify these -options on a running or a stopped container. You can only update -`--kernel-memory` on a stopped container. When you run `docker update` on -stopped container, the next time you restart it, the container uses those -values. - -Another configuration you can change with this command is restart policy, -new restart policy will take effect instantly after you run `docker update` -on a container. - -## Examples - -The following sections illustrate ways to use this command. - -### Update a container with cpu-shares=512 - -To limit a container's cpu-shares to 512, first identify the container -name or ID. You can use **docker ps** to find these values. You can also -use the ID returned from the **docker run** command. Then, do the following: - -```bash -$ docker update --cpu-shares 512 abebf7571666 -``` - -### Update a container with cpu-shares and memory - -To update multiple resource configurations for multiple containers: - -```bash -$ docker update --cpu-shares 512 -m 300M abebf7571666 hopeful_morse -``` - -### Update a container's restart policy - -To update restart policy for one or more containers: -```bash -$ docker update --restart=on-failure:3 abebf7571666 hopeful_morse -``` diff --git a/engine/reference/commandline/version.md b/engine/reference/commandline/version.md deleted file mode 100644 index ae24479cce..0000000000 --- a/engine/reference/commandline/version.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -redirect_from: - - /reference/commandline/version/ -description: The version command description and usage -keywords: -- version, architecture, api -title: docker version ---- - -```markdown -Usage: docker version [OPTIONS] - -Show the Docker version information - -Options: - -f, --format string Format the output using the given go template - --help Print usage -``` - -By default, this will render all version information in an easy to read -layout. If a format is specified, the given template will be executed instead. - -Go's [text/template](http://golang.org/pkg/text/template/) package -describes all the details of the format. - -## Examples - -**Default output:** - - $ docker version - Client: - Version: 1.8.0 - API version: 1.20 - Go version: go1.4.2 - Git commit: f5bae0a - Built: Tue Jun 23 17:56:00 UTC 2015 - OS/Arch: linux/amd64 - - Server: - Version: 1.8.0 - API version: 1.20 - Go version: go1.4.2 - Git commit: f5bae0a - Built: Tue Jun 23 17:56:00 UTC 2015 - OS/Arch: linux/amd64 - -**Get server version:** - - {% raw %} - $ docker version --format '{{.Server.Version}}' - 1.8.0 - {% endraw %} - -**Dump raw data:** - - {% raw %} - $ docker version --format '{{json .}}' - {"Client":{"Version":"1.8.0","ApiVersion":"1.20","GitCommit":"f5bae0a","GoVersion":"go1.4.2","Os":"linux","Arch":"amd64","BuildTime":"Tue Jun 23 17:56:00 UTC 2015"},"ServerOK":true,"Server":{"Version":"1.8.0","ApiVersion":"1.20","GitCommit":"f5bae0a","GoVersion":"go1.4.2","Os":"linux","Arch":"amd64","KernelVersion":"3.13.2-gentoo","BuildTime":"Tue Jun 23 17:56:00 UTC 2015"}} - {% endraw %} diff --git a/engine/reference/commandline/volume_create.md b/engine/reference/commandline/volume_create.md deleted file mode 100644 index 212f10aa62..0000000000 --- a/engine/reference/commandline/volume_create.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -redirect_from: - - /reference/commandline/volume_create/ -description: The volume create command description and usage -keywords: -- volume, create -title: docker volume create ---- - -```markdown -Usage: docker volume create [OPTIONS] - -Create a volume - -Options: - -d, --driver string Specify volume driver name (default "local") - --help Print usage - --label value Set metadata for a volume (default []) - --name string Specify volume name - -o, --opt value Set driver specific options (default map[]) -``` - -Creates a new volume that containers can consume and store data in. If a name is not specified, Docker generates a random name. You create a volume and then configure the container to use it, for example: - -```bash -$ docker volume create --name hello -hello - -$ docker run -d -v hello:/world busybox ls /world -``` - -The mount is created inside the container's `/world` directory. Docker does not support relative paths for mount points inside the container. - -Multiple containers can use the same volume in the same time period. This is useful if two containers need access to shared data. For example, if one container writes and the other reads the data. - -Volume names must be unique among drivers. This means you cannot use the same volume name with two different drivers. If you attempt this `docker` returns an error: - -``` -A volume named "hello" already exists with the "some-other" driver. Choose a different volume name. -``` - -If you specify a volume name already in use on the current driver, Docker assumes you want to re-use the existing volume and does not return an error. - -## Driver specific options - -Some volume drivers may take options to customize the volume creation. Use the `-o` or `--opt` flags to pass driver options: - -```bash -$ docker volume create --driver fake --opt tardis=blue --opt timey=wimey -``` - -These options are passed directly to the volume driver. Options for -different volume drivers may do different things (or nothing at all). - -The built-in `local` driver on Windows does not support any options. - -The built-in `local` driver on Linux accepts options similar to the linux `mount` command. You can provide multiple options by passing the `--opt` flag multiple times. Some `mount` options (such as the `o` option) can take a comma-separated list of options. Complete list of available mount options can be found [here](http://man7.org/linux/man-pages/man8/mount.8.html). - -For example, the following creates a `tmpfs` volume called `foo` with a size of 100 megabyte and `uid` of 1000. - -```bash -$ docker volume create --driver local --opt type=tmpfs --opt device=tmpfs --opt o=size=100m,uid=1000 --name foo -``` - -Another example that uses `btrfs`: - -```bash -$ docker volume create --driver local --opt type=btrfs --opt device=/dev/sda2 --name foo -``` - -Another example that uses `nfs` to mount the `/path/to/dir` in `rw` mode from `192.168.1.1`: - -```bash -$ docker volume create --driver local --opt type=nfs --opt o=addr=192.168.1.1,rw --opt device=:/path/to/dir --name foo -``` - - -## Related information - -* [volume inspect](volume_inspect.md) -* [volume ls](volume_ls.md) -* [volume rm](volume_rm.md) -* [Understand Data Volumes](../../tutorials/dockervolumes.md) diff --git a/engine/reference/commandline/volume_inspect.md b/engine/reference/commandline/volume_inspect.md deleted file mode 100644 index d8a4e98d14..0000000000 --- a/engine/reference/commandline/volume_inspect.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -redirect_from: - - /reference/commandline/volume_inspect/ -description: The volume inspect command description and usage -keywords: -- volume, inspect -title: docker volume inspect ---- - -```markdown -Usage: docker volume inspect [OPTIONS] VOLUME [VOLUME...] - -Display detailed information on one or more volumes - -Options: - -f, --format string Format the output using the given go template - --help Print usage -``` - -Returns information about a volume. By default, this command renders all results -in a JSON array. You can specify an alternate format to execute a -given template for each result. Go's -[text/template](http://golang.org/pkg/text/template/) package describes all the -details of the format. - -Example output: - - $ docker volume create - 85bffb0677236974f93955d8ecc4df55ef5070117b0e53333cc1b443777be24d - $ docker volume inspect 85bffb0677236974f93955d8ecc4df55ef5070117b0e53333cc1b443777be24d - [ - { - "Name": "85bffb0677236974f93955d8ecc4df55ef5070117b0e53333cc1b443777be24d", - "Driver": "local", - "Mountpoint": "/var/lib/docker/volumes/85bffb0677236974f93955d8ecc4df55ef5070117b0e53333cc1b443777be24d/_data", - "Status": null - } - ] - - {% raw %} - $ docker volume inspect --format '{{ .Mountpoint }}' 85bffb0677236974f93955d8ecc4df55ef5070117b0e53333cc1b443777be24d - /var/lib/docker/volumes/85bffb0677236974f93955d8ecc4df55ef5070117b0e53333cc1b443777be24d/_data - {% endraw %} - -## Related information - -* [volume create](volume_create.md) -* [volume ls](volume_ls.md) -* [volume rm](volume_rm.md) -* [Understand Data Volumes](../../tutorials/dockervolumes.md) diff --git a/engine/reference/commandline/volume_ls.md b/engine/reference/commandline/volume_ls.md deleted file mode 100644 index 985c243b92..0000000000 --- a/engine/reference/commandline/volume_ls.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -redirect_from: - - /reference/commandline/volume_ls/ -description: The volume ls command description and usage -keywords: -- volume, list -title: docker volume ls ---- - -```markdown -Usage: docker volume ls [OPTIONS] - -List volumes - -Aliases: - ls, list - -Options: - -f, --filter value Provide filter values (i.e. 'dangling=true') (default []) - - dangling= a volume if referenced or not - - driver= a volume's driver name - - name= a volume's name - --help Print usage - -q, --quiet Only display volume names -``` - -Lists all the volumes Docker knows about. You can filter using the `-f` or `--filter` flag. Refer to the [filtering](volume_ls.md#filtering) section for more information about available filter options. - -Example output: - - $ docker volume create --name rosemary - rosemary - $docker volume create --name tyler - tyler - $ docker volume ls - DRIVER VOLUME NAME - local rosemary - local tyler - -## Filtering - -The filtering flag (`-f` or `--filter`) format is of "key=value". If there is more -than one filter, then pass multiple flags (e.g., `--filter "foo=bar" --filter "bif=baz"`) - -The currently supported filters are: - -* dangling (boolean - true or false, 0 or 1) -* driver (a volume driver's name) -* name (a volume's name) - -### dangling - -The `dangling` filter matches on all volumes not referenced by any containers - - $ docker run -d -v tyler:/tmpwork busybox - f86a7dd02898067079c99ceacd810149060a70528eff3754d0b0f1a93bd0af18 - $ docker volume ls -f dangling=true - DRIVER VOLUME NAME - local rosemary - -### driver - -The `driver` filter matches on all or part of a volume's driver name. - -The following filter matches all volumes with a driver name containing the `local` string. - - $ docker volume ls -f driver=local - DRIVER VOLUME NAME - local rosemary - local tyler - -### name - -The `name` filter matches on all or part of a volume's name. - -The following filter matches all volumes with a name containing the `rose` string. - - $ docker volume ls -f name=rose - DRIVER VOLUME NAME - local rosemary - -## Related information - -* [volume create](volume_create.md) -* [volume inspect](volume_inspect.md) -* [volume rm](volume_rm.md) -* [Understand Data Volumes](../../tutorials/dockervolumes.md) diff --git a/engine/reference/commandline/volume_rm.md b/engine/reference/commandline/volume_rm.md deleted file mode 100644 index 8e131a04ec..0000000000 --- a/engine/reference/commandline/volume_rm.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -redirect_from: - - /reference/commandline/volume_rm/ -description: the volume rm command description and usage -keywords: -- volume, rm -title: docker volume rm ---- - -```markdown -Usage: docker volume rm VOLUME [VOLUME...] - -Remove one or more volumes - -Aliases: - rm, remove - -Options: - --help Print usage -``` - -Remove one or more volumes. You cannot remove a volume that is in use by a container. - - $ docker volume rm hello - hello - -## Related information - -* [volume create](volume_create.md) -* [volume inspect](volume_inspect.md) -* [volume ls](volume_ls.md) -* [Understand Data Volumes](../../tutorials/dockervolumes.md) diff --git a/engine/reference/commandline/wait.md b/engine/reference/commandline/wait.md deleted file mode 100644 index 7adb1f2a2f..0000000000 --- a/engine/reference/commandline/wait.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -redirect_from: - - /reference/commandline/wait/ -description: The wait command description and usage -keywords: -- container, stop, wait -title: docker wait ---- - -```markdown -Usage: docker wait CONTAINER [CONTAINER...] - -Block until a container stops, then print its exit code - -Options: - --help Print usage -``` diff --git a/engine/reference/glossary.md b/engine/reference/glossary.md deleted file mode 100644 index 54481c2ea0..0000000000 --- a/engine/reference/glossary.md +++ /dev/null @@ -1,278 +0,0 @@ ---- -redirect_from: - - /reference/glossary/ -description: Glossary of terms used around Docker -keywords: -- glossary, docker, terms, definitions -title: Docker glossary ---- - -A list of terms used around the Docker project. - -## aufs - -aufs (advanced multi layered unification filesystem) is a Linux [filesystem](glossary.md#filesystem) that -Docker supports as a storage backend. It implements the -[union mount](http://en.wikipedia.org/wiki/Union_mount) for Linux file systems. - -## base image - -An image that has no parent is a **base image**. - -## boot2docker - -[boot2docker](http://boot2docker.io/) is a lightweight Linux distribution made -specifically to run Docker containers. The boot2docker management tool for Mac and Windows was deprecated and replaced by [`docker-machine`](glossary.md#machine) which you can install with the Docker Toolbox. - -## btrfs - -btrfs (B-tree file system) is a Linux [filesystem](glossary.md#filesystem) that Docker -supports as a storage backend. It is a [copy-on-write](http://en.wikipedia.org/wiki/Copy-on-write) -filesystem. - -## build - -build is the process of building Docker images using a [Dockerfile](glossary.md#dockerfile). -The build uses a Dockerfile and a "context". The context is the set of files in the -directory in which the image is built. - -## cgroups - -cgroups is a Linux kernel feature that limits, accounts for, and isolates -the resource usage (CPU, memory, disk I/O, network, etc.) of a collection -of processes. Docker relies on cgroups to control and isolate resource limits. - -*Also known as : control groups* - -## Compose - -[Compose](https://github.com/docker/compose) is a tool for defining and -running complex applications with Docker. With compose, you define a -multi-container application in a single file, then spin your -application up in a single command which does everything that needs to -be done to get it running. - -*Also known as : docker-compose, fig* - -## container - -A container is a runtime instance of a [docker image](glossary.md#image). - -A Docker container consists of - -- A Docker image -- Execution environment -- A standard set of instructions - -The concept is borrowed from Shipping Containers, which define a standard to ship -goods globally. Docker defines a standard to ship software. - -## data volume - -A data volume is a specially-designated directory within one or more containers -that bypasses the Union File System. Data volumes are designed to persist data, -independent of the container's life cycle. Docker therefore never automatically -delete volumes when you remove a container, nor will it "garbage collect" -volumes that are no longer referenced by a container. - - -## Docker - -The term Docker can refer to - -- The Docker project as a whole, which is a platform for developers and sysadmins to -develop, ship, and run applications -- The docker daemon process running on the host which manages images and containers - - -## Docker Hub - -The [Docker Hub](https://hub.docker.com/) is a centralized resource for working with -Docker and its components. It provides the following services: - -- Docker image hosting -- User authentication -- Automated image builds and work-flow tools such as build triggers and web hooks -- Integration with GitHub and Bitbucket - - -## Dockerfile - -A Dockerfile is a text document that contains all the commands you would -normally execute manually in order to build a Docker image. Docker can -build images automatically by reading the instructions from a Dockerfile. - -## filesystem - -A file system is the method an operating system uses to name files -and assign them locations for efficient storage and retrieval. - -Examples : - -- Linux : ext4, aufs, btrfs, zfs -- Windows : NTFS -- macOS : HFS+ - -## image - -Docker images are the basis of [containers](glossary.md#container). An Image is an -ordered collection of root filesystem changes and the corresponding -execution parameters for use within a container runtime. An image typically -contains a union of layered filesystems stacked on top of each other. An image -does not have state and it never changes. - -## libcontainer - -libcontainer provides a native Go implementation for creating containers with -namespaces, cgroups, capabilities, and filesystem access controls. It allows -you to manage the lifecycle of the container performing additional operations -after the container is created. - -## libnetwork - -libnetwork provides a native Go implementation for creating and managing container -network namespaces and other network resources. It manage the networking lifecycle -of the container performing additional operations after the container is created. - -## link - -links provide a legacy interface to connect Docker containers running on the -same host to each other without exposing the hosts' network ports. Use the -Docker networks feature instead. - -## Machine - -[Machine](https://github.com/docker/machine) is a Docker tool which -makes it really easy to create Docker hosts on your computer, on -cloud providers and inside your own data center. It creates servers, -installs Docker on them, then configures the Docker client to talk to them. - -*Also known as : docker-machine* - -## node - -A [node](../swarm/how-swarm-mode-works/nodes.md) is a physical or virtual -machine running an instance of the Docker Engine in swarm mode. - -**Manager nodes** perform swarm management and orchestration duties. By default -manager nodes are also worker nodes. - -**Worker nodes** execute tasks. - -## overlay network driver - -Overlay network driver provides out of the box multi-host network connectivity -for docker containers in a cluster. - -## overlay storage driver - -OverlayFS is a [filesystem](glossary.md#filesystem) service for Linux which implements a -[union mount](http://en.wikipedia.org/wiki/Union_mount) for other file systems. -It is supported by the Docker daemon as a storage driver. - -## registry - -A Registry is a hosted service containing [repositories](glossary.md#repository) of [images](glossary.md#image) -which responds to the Registry API. - -The default registry can be accessed using a browser at [Docker Hub](glossary.md#docker-hub) -or using the `docker search` command. - -## repository - -A repository is a set of Docker images. A repository can be shared by pushing it -to a [registry](glossary.md#registry) server. The different images in the repository can be -labeled using [tags](glossary.md#tag). - -Here is an example of the shared [nginx repository](https://hub.docker.com/_/nginx/) -and its [tags](https://hub.docker.com/r/library/nginx/tags/) - - -## service - -A [service](../swarm/how-swarm-mode-works/services.md) is the definition of how -you want to run your application containers in a swarm. At the most basic level -a service defines which container image to run in the swarm and which commands -to run in the container. For orchestration purposes, the service defines the -"desired state", meaning how many containers to run as tasks and constraints for -deploying the containers. - -Frequently a service is a microservice within the context of some larger -application. Examples of services might include an HTTP server, a database, or -any other type of executable program that you wish to run in a distributed -environment. - -## service discovery - -Swarm mode [service discovery](../swarm/networking.md) is a DNS component -internal to the swarm that automatically assigns each service on an overlay -network in the swarm a VIP and DNS entry. Containers on the network share DNS -mappings for the service via gossip so any container on the network can access -the service via its service name. - -You don’t need to expose service-specific ports to make the service available to -other services on the same overlay network. The swarm’s internal load balancer -automatically distributes requests to the service VIP among the active tasks. - -## swarm - -A [swarm](../swarm/index.md) is a cluster of one or more Docker Engines running in [swarm mode](glossary.md#swarm-mode). - -## Swarm - -Do not confuse [Docker Swarm](https://github.com/docker/swarm) with the [swarm mode](glossary.md#swarm-mode) features in Docker Engine. - -Docker Swarm is the name of a standalone native clustering tool for Docker. -Docker Swarm pools together several Docker hosts and exposes them as a single -virtual Docker host. It serves the standard Docker API, so any tool that already -works with Docker can now transparently scale up to multiple hosts. - -*Also known as : docker-swarm* - -## swarm mode - -[Swarm mode](../swarm/index.md) refers to cluster management and orchestration -features embedded in Docker Engine. When you initialize a new swarm (cluster) or -join nodes to a swarm, the Docker Engine runs in swarm mode. - -## tag - -A tag is a label applied to a Docker image in a [repository](glossary.md#repository). -tags are how various images in a repository are distinguished from each other. - -*Note : This label is not related to the key=value labels set for docker daemon* - -## task - -A [task](../swarm/how-swarm-mode-works/services.md#tasks-and-scheduling) is the -atomic unit of scheduling within a swarm. A task carries a Docker container and -the commands to run inside the container. Manager nodes assign tasks to worker -nodes according to the number of replicas set in the service scale. - -The diagram below illustrates the relationship of services to tasks and -containers. - -![services diagram](../swarm/images/services-diagram.png) - -## Toolbox - -Docker Toolbox is the installer for Mac and Windows users. - - -## Union file system - -Union file systems, or UnionFS, are file systems that operate by creating layers, making them -very lightweight and fast. Docker uses union file systems to provide the building -blocks for containers. - - -## virtual machine - -A virtual machine is a program that emulates a complete computer and imitates dedicated hardware. -It shares physical hardware resources with other users but isolates the operating system. The -end user has the same experience on a Virtual Machine as they would have on dedicated hardware. - -Compared to containers, a virtual machine is heavier to run, provides more isolation, -gets its own set of resources and does minimal sharing. - -*Also known as : VM* diff --git a/engine/reference/index.md b/engine/reference/index.md deleted file mode 100644 index b42e631e0e..0000000000 --- a/engine/reference/index.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -redirect_from: - - /reference/ -description: Docker Engine reference -keywords: -- Engine -title: Engine reference ---- - -* [Dockerfile reference](builder.md) -* [Docker run reference](run.md) -* [Command line reference](commandline/index.md) -* [API Reference](api/index.md) diff --git a/engine/reference/run.md b/engine/reference/run.md deleted file mode 100644 index 4a0d2db4c6..0000000000 --- a/engine/reference/run.md +++ /dev/null @@ -1,1533 +0,0 @@ ---- -redirect_from: - - /reference/run/ -description: Configure containers at runtime -keywords: -- docker, run, configure, runtime -title: Docker run reference ---- - -Docker runs processes in isolated containers. A container is a process -which runs on a host. The host may be local or remote. When an operator -executes `docker run`, the container process that runs is isolated in -that it has its own file system, its own networking, and its own -isolated process tree separate from the host. - -This page details how to use the `docker run` command to define the -container's resources at runtime. - -## General form - -The basic `docker run` command takes this form: - - $ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] - -The `docker run` command must specify an [*IMAGE*](glossary.md#image) -to derive the container from. An image developer can define image -defaults related to: - - * detached or foreground running - * container identification - * network settings - * runtime constraints on CPU and memory - -With the `docker run [OPTIONS]` an operator can add to or override the -image defaults set by a developer. And, additionally, operators can -override nearly all the defaults set by the Docker runtime itself. The -operator's ability to override image and Docker runtime defaults is why -[*run*](commandline/run.md) has more options than any -other `docker` command. - -To learn how to interpret the types of `[OPTIONS]`, see [*Option -types*](commandline/cli.md#option-types). - -> **Note**: Depending on your Docker system configuration, you may be -> required to preface the `docker run` command with `sudo`. To avoid -> having to use `sudo` with the `docker` command, your system -> administrator can create a Unix group called `docker` and add users to -> it. For more information about this configuration, refer to the Docker -> installation documentation for your operating system. - - -## Operator exclusive options - -Only the operator (the person executing `docker run`) can set the -following options. - - - [Detached vs foreground](run.md#detached-vs-foreground) - - [Detached (-d)](run.md#detached-d) - - [Foreground](run.md#foreground) - - [Container identification](run.md#container-identification) - - [Name (--name)](run.md#name-name) - - [PID equivalent](run.md#pid-equivalent) - - [IPC settings (--ipc)](run.md#ipc-settings-ipc) - - [Network settings](run.md#network-settings) - - [Restart policies (--restart)](run.md#restart-policies-restart) - - [Clean up (--rm)](run.md#clean-up-rm) - - [Runtime constraints on resources](run.md#runtime-constraints-on-resources) - - [Runtime privilege and Linux capabilities](run.md#runtime-privilege-and-linux-capabilities) - -## Detached vs foreground - -When starting a Docker container, you must first decide if you want to -run the container in the background in a "detached" mode or in the -default foreground mode: - - -d=false: Detached mode: Run container in the background, print new container id - -### Detached (-d) - -To start a container in detached mode, you use `-d=true` or just `-d` option. By -design, containers started in detached mode exit when the root process used to -run the container exits. A container in detached mode cannot be automatically -removed when it stops, this means you cannot use the `--rm` option with `-d` option. - -Do not pass a `service x start` command to a detached container. For example, this -command attempts to start the `nginx` service. - - $ docker run -d -p 80:80 my_image service nginx start - -This succeeds in starting the `nginx` service inside the container. However, it -fails the detached container paradigm in that, the root process (`service nginx -start`) returns and the detached container stops as designed. As a result, the -`nginx` service is started but could not be used. Instead, to start a process -such as the `nginx` web server do the following: - - $ docker run -d -p 80:80 my_image nginx -g 'daemon off;' - -To do input/output with a detached container use network connections or shared -volumes. These are required because the container is no longer listening to the -command line where `docker run` was run. - -To reattach to a detached container, use `docker` -[*attach*](commandline/attach.md) command. - -### Foreground - -In foreground mode (the default when `-d` is not specified), `docker -run` can start the process in the container and attach the console to -the process's standard input, output, and standard error. It can even -pretend to be a TTY (this is what most command line executables expect) -and pass along signals. All of that is configurable: - - -a=[] : Attach to `STDIN`, `STDOUT` and/or `STDERR` - -t : Allocate a pseudo-tty - --sig-proxy=true: Proxy all received signals to the process (non-TTY mode only) - -i : Keep STDIN open even if not attached - -If you do not specify `-a` then Docker will [attach all standard -streams]( https://github.com/docker/docker/blob/75a7f4d90cde0295bcfb7213004abce8d4779b75/commands.go#L1797). -You can specify to which of the three standard streams (`STDIN`, `STDOUT`, -`STDERR`) you'd like to connect instead, as in: - - $ docker run -a stdin -a stdout -i -t ubuntu /bin/bash - -For interactive processes (like a shell), you must use `-i -t` together in -order to allocate a tty for the container process. `-i -t` is often written `-it` -as you'll see in later examples. Specifying `-t` is forbidden when the client -standard output is redirected or piped, such as in: - - $ echo test | docker run -i busybox cat - ->**Note**: A process running as PID 1 inside a container is treated ->specially by Linux: it ignores any signal with the default action. ->So, the process will not terminate on `SIGINT` or `SIGTERM` unless it is ->coded to do so. - -## Container identification - -### Name (--name) - -The operator can identify a container in three ways: - -| Identifier type | Example value | -| --------------------- | ------------------------------------------------------------------ | -| UUID long identifier | "f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778" | -| UUID short identifier | "f78375b1c487" | -| Name | "evil_ptolemy" | - -The UUID identifiers come from the Docker daemon. If you do not assign a -container name with the `--name` option, then the daemon generates a random -string name for you. Defining a `name` can be a handy way to add meaning to a -container. If you specify a `name`, you can use it when referencing the -container within a Docker network. This works for both background and foreground -Docker containers. - -> **Note**: Containers on the default bridge network must be linked to -> communicate by name. - -### PID equivalent - -Finally, to help with automation, you can have Docker write the -container ID out to a file of your choosing. This is similar to how some -programs might write out their process ID to a file (you've seen them as -PID files): - - --cidfile="": Write the container ID to the file - -### Image[:tag] - -While not strictly a means of identifying a container, you can specify a version of an -image you'd like to run the container with by adding `image[:tag]` to the command. For -example, `docker run ubuntu:14.04`. - -### Image[@digest] - -Images using the v2 or later image format have a content-addressable identifier -called a digest. As long as the input used to generate the image is unchanged, -the digest value is predictable and referenceable. - -The following example runs a container from the `alpine` image with the -`sha256:9cacb71397b640eca97488cf08582ae4e4068513101088e9f96c9814bfda95e0` digest: - - $ docker run alpine@sha256:9cacb71397b640eca97488cf08582ae4e4068513101088e9f96c9814bfda95e0 date - -## PID settings (--pid) - - --pid="" : Set the PID (Process) Namespace mode for the container, - 'container:': joins another container's PID namespace - 'host': use the host's PID namespace inside the container - -By default, all containers have the PID namespace enabled. - -PID namespace provides separation of processes. The PID Namespace removes the -view of the system processes, and allows process ids to be reused including -pid 1. - -In certain cases you want your container to share the host's process namespace, -basically allowing processes within the container to see all of the processes -on the system. For example, you could build a container with debugging tools -like `strace` or `gdb`, but want to use these tools when debugging processes -within the container. - -### Example: run htop inside a container - -Create this Dockerfile: - -``` -FROM alpine:latest -RUN apk add --update htop && rm -rf /var/cache/apk/* -CMD ["htop"] -``` - -Build the Dockerfile and tag the image as `myhtop`: - -```bash -$ docker build -t myhtop . -``` - -Use the following command to run `htop` inside a container: - -``` -$ docker run -it --rm --pid=host myhtop -``` - -Joining another container's pid namespace can be used for debugging that container. - -### Example - -Start a container running a redis server: - -```bash -$ docker run --name my-redis -d redis -``` - -Debug the redis container by running another container that has strace in it: - -```bash -$ docker run --it --pid=container:my-redis bash -$ strace -p 1 -``` - -## UTS settings (--uts) - - --uts="" : Set the UTS namespace mode for the container, - 'host': use the host's UTS namespace inside the container - -The UTS namespace is for setting the hostname and the domain that is visible -to running processes in that namespace. By default, all containers, including -those with `--network=host`, have their own UTS namespace. The `host` setting will -result in the container using the same UTS namespace as the host. Note that -`--hostname` is invalid in `host` UTS mode. - -You may wish to share the UTS namespace with the host if you would like the -hostname of the container to change as the hostname of the host changes. A -more advanced use case would be changing the host's hostname from a container. - -## IPC settings (--ipc) - - --ipc="" : Set the IPC mode for the container, - 'container:': reuses another container's IPC namespace - 'host': use the host's IPC namespace inside the container - -By default, all containers have the IPC namespace enabled. - -IPC (POSIX/SysV IPC) namespace provides separation of named shared memory -segments, semaphores and message queues. - -Shared memory segments are used to accelerate inter-process communication at -memory speed, rather than through pipes or through the network stack. Shared -memory is commonly used by databases and custom-built (typically C/OpenMPI, -C++/using boost libraries) high performance applications for scientific -computing and financial services industries. If these types of applications -are broken into multiple containers, you might need to share the IPC mechanisms -of the containers. - -## Network settings - - --dns=[] : Set custom dns servers for the container - --network="bridge" : Connect a container to a network - 'bridge': create a network stack on the default Docker bridge - 'none': no networking - 'container:': reuse another container's network stack - 'host': use the Docker host network stack - '|': connect to a user-defined network - --network-alias=[] : Add network-scoped alias for the container - --add-host="" : Add a line to /etc/hosts (host:IP) - --mac-address="" : Sets the container's Ethernet device's MAC address - --ip="" : Sets the container's Ethernet device's IPv4 address - --ip6="" : Sets the container's Ethernet device's IPv6 address - --link-local-ip=[] : Sets one or more container's Ethernet device's link local IPv4/IPv6 addresses - -By default, all containers have networking enabled and they can make any -outgoing connections. The operator can completely disable networking -with `docker run --network none` which disables all incoming and outgoing -networking. In cases like this, you would perform I/O through files or -`STDIN` and `STDOUT` only. - -Publishing ports and linking to other containers only works with the default (bridge). The linking feature is a legacy feature. You should always prefer using Docker network drivers over linking. - -Your container will use the same DNS servers as the host by default, but -you can override this with `--dns`. - -By default, the MAC address is generated using the IP address allocated to the -container. You can set the container's MAC address explicitly by providing a -MAC address via the `--mac-address` parameter (format:`12:34:56:78:9a:bc`).Be -aware that Docker does not check if manually specified MAC addresses are unique. - -Supported networks : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NetworkDescription
none - No networking in the container. -
bridge (default) - Connect the container to the bridge via veth interfaces. -
host - Use the host's network stack inside the container. -
container:<name|id> - Use the network stack of another container, specified via - its *name* or *id*. -
NETWORK - Connects the container to a user created network (using `docker network create` command) -
- -#### Network: none - -With the network is `none` a container will not have -access to any external routes. The container will still have a -`loopback` interface enabled in the container but it does not have any -routes to external traffic. - -#### Network: bridge - -With the network set to `bridge` a container will use docker's -default networking setup. A bridge is setup on the host, commonly named -`docker0`, and a pair of `veth` interfaces will be created for the -container. One side of the `veth` pair will remain on the host attached -to the bridge while the other side of the pair will be placed inside the -container's namespaces in addition to the `loopback` interface. An IP -address will be allocated for containers on the bridge's network and -traffic will be routed though this bridge to the container. - -Containers can communicate via their IP addresses by default. To communicate by -name, they must be linked. - -#### Network: host - -With the network set to `host` a container will share the host's -network stack and all interfaces from the host will be available to the -container. The container's hostname will match the hostname on the host -system. Note that `--mac-address` is invalid in `host` netmode. Even in `host` -network mode a container has its own UTS namespace by default. As such -`--hostname` is allowed in `host` network mode and will only change the -hostname inside the container. -Similar to `--hostname`, the `--add-host`, `--dns`, `--dns-search`, and -`--dns-opt` options can be used in `host` network mode. These options update -`/etc/hosts` or `/etc/resolv.conf` inside the container. No change are made to -`/etc/hosts` and `/etc/resolv.conf` on the host. - -Compared to the default `bridge` mode, the `host` mode gives *significantly* -better networking performance since it uses the host's native networking stack -whereas the bridge has to go through one level of virtualization through the -docker daemon. It is recommended to run containers in this mode when their -networking performance is critical, for example, a production Load Balancer -or a High Performance Web Server. - -> **Note**: `--network="host"` gives the container full access to local system -> services such as D-bus and is therefore considered insecure. - -#### Network: container - -With the network set to `container` a container will share the -network stack of another container. The other container's name must be -provided in the format of `--network container:`. Note that `--add-host` -`--hostname` `--dns` `--dns-search` `--dns-opt` and `--mac-address` are -invalid in `container` netmode, and `--publish` `--publish-all` `--expose` are -also invalid in `container` netmode. - -Example running a Redis container with Redis binding to `localhost` then -running the `redis-cli` command and connecting to the Redis server over the -`localhost` interface. - - $ docker run -d --name redis example/redis --bind 127.0.0.1 - $ # use the redis container's network stack to access localhost - $ docker run --rm -it --network container:redis example/redis-cli -h 127.0.0.1 - -#### User-defined network - -You can create a network using a Docker network driver or an external network -driver plugin. You can connect multiple containers to the same network. Once -connected to a user-defined network, the containers can communicate easily using -only another container's IP address or name. - -For `overlay` networks or custom plugins that support multi-host connectivity, -containers connected to the same multi-host network but launched from different -Engines can also communicate in this way. - -The following example creates a network using the built-in `bridge` network -driver and running a container in the created network - -``` -$ docker network create -d bridge my-net -$ docker run --network=my-net -itd --name=container3 busybox -``` - -### Managing /etc/hosts - -Your container will have lines in `/etc/hosts` which define the hostname of the -container itself as well as `localhost` and a few other common things. The -`--add-host` flag can be used to add additional lines to `/etc/hosts`. - - $ docker run -it --add-host db-static:86.75.30.9 ubuntu cat /etc/hosts - 172.17.0.22 09d03f76bf2c - fe00::0 ip6-localnet - ff00::0 ip6-mcastprefix - ff02::1 ip6-allnodes - ff02::2 ip6-allrouters - 127.0.0.1 localhost - ::1 localhost ip6-localhost ip6-loopback - 86.75.30.9 db-static - -If a container is connected to the default bridge network and `linked` -with other containers, then the container's `/etc/hosts` file is updated -with the linked container's name. - -If the container is connected to user-defined network, the container's -`/etc/hosts` file is updated with names of all other containers in that -user-defined network. - -> **Note** Since Docker may live update the container’s `/etc/hosts` file, there -may be situations when processes inside the container can end up reading an -empty or incomplete `/etc/hosts` file. In most cases, retrying the read again -should fix the problem. - -## Restart policies (--restart) - -Using the `--restart` flag on Docker run you can specify a restart policy for -how a container should or should not be restarted on exit. - -When a restart policy is active on a container, it will be shown as either `Up` -or `Restarting` in [`docker ps`](commandline/ps.md). It can also be -useful to use [`docker events`](commandline/events.md) to see the -restart policy in effect. - -Docker supports the following restart policies: - - - - - - - - - - - - - - - - - - - - - - - - - - -
PolicyResult
no - Do not automatically restart the container when it exits. This is the - default. -
- - on-failure[:max-retries] - - - Restart only if the container exits with a non-zero exit status. - Optionally, limit the number of restart retries the Docker - daemon attempts. -
always - Always restart the container regardless of the exit status. - When you specify always, the Docker daemon will try to restart - the container indefinitely. The container will also always start - on daemon startup, regardless of the current state of the container. -
unless-stopped - Always restart the container regardless of the exit status, but - do not start it on daemon startup if the container has been put - to a stopped state before. -
- -An ever increasing delay (double the previous delay, starting at 100 -milliseconds) is added before each restart to prevent flooding the server. -This means the daemon will wait for 100 ms, then 200 ms, 400, 800, 1600, -and so on until either the `on-failure` limit is hit, or when you `docker stop` -or `docker rm -f` the container. - -If a container is successfully restarted (the container is started and runs -for at least 10 seconds), the delay is reset to its default value of 100 ms. - -You can specify the maximum amount of times Docker will try to restart the -container when using the **on-failure** policy. The default is that Docker -will try forever to restart the container. The number of (attempted) restarts -for a container can be obtained via [`docker inspect`](commandline/inspect.md). For example, to get the number of restarts -for container "my-container"; - - {% raw %} - $ docker inspect -f "{{ .RestartCount }}" my-container - # 2 - {% endraw %} - -Or, to get the last time the container was (re)started; - - {% raw %} - $ docker inspect -f "{{ .State.StartedAt }}" my-container - # 2015-03-04T23:47:07.691840179Z - {% endraw %} - - -Combining `--restart` (restart policy) with the `--rm` (clean up) flag results -in an error. On container restart, attached clients are disconnected. See the -examples on using the [`--rm` (clean up)](run.md#clean-up-rm) flag later in this page. - -### Examples - - $ docker run --restart=always redis - -This will run the `redis` container with a restart policy of **always** -so that if the container exits, Docker will restart it. - - $ docker run --restart=on-failure:10 redis - -This will run the `redis` container with a restart policy of **on-failure** -and a maximum restart count of 10. If the `redis` container exits with a -non-zero exit status more than 10 times in a row Docker will abort trying to -restart the container. Providing a maximum restart limit is only valid for the -**on-failure** policy. - -## Exit Status - -The exit code from `docker run` gives information about why the container -failed to run or why it exited. When `docker run` exits with a non-zero code, -the exit codes follow the `chroot` standard, see below: - -**_125_** if the error is with Docker daemon **_itself_** - - $ docker run --foo busybox; echo $? - # flag provided but not defined: --foo - See 'docker run --help'. - 125 - -**_126_** if the **_contained command_** cannot be invoked - - $ docker run busybox /etc; echo $? - # docker: Error response from daemon: Container command '/etc' could not be invoked. - 126 - -**_127_** if the **_contained command_** cannot be found - - $ docker run busybox foo; echo $? - # docker: Error response from daemon: Container command 'foo' not found or does not exist. - 127 - -**_Exit code_** of **_contained command_** otherwise - - $ docker run busybox /bin/sh -c 'exit 3'; echo $? - # 3 - -## Clean up (--rm) - -By default a container's file system persists even after the container -exits. This makes debugging a lot easier (since you can inspect the -final state) and you retain all your data by default. But if you are -running short-term **foreground** processes, these container file -systems can really pile up. If instead you'd like Docker to -**automatically clean up the container and remove the file system when -the container exits**, you can add the `--rm` flag: - - --rm=false: Automatically remove the container when it exits (incompatible with -d) - -> **Note**: When you set the `--rm` flag, Docker also removes the volumes -associated with the container when the container is removed. This is similar -to running `docker rm -v my-container`. Only volumes that are specified without a -name are removed. For example, with -`docker run --rm -v /foo -v awesome:/bar busybox top`, the volume for `/foo` will be removed, -but the volume for `/bar` will not. Volumes inherited via `--volumes-from` will be removed -with the same logic -- if the original volume was specified with a name it will **not** be removed. - -## Security configuration - --security-opt="label=user:USER" : Set the label user for the container - --security-opt="label=role:ROLE" : Set the label role for the container - --security-opt="label=type:TYPE" : Set the label type for the container - --security-opt="label=level:LEVEL" : Set the label level for the container - --security-opt="label=disable" : Turn off label confinement for the container - --security-opt="apparmor=PROFILE" : Set the apparmor profile to be applied to the container - --security-opt="no-new-privileges" : Disable container processes from gaining new privileges - --security-opt="seccomp=unconfined": Turn off seccomp confinement for the container - --security-opt="seccomp=profile.json: White listed syscalls seccomp Json file to be used as a seccomp filter - - -You can override the default labeling scheme for each container by specifying -the `--security-opt` flag. Specifying the level in the following command -allows you to share the same content between containers. - - $ docker run --security-opt label=level:s0:c100,c200 -it fedora bash - -> **Note**: Automatic translation of MLS labels is not currently supported. - -To disable the security labeling for this container versus running with the -`--privileged` flag, use the following command: - - $ docker run --security-opt label=disable -it fedora bash - -If you want a tighter security policy on the processes within a container, -you can specify an alternate type for the container. You could run a container -that is only allowed to listen on Apache ports by executing the following -command: - - $ docker run --security-opt label=type:svirt_apache_t -it centos bash - -> **Note**: You would have to write policy defining a `svirt_apache_t` type. - -If you want to prevent your container processes from gaining additional -privileges, you can execute the following command: - - $ docker run --security-opt no-new-privileges -it centos bash - -This means that commands that raise privileges such as `su` or `sudo` will no longer work. -It also causes any seccomp filters to be applied later, after privileges have been dropped -which may mean you can have a more restrictive set of filters. -For more details, see the [kernel documentation](https://www.kernel.org/doc/Documentation/prctl/no_new_privs.txt). - -## Specifying custom cgroups - -Using the `--cgroup-parent` flag, you can pass a specific cgroup to run a -container in. This allows you to create and manage cgroups on their own. You can -define custom resources for those cgroups and put containers under a common -parent group. - -## Runtime constraints on resources - -The operator can also adjust the performance parameters of the -container: - -| Option | Description | -| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | -| `-m`, `--memory=""` | Memory limit (format: `[]`). Number is a positive integer. Unit can be one of `b`, `k`, `m`, or `g`. Minimum is 4M. | -| `--memory-swap=""` | Total memory limit (memory + swap, format: `[]`). Number is a positive integer. Unit can be one of `b`, `k`, `m`, or `g`. | -| `--memory-reservation=""` | Memory soft limit (format: `[]`). Number is a positive integer. Unit can be one of `b`, `k`, `m`, or `g`. | -| `--kernel-memory=""` | Kernel memory limit (format: `[]`). Number is a positive integer. Unit can be one of `b`, `k`, `m`, or `g`. Minimum is 4M. | -| `-c`, `--cpu-shares=0` | CPU shares (relative weight) | -| `--cpu-period=0` | Limit the CPU CFS (Completely Fair Scheduler) period | -| `--cpuset-cpus=""` | CPUs in which to allow execution (0-3, 0,1) | -| `--cpuset-mems=""` | Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. | -| `--cpu-quota=0` | Limit the CPU CFS (Completely Fair Scheduler) quota | -| `--blkio-weight=0` | Block IO weight (relative weight) accepts a weight value between 10 and 1000. | -| `--blkio-weight-device=""` | Block IO weight (relative device weight, format: `DEVICE_NAME:WEIGHT`) | -| `--device-read-bps=""` | Limit read rate from a device (format: `:[]`). Number is a positive integer. Unit can be one of `kb`, `mb`, or `gb`. | -| `--device-write-bps=""` | Limit write rate to a device (format: `:[]`). Number is a positive integer. Unit can be one of `kb`, `mb`, or `gb`. | -| `--device-read-iops="" ` | Limit read rate (IO per second) from a device (format: `:`). Number is a positive integer. | -| `--device-write-iops="" ` | Limit write rate (IO per second) to a device (format: `:`). Number is a positive integer. | -| `--oom-kill-disable=false` | Whether to disable OOM Killer for the container or not. | -| `--oom-score-adj=0` | Tune container's OOM preferences (-1000 to 1000) | -| `--memory-swappiness=""` | Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. | -| `--shm-size=""` | Size of `/dev/shm`. The format is ``. `number` must be greater than `0`. Unit is optional and can be `b` (bytes), `k` (kilobytes), `m` (megabytes), or `g` (gigabytes). If you omit the unit, the system uses bytes. If you omit the size entirely, the system uses `64m`. | - -### User memory constraints - -We have four ways to set user memory usage: - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionResult
- memory=inf, memory-swap=inf (default) - - There is no memory limit for the container. The container can use - as much memory as needed. -
memory=L<inf, memory-swap=inf - (specify memory and set memory-swap as -1) The container is - not allowed to use more than L bytes of memory, but can use as much swap - as is needed (if the host supports swap memory). -
memory=L<inf, memory-swap=2*L - (specify memory without memory-swap) The container is not allowed to - use more than L bytes of memory, swap *plus* memory usage is double - of that. -
- memory=L<inf, memory-swap=S<inf, L<=S - - (specify both memory and memory-swap) The container is not allowed to - use more than L bytes of memory, swap *plus* memory usage is limited - by S. -
- -Examples: - - $ docker run -it ubuntu:14.04 /bin/bash - -We set nothing about memory, this means the processes in the container can use -as much memory and swap memory as they need. - - $ docker run -it -m 300M --memory-swap -1 ubuntu:14.04 /bin/bash - -We set memory limit and disabled swap memory limit, this means the processes in -the container can use 300M memory and as much swap memory as they need (if the -host supports swap memory). - - $ docker run -it -m 300M ubuntu:14.04 /bin/bash - -We set memory limit only, this means the processes in the container can use -300M memory and 300M swap memory, by default, the total virtual memory size -(--memory-swap) will be set as double of memory, in this case, memory + swap -would be 2*300M, so processes can use 300M swap memory as well. - - $ docker run -it -m 300M --memory-swap 1G ubuntu:14.04 /bin/bash - -We set both memory and swap memory, so the processes in the container can use -300M memory and 700M swap memory. - -Memory reservation is a kind of memory soft limit that allows for greater -sharing of memory. Under normal circumstances, containers can use as much of -the memory as needed and are constrained only by the hard limits set with the -`-m`/`--memory` option. When memory reservation is set, Docker detects memory -contention or low memory and forces containers to restrict their consumption to -a reservation limit. - -Always set the memory reservation value below the hard limit, otherwise the hard -limit takes precedence. A reservation of 0 is the same as setting no -reservation. By default (without reservation set), memory reservation is the -same as the hard memory limit. - -Memory reservation is a soft-limit feature and does not guarantee the limit -won't be exceeded. Instead, the feature attempts to ensure that, when memory is -heavily contended for, memory is allocated based on the reservation hints/setup. - -The following example limits the memory (`-m`) to 500M and sets the memory -reservation to 200M. - -```bash -$ docker run -it -m 500M --memory-reservation 200M ubuntu:14.04 /bin/bash -``` - -Under this configuration, when the container consumes memory more than 200M and -less than 500M, the next system memory reclaim attempts to shrink container -memory below 200M. - -The following example set memory reservation to 1G without a hard memory limit. - -```bash -$ docker run -it --memory-reservation 1G ubuntu:14.04 /bin/bash -``` - -The container can use as much memory as it needs. The memory reservation setting -ensures the container doesn't consume too much memory for long time, because -every memory reclaim shrinks the container's consumption to the reservation. - -By default, kernel kills processes in a container if an out-of-memory (OOM) -error occurs. To change this behaviour, use the `--oom-kill-disable` option. -Only disable the OOM killer on containers where you have also set the -`-m/--memory` option. If the `-m` flag is not set, this can result in the host -running out of memory and require killing the host's system processes to free -memory. - -The following example limits the memory to 100M and disables the OOM killer for -this container: - - $ docker run -it -m 100M --oom-kill-disable ubuntu:14.04 /bin/bash - -The following example, illustrates a dangerous way to use the flag: - - $ docker run -it --oom-kill-disable ubuntu:14.04 /bin/bash - -The container has unlimited memory which can cause the host to run out memory -and require killing system processes to free memory. The `--oom-score-adj` -parameter can be changed to select the priority of which containers will -be killed when the system is out of memory, with negative scores making them -less likely to be killed an positive more likely. - -### Kernel memory constraints - -Kernel memory is fundamentally different than user memory as kernel memory can't -be swapped out. The inability to swap makes it possible for the container to -block system services by consuming too much kernel memory. Kernel memory includes: - - - stack pages - - slab pages - - sockets memory pressure - - tcp memory pressure - -You can setup kernel memory limit to constrain these kinds of memory. For example, -every process consumes some stack pages. By limiting kernel memory, you can -prevent new processes from being created when the kernel memory usage is too high. - -Kernel memory is never completely independent of user memory. Instead, you limit -kernel memory in the context of the user memory limit. Assume "U" is the user memory -limit and "K" the kernel limit. There are three possible ways to set limits: - - - - - - - - - - - - - - - - - - - - - - -
OptionResult
U != 0, K = inf (default) - This is the standard memory limitation mechanism already present before using - kernel memory. Kernel memory is completely ignored. -
U != 0, K < U - Kernel memory is a subset of the user memory. This setup is useful in - deployments where the total amount of memory per-cgroup is overcommitted. - Overcommitting kernel memory limits is definitely not recommended, since the - box can still run out of non-reclaimable memory. - In this case, you can configure K so that the sum of all groups is - never greater than the total memory. Then, freely set U at the expense of - the system's service quality. -
U != 0, K > U - Since kernel memory charges are also fed to the user counter and reclamation - is triggered for the container for both kinds of memory. This configuration - gives the admin a unified view of memory. It is also useful for people - who just want to track kernel memory usage. -
- -Examples: - - $ docker run -it -m 500M --kernel-memory 50M ubuntu:14.04 /bin/bash - -We set memory and kernel memory, so the processes in the container can use -500M memory in total, in this 500M memory, it can be 50M kernel memory tops. - - $ docker run -it --kernel-memory 50M ubuntu:14.04 /bin/bash - -We set kernel memory without **-m**, so the processes in the container can -use as much memory as they want, but they can only use 50M kernel memory. - -### Swappiness constraint - -By default, a container's kernel can swap out a percentage of anonymous pages. -To set this percentage for a container, specify a `--memory-swappiness` value -between 0 and 100. A value of 0 turns off anonymous page swapping. A value of -100 sets all anonymous pages as swappable. By default, if you are not using -`--memory-swappiness`, memory swappiness value will be inherited from the parent. - -For example, you can set: - - $ docker run -it --memory-swappiness=0 ubuntu:14.04 /bin/bash - -Setting the `--memory-swappiness` option is helpful when you want to retain the -container's working set and to avoid swapping performance penalties. - -### CPU share constraint - -By default, all containers get the same proportion of CPU cycles. This proportion -can be modified by changing the container's CPU share weighting relative -to the weighting of all other running containers. - -To modify the proportion from the default of 1024, use the `-c` or `--cpu-shares` -flag to set the weighting to 2 or higher. If 0 is set, the system will ignore the -value and use the default of 1024. - -The proportion will only apply when CPU-intensive processes are running. -When tasks in one container are idle, other containers can use the -left-over CPU time. The actual amount of CPU time will vary depending on -the number of containers running on the system. - -For example, consider three containers, one has a cpu-share of 1024 and -two others have a cpu-share setting of 512. When processes in all three -containers attempt to use 100% of CPU, the first container would receive -50% of the total CPU time. If you add a fourth container with a cpu-share -of 1024, the first container only gets 33% of the CPU. The remaining containers -receive 16.5%, 16.5% and 33% of the CPU. - -On a multi-core system, the shares of CPU time are distributed over all CPU -cores. Even if a container is limited to less than 100% of CPU time, it can -use 100% of each individual CPU core. - -For example, consider a system with more than three cores. If you start one -container `{C0}` with `-c=512` running one process, and another container -`{C1}` with `-c=1024` running two processes, this can result in the following -division of CPU shares: - - PID container CPU CPU share - 100 {C0} 0 100% of CPU0 - 101 {C1} 1 100% of CPU1 - 102 {C1} 2 100% of CPU2 - -### CPU period constraint - -The default CPU CFS (Completely Fair Scheduler) period is 100ms. We can use -`--cpu-period` to set the period of CPUs to limit the container's CPU usage. -And usually `--cpu-period` should work with `--cpu-quota`. - -Examples: - - $ docker run -it --cpu-period=50000 --cpu-quota=25000 ubuntu:14.04 /bin/bash - -If there is 1 CPU, this means the container can get 50% CPU worth of run-time every 50ms. - -For more information, see the [CFS documentation on bandwidth limiting](https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt). - -### Cpuset constraint - -We can set cpus in which to allow execution for containers. - -Examples: - - $ docker run -it --cpuset-cpus="1,3" ubuntu:14.04 /bin/bash - -This means processes in container can be executed on cpu 1 and cpu 3. - - $ docker run -it --cpuset-cpus="0-2" ubuntu:14.04 /bin/bash - -This means processes in container can be executed on cpu 0, cpu 1 and cpu 2. - -We can set mems in which to allow execution for containers. Only effective -on NUMA systems. - -Examples: - - $ docker run -it --cpuset-mems="1,3" ubuntu:14.04 /bin/bash - -This example restricts the processes in the container to only use memory from -memory nodes 1 and 3. - - $ docker run -it --cpuset-mems="0-2" ubuntu:14.04 /bin/bash - -This example restricts the processes in the container to only use memory from -memory nodes 0, 1 and 2. - -### CPU quota constraint - -The `--cpu-quota` flag limits the container's CPU usage. The default 0 value -allows the container to take 100% of a CPU resource (1 CPU). The CFS (Completely Fair -Scheduler) handles resource allocation for executing processes and is default -Linux Scheduler used by the kernel. Set this value to 50000 to limit the container -to 50% of a CPU resource. For multiple CPUs, adjust the `--cpu-quota` as necessary. -For more information, see the [CFS documentation on bandwidth limiting](https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt). - -### Block IO bandwidth (Blkio) constraint - -By default, all containers get the same proportion of block IO bandwidth -(blkio). This proportion is 500. To modify this proportion, change the -container's blkio weight relative to the weighting of all other running -containers using the `--blkio-weight` flag. - -> **Note:** The blkio weight setting is only available for direct IO. Buffered IO -> is not currently supported. - -The `--blkio-weight` flag can set the weighting to a value between 10 to 1000. -For example, the commands below create two containers with different blkio -weight: - - $ docker run -it --name c1 --blkio-weight 300 ubuntu:14.04 /bin/bash - $ docker run -it --name c2 --blkio-weight 600 ubuntu:14.04 /bin/bash - -If you do block IO in the two containers at the same time, by, for example: - - $ time dd if=/mnt/zerofile of=test.out bs=1M count=1024 oflag=direct - -You'll find that the proportion of time is the same as the proportion of blkio -weights of the two containers. - -The `--blkio-weight-device="DEVICE_NAME:WEIGHT"` flag sets a specific device weight. -The `DEVICE_NAME:WEIGHT` is a string containing a colon-separated device name and weight. -For example, to set `/dev/sda` device weight to `200`: - - $ docker run -it \ - --blkio-weight-device "/dev/sda:200" \ - ubuntu - -If you specify both the `--blkio-weight` and `--blkio-weight-device`, Docker -uses the `--blkio-weight` as the default weight and uses `--blkio-weight-device` -to override this default with a new value on a specific device. -The following example uses a default weight of `300` and overrides this default -on `/dev/sda` setting that weight to `200`: - - $ docker run -it \ - --blkio-weight 300 \ - --blkio-weight-device "/dev/sda:200" \ - ubuntu - -The `--device-read-bps` flag limits the read rate (bytes per second) from a device. -For example, this command creates a container and limits the read rate to `1mb` -per second from `/dev/sda`: - - $ docker run -it --device-read-bps /dev/sda:1mb ubuntu - -The `--device-write-bps` flag limits the write rate (bytes per second)to a device. -For example, this command creates a container and limits the write rate to `1mb` -per second for `/dev/sda`: - - $ docker run -it --device-write-bps /dev/sda:1mb ubuntu - -Both flags take limits in the `:[unit]` format. Both read -and write rates must be a positive integer. You can specify the rate in `kb` -(kilobytes), `mb` (megabytes), or `gb` (gigabytes). - -The `--device-read-iops` flag limits read rate (IO per second) from a device. -For example, this command creates a container and limits the read rate to -`1000` IO per second from `/dev/sda`: - - $ docker run -ti --device-read-iops /dev/sda:1000 ubuntu - -The `--device-write-iops` flag limits write rate (IO per second) to a device. -For example, this command creates a container and limits the write rate to -`1000` IO per second to `/dev/sda`: - - $ docker run -ti --device-write-iops /dev/sda:1000 ubuntu - -Both flags take limits in the `:` format. Both read and -write rates must be a positive integer. - -## Additional groups - --group-add: Add additional groups to run as - -By default, the docker container process runs with the supplementary groups looked -up for the specified user. If one wants to add more to that list of groups, then -one can use this flag: - - $ docker run --rm --group-add audio --group-add nogroup --group-add 777 busybox id - uid=0(root) gid=0(root) groups=10(wheel),29(audio),99(nogroup),777 - -## Runtime privilege and Linux capabilities - - --cap-add: Add Linux capabilities - --cap-drop: Drop Linux capabilities - --privileged=false: Give extended privileges to this container - --device=[]: Allows you to run devices inside the container without the --privileged flag. - -By default, Docker containers are "unprivileged" and cannot, for -example, run a Docker daemon inside a Docker container. This is because -by default a container is not allowed to access any devices, but a -"privileged" container is given access to all devices (see -the documentation on [cgroups devices](https://www.kernel.org/doc/Documentation/cgroup-v1/devices.txt)). - -When the operator executes `docker run --privileged`, Docker will enable -to access to all devices on the host as well as set some configuration -in AppArmor or SELinux to allow the container nearly all the same access to the -host as processes running outside containers on the host. Additional -information about running with `--privileged` is available on the -[Docker Blog](http://blog.docker.com/2013/09/docker-can-now-run-within-docker/). - -If you want to limit access to a specific device or devices you can use -the `--device` flag. It allows you to specify one or more devices that -will be accessible within the container. - - $ docker run --device=/dev/snd:/dev/snd ... - -By default, the container will be able to `read`, `write`, and `mknod` these devices. -This can be overridden using a third `:rwm` set of options to each `--device` flag: - - $ docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk /dev/xvdc - - Command (m for help): q - $ docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk /dev/xvdc - You will not be able to write the partition table. - - Command (m for help): q - - $ docker run --device=/dev/sda:/dev/xvdc:w --rm -it ubuntu fdisk /dev/xvdc - crash.... - - $ docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk /dev/xvdc - fdisk: unable to open /dev/xvdc: Operation not permitted - -In addition to `--privileged`, the operator can have fine grain control over the -capabilities using `--cap-add` and `--cap-drop`. By default, Docker has a default -list of capabilities that are kept. The following table lists the Linux capability -options which are allowed by default and can be dropped. - -| Capability Key | Capability Description | -| ---------------- | ----------------------------------------------------------------------------------------------------------------------------- | -| SETPCAP | Modify process capabilities. | -| MKNOD | Create special files using mknod(2). | -| AUDIT_WRITE | Write records to kernel auditing log. | -| CHOWN | Make arbitrary changes to file UIDs and GIDs (see chown(2)). | -| NET_RAW | Use RAW and PACKET sockets. | -| DAC_OVERRIDE | Bypass file read, write, and execute permission checks. | -| FOWNER | Bypass permission checks on operations that normally require the file system UID of the process to match the UID of the file. | -| FSETID | Don't clear set-user-ID and set-group-ID permission bits when a file is modified. | -| KILL | Bypass permission checks for sending signals. | -| SETGID | Make arbitrary manipulations of process GIDs and supplementary GID list. | -| SETUID | Make arbitrary manipulations of process UIDs. | -| NET_BIND_SERVICE | Bind a socket to internet domain privileged ports (port numbers less than 1024). | -| SYS_CHROOT | Use chroot(2), change root directory. | -| SETFCAP | Set file capabilities. | - -The next table shows the capabilities which are not granted by default and may be added. - -| Capability Key | Capability Description | -| ---------------- | ----------------------------------------------------------------------------------------------------------------------------- | -| SYS_MODULE | Load and unload kernel modules. | -| SYS_RAWIO | Perform I/O port operations (iopl(2) and ioperm(2)). | -| SYS_PACCT | Use acct(2), switch process accounting on or off. | -| SYS_ADMIN | Perform a range of system administration operations. | -| SYS_NICE | Raise process nice value (nice(2), setpriority(2)) and change the nice value for arbitrary processes. | -| SYS_RESOURCE | Override resource Limits. | -| SYS_TIME | Set system clock (settimeofday(2), stime(2), adjtimex(2)); set real-time (hardware) clock. | -| SYS_TTY_CONFIG | Use vhangup(2); employ various privileged ioctl(2) operations on virtual terminals. | -| AUDIT_CONTROL | Enable and disable kernel auditing; change auditing filter rules; retrieve auditing status and filtering rules. | -| MAC_OVERRIDE | Allow MAC configuration or state changes. Implemented for the Smack LSM. | -| MAC_ADMIN | Override Mandatory Access Control (MAC). Implemented for the Smack Linux Security Module (LSM). | -| NET_ADMIN | Perform various network-related operations. | -| SYSLOG | Perform privileged syslog(2) operations. | -| DAC_READ_SEARCH | Bypass file read permission checks and directory read and execute permission checks. | -| LINUX_IMMUTABLE | Set the FS_APPEND_FL and FS_IMMUTABLE_FL i-node flags. | -| NET_BROADCAST | Make socket broadcasts, and listen to multicasts. | -| IPC_LOCK | Lock memory (mlock(2), mlockall(2), mmap(2), shmctl(2)). | -| IPC_OWNER | Bypass permission checks for operations on System V IPC objects. | -| SYS_PTRACE | Trace arbitrary processes using ptrace(2). | -| SYS_BOOT | Use reboot(2) and kexec_load(2), reboot and load a new kernel for later execution. | -| LEASE | Establish leases on arbitrary files (see fcntl(2)). | -| WAKE_ALARM | Trigger something that will wake up the system. | -| BLOCK_SUSPEND | Employ features that can block system suspend. | - -Further reference information is available on the [capabilities(7) - Linux man page](http://man7.org/linux/man-pages/man7/capabilities.7.html) - -Both flags support the value `ALL`, so if the -operator wants to have all capabilities but `MKNOD` they could use: - - $ docker run --cap-add=ALL --cap-drop=MKNOD ... - -For interacting with the network stack, instead of using `--privileged` they -should use `--cap-add=NET_ADMIN` to modify the network interfaces. - - $ docker run -it --rm ubuntu:14.04 ip link add dummy0 type dummy - RTNETLINK answers: Operation not permitted - $ docker run -it --rm --cap-add=NET_ADMIN ubuntu:14.04 ip link add dummy0 type dummy - -To mount a FUSE based filesystem, you need to combine both `--cap-add` and -`--device`: - - $ docker run --rm -it --cap-add SYS_ADMIN sshfs sshfs sven@10.10.10.20:/home/sven /mnt - fuse: failed to open /dev/fuse: Operation not permitted - $ docker run --rm -it --device /dev/fuse sshfs sshfs sven@10.10.10.20:/home/sven /mnt - fusermount: mount failed: Operation not permitted - $ docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs - # sshfs sven@10.10.10.20:/home/sven /mnt - The authenticity of host '10.10.10.20 (10.10.10.20)' can't be established. - ECDSA key fingerprint is 25:34:85:75:25:b0:17:46:05:19:04:93:b5:dd:5f:c6. - Are you sure you want to continue connecting (yes/no)? yes - sven@10.10.10.20's password: - root@30aa0cfaf1b5:/# ls -la /mnt/src/docker - total 1516 - drwxrwxr-x 1 1000 1000 4096 Dec 4 06:08 . - drwxrwxr-x 1 1000 1000 4096 Dec 4 11:46 .. - -rw-rw-r-- 1 1000 1000 16 Oct 8 00:09 .dockerignore - -rwxrwxr-x 1 1000 1000 464 Oct 8 00:09 .drone.yml - drwxrwxr-x 1 1000 1000 4096 Dec 4 06:11 .git - -rw-rw-r-- 1 1000 1000 461 Dec 4 06:08 .gitignore - .... - -The default seccomp profile will adjust to the selected capabilities, in order to allow -use of facilities allowed by the capabilities, so you should not have to adjust this, -since Docker 1.12. In Docker 1.10 and 1.11 this did not happen and it may be necessary -to use a custom seccomp profile or use `--security-opt seccomp=unconfined` when adding -capabilities. - -## Logging drivers (--log-driver) - -The container can have a different logging driver than the Docker daemon. Use -the `--log-driver=VALUE` with the `docker run` command to configure the -container's logging driver. The following options are supported: - -| Driver | Description | -| ----------- | ----------------------------------------------------------------------------------------------------------------------------- | -| `none` | Disables any logging for the container. `docker logs` won't be available with this driver. | -| `json-file` | Default logging driver for Docker. Writes JSON messages to file. No logging options are supported for this driver. | -| `syslog` | Syslog logging driver for Docker. Writes log messages to syslog. | -| `journald` | Journald logging driver for Docker. Writes log messages to `journald`. | -| `gelf` | Graylog Extended Log Format (GELF) logging driver for Docker. Writes log messages to a GELF endpoint likeGraylog or Logstash. | -| `fluentd` | Fluentd logging driver for Docker. Writes log messages to `fluentd` (forward input). | -| `awslogs` | Amazon CloudWatch Logs logging driver for Docker. Writes log messages to Amazon CloudWatch Logs | -| `splunk` | Splunk logging driver for Docker. Writes log messages to `splunk` using Event Http Collector. | - -The `docker logs` command is available only for the `json-file` and `journald` -logging drivers. For detailed information on working with logging drivers, see -[Configure a logging driver](../admin/logging/overview.md). - - -## Overriding Dockerfile image defaults - -When a developer builds an image from a [*Dockerfile*](builder.md) -or when she commits it, the developer can set a number of default parameters -that take effect when the image starts up as a container. - -Four of the Dockerfile commands cannot be overridden at runtime: `FROM`, -`MAINTAINER`, `RUN`, and `ADD`. Everything else has a corresponding override -in `docker run`. We'll go through what the developer might have set in each -Dockerfile instruction and how the operator can override that setting. - - - [CMD (Default Command or Options)](run.md#cmd-default-command-or-options) - - [ENTRYPOINT (Default Command to Execute at Runtime)]( - #entrypoint-default-command-to-execute-at-runtime) - - [EXPOSE (Incoming Ports)](run.md#expose-incoming-ports) - - [ENV (Environment Variables)](run.md#env-environment-variables) - - [HEALTHCHECK](run.md#healthcheck) - - [VOLUME (Shared Filesystems)](run.md#volume-shared-filesystems) - - [USER](run.md#user) - - [WORKDIR](run.md#workdir) - -### CMD (default command or options) - -Recall the optional `COMMAND` in the Docker -commandline: - - $ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] - -This command is optional because the person who created the `IMAGE` may -have already provided a default `COMMAND` using the Dockerfile `CMD` -instruction. As the operator (the person running a container from the -image), you can override that `CMD` instruction just by specifying a new -`COMMAND`. - -If the image also specifies an `ENTRYPOINT` then the `CMD` or `COMMAND` -get appended as arguments to the `ENTRYPOINT`. - -### ENTRYPOINT (default command to execute at runtime) - - --entrypoint="": Overwrite the default entrypoint set by the image - -The `ENTRYPOINT` of an image is similar to a `COMMAND` because it -specifies what executable to run when the container starts, but it is -(purposely) more difficult to override. The `ENTRYPOINT` gives a -container its default nature or behavior, so that when you set an -`ENTRYPOINT` you can run the container *as if it were that binary*, -complete with default options, and you can pass in more options via the -`COMMAND`. But, sometimes an operator may want to run something else -inside the container, so you can override the default `ENTRYPOINT` at -runtime by using a string to specify the new `ENTRYPOINT`. Here is an -example of how to run a shell in a container that has been set up to -automatically run something else (like `/usr/bin/redis-server`): - - $ docker run -it --entrypoint /bin/bash example/redis - -or two examples of how to pass more parameters to that ENTRYPOINT: - - $ docker run -it --entrypoint /bin/bash example/redis -c ls -l - $ docker run -it --entrypoint /usr/bin/redis-cli example/redis --help - -> **Note**: Passing `--entrypoint` will clear out any default command set on the -> image (i.e. any `CMD` instruction in the Dockerfile used to build it). - -### EXPOSE (incoming ports) - -The following `run` command options work with container networking: - - --expose=[]: Expose a port or a range of ports inside the container. - These are additional to those exposed by the `EXPOSE` instruction - -P : Publish all exposed ports to the host interfaces - -p=[] : Publish a container᾿s port or a range of ports to the host - format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort - Both hostPort and containerPort can be specified as a - range of ports. When specifying ranges for both, the - number of container ports in the range must match the - number of host ports in the range, for example: - -p 1234-1236:1234-1236/tcp - - When specifying a range for hostPort only, the - containerPort must not be a range. In this case the - container port is published somewhere within the - specified hostPort range. (e.g., `-p 1234-1236:1234/tcp`) - - (use 'docker port' to see the actual mapping) - - --link="" : Add link to another container (:alias or ) - -With the exception of the `EXPOSE` directive, an image developer hasn't -got much control over networking. The `EXPOSE` instruction defines the -initial incoming ports that provide services. These ports are available -to processes inside the container. An operator can use the `--expose` -option to add to the exposed ports. - -To expose a container's internal port, an operator can start the -container with the `-P` or `-p` flag. The exposed port is accessible on -the host and the ports are available to any client that can reach the -host. - -The `-P` option publishes all the ports to the host interfaces. Docker -binds each exposed port to a random port on the host. The range of -ports are within an *ephemeral port range* defined by -`/proc/sys/net/ipv4/ip_local_port_range`. Use the `-p` flag to -explicitly map a single port or range of ports. - -The port number inside the container (where the service listens) does -not need to match the port number exposed on the outside of the -container (where clients connect). For example, inside the container an -HTTP service is listening on port 80 (and so the image developer -specifies `EXPOSE 80` in the Dockerfile). At runtime, the port might be -bound to 42800 on the host. To find the mapping between the host ports -and the exposed ports, use `docker port`. - -If the operator uses `--link` when starting a new client container in the -default bridge network, then the client container can access the exposed -port via a private networking interface. -If `--link` is used when starting a container in a user-defined network as -described in [*Docker network overview*](../userguide/networking/index.md), -it will provide a named alias for the container being linked to. - -### ENV (environment variables) - -When a new container is created, Docker will set the following environment -variables automatically: - -| Variable | Value | -| -------- | ----- | -| `HOME` | Set based on the value of `USER` | -| `HOSTNAME` | The hostname associated with the container | -| `PATH` | Includes popular directories, such as `:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin` | -| `TERM` | `xterm` if the container is allocated a pseudo-TTY | - -Additionally, the operator can **set any environment variable** in the -container by using one or more `-e` flags, even overriding those mentioned -above, or already defined by the developer with a Dockerfile `ENV`: - - $ docker run -e "deep=purple" --rm ubuntu /bin/bash -c export - declare -x HOME="/" - declare -x HOSTNAME="85bc26a0e200" - declare -x OLDPWD - declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - declare -x PWD="/" - declare -x SHLVL="1" - declare -x deep="purple" - -Similarly the operator can set the **hostname** with `-h`. - -### HEALTHCHECK - -``` - --health-cmd Command to run to check health - --health-interval Time between running the check - --health-retries Consecutive failures needed to report unhealthy - --health-timeout Maximum time to allow one check to run - --no-healthcheck Disable any container-specified HEALTHCHECK -``` - -Example: - - {% raw %} - $ docker run --name=test -d \ - --health-cmd='stat /etc/passwd || exit 1' \ - --health-interval=2s \ - busybox sleep 1d - $ sleep 2; docker inspect --format='{{.State.Health.Status}}' test - healthy - $ docker exec test rm /etc/passwd - $ sleep 2; docker inspect --format='{{json .State.Health}}' test - { - "Status": "unhealthy", - "FailingStreak": 3, - "Log": [ - { - "Start": "2016-05-25T17:22:04.635478668Z", - "End": "2016-05-25T17:22:04.7272552Z", - "ExitCode": 0, - "Output": " File: /etc/passwd\n Size: 334 \tBlocks: 8 IO Block: 4096 regular file\nDevice: 32h/50d\tInode: 12 Links: 1\nAccess: (0664/-rw-rw-r--) Uid: ( 0/ root) Gid: ( 0/ root)\nAccess: 2015-12-05 22:05:32.000000000\nModify: 2015..." - }, - { - "Start": "2016-05-25T17:22:06.732900633Z", - "End": "2016-05-25T17:22:06.822168935Z", - "ExitCode": 0, - "Output": " File: /etc/passwd\n Size: 334 \tBlocks: 8 IO Block: 4096 regular file\nDevice: 32h/50d\tInode: 12 Links: 1\nAccess: (0664/-rw-rw-r--) Uid: ( 0/ root) Gid: ( 0/ root)\nAccess: 2015-12-05 22:05:32.000000000\nModify: 2015..." - }, - { - "Start": "2016-05-25T17:22:08.823956535Z", - "End": "2016-05-25T17:22:08.897359124Z", - "ExitCode": 1, - "Output": "stat: can't stat '/etc/passwd': No such file or directory\n" - }, - { - "Start": "2016-05-25T17:22:10.898802931Z", - "End": "2016-05-25T17:22:10.969631866Z", - "ExitCode": 1, - "Output": "stat: can't stat '/etc/passwd': No such file or directory\n" - }, - { - "Start": "2016-05-25T17:22:12.971033523Z", - "End": "2016-05-25T17:22:13.082015516Z", - "ExitCode": 1, - "Output": "stat: can't stat '/etc/passwd': No such file or directory\n" - } - ] - } - {% endraw %} - -The health status is also displayed in the `docker ps` output. - -### TMPFS (mount tmpfs filesystems) - -```bash ---tmpfs=[]: Create a tmpfs mount with: container-dir[:], - where the options are identical to the Linux - 'mount -t tmpfs -o' command. -``` - -The example below mounts an empty tmpfs into the container with the `rw`, -`noexec`, `nosuid`, and `size=65536k` options. - - $ docker run -d --tmpfs /run:rw,noexec,nosuid,size=65536k my_image - -### VOLUME (shared filesystems) - - -v, --volume=[host-src:]container-dest[:]: Bind mount a volume. - The comma-delimited `options` are [rw|ro], [z|Z], - [[r]shared|[r]slave|[r]private], and [nocopy]. - The 'host-src' is an absolute path or a name value. - - If neither 'rw' or 'ro' is specified then the volume is mounted in - read-write mode. - - The `nocopy` modes is used to disable automatic copying requested volume - path in the container to the volume storage location. - For named volumes, `copy` is the default mode. Copy modes are not supported - for bind-mounted volumes. - - --volumes-from="": Mount all volumes from the given container(s) - -> **Note**: -> When using systemd to manage the Docker daemon's start and stop, in the systemd -> unit file there is an option to control mount propagation for the Docker daemon -> itself, called `MountFlags`. The value of this setting may cause Docker to not -> see mount propagation changes made on the mount point. For example, if this value -> is `slave`, you may not be able to use the `shared` or `rshared` propagation on -> a volume. - -The volumes commands are complex enough to have their own documentation -in section [*Manage data in -containers*](../tutorials/dockervolumes.md). A developer can define -one or more `VOLUME`'s associated with an image, but only the operator -can give access from one container to another (or from a container to a -volume mounted on the host). - -The `container-dest` must always be an absolute path such as `/src/docs`. -The `host-src` can either be an absolute path or a `name` value. If you -supply an absolute path for the `host-dir`, Docker bind-mounts to the path -you specify. If you supply a `name`, Docker creates a named volume by that `name`. - -A `name` value must start with an alphanumeric character, -followed by `a-z0-9`, `_` (underscore), `.` (period) or `-` (hyphen). -An absolute path starts with a `/` (forward slash). - -For example, you can specify either `/foo` or `foo` for a `host-src` value. -If you supply the `/foo` value, Docker creates a bind-mount. If you supply -the `foo` specification, Docker creates a named volume. - -### USER - -`root` (id = 0) is the default user within a container. The image developer can -create additional users. Those users are accessible by name. When passing a numeric -ID, the user does not have to exist in the container. - -The developer can set a default user to run the first process with the -Dockerfile `USER` instruction. When starting a container, the operator can override -the `USER` instruction by passing the `-u` option. - - -u="", --user="": Sets the username or UID used and optionally the groupname or GID for the specified command. - - The followings examples are all valid: - --user=[ user | user:group | uid | uid:gid | user:gid | uid:group ] - -> **Note:** if you pass a numeric uid, it must be in the range of 0-2147483647. - -### WORKDIR - -The default working directory for running binaries within a container is the -root directory (`/`), but the developer can set a different default with the -Dockerfile `WORKDIR` command. The operator can override this with: - - -w="": Working directory inside the container From 00b4a1ab0054edfc528f77b54efcdcf26b998667 Mon Sep 17 00:00:00 2001 From: Misty Stanley-Jones Date: Wed, 16 Nov 2016 17:02:21 -0800 Subject: [PATCH 11/32] Remove the naming digression from the networking tutorial Fixes #575 --- engine/tutorials/networkingcontainers.md | 60 +----------------------- 1 file changed, 1 insertion(+), 59 deletions(-) diff --git a/engine/tutorials/networkingcontainers.md b/engine/tutorials/networkingcontainers.md index fbcb3298df..f05604ebc5 100644 --- a/engine/tutorials/networkingcontainers.md +++ b/engine/tutorials/networkingcontainers.md @@ -11,64 +11,6 @@ If you are working your way through the user guide, you just built and ran a simple application. You've also built in your own images. This section teaches you how to network your containers. -## Name a container - -You've already seen that each container you create has an automatically -created name; indeed you've become familiar with our old friend -`nostalgic_morse` during this guide. You can also name containers -yourself. This naming provides two useful functions: - -* You can name containers that do specific functions in a way - that makes it easier for you to remember them, for example naming a - container containing a web application `web`. - -* Names provide Docker with a reference point that allows it to refer to other - containers. There are several commands that support this and you'll use one in an exercise later. - -You name your container by using the `--name` flag, for example launch a new container called web: - - $ docker run -d -P --name web training/webapp python app.py - -Use the `docker ps` command to check the name: - - $ docker ps -l - - CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES - aed84ee21bde training/webapp:latest python app.py 12 hours ago Up 2 seconds 0.0.0.0:49154->5000/tcp web - -You can also use `docker inspect` with the container's name. - - $ docker inspect web - - [ - { - "Id": "3ce51710b34f5d6da95e0a340d32aa2e6cf64857fb8cdb2a6c38f7c56f448143", - "Created": "2015-10-25T22:44:17.854367116Z", - "Path": "python", - "Args": [ - "app.py" - ], - "State": { - "Status": "running", - "Running": true, - "Paused": false, - "Restarting": false, - "OOMKilled": false, - ... - -Container names must be unique. That means you can only call one container -`web`. If you want to re-use a container name you must delete the old container -(with `docker rm`) before you can reuse the name with a new container. Go ahead and stop and remove your old `web` container. - - $ docker stop web - - web - - $ docker rm web - - web - - ## Launch a container on the default network Docker includes support for networking containers through the use of **network @@ -259,4 +201,4 @@ The `ping` shows it is contacting a different IP address, the address on the `my ## Next steps -Now that you know how to network containers, see [how to manage data in containers](dockervolumes.md). \ No newline at end of file +Now that you know how to network containers, see [how to manage data in containers](dockervolumes.md). From 5a99cb769913146ab165f2710eff2def015298b6 Mon Sep 17 00:00:00 2001 From: Joao Fernandes Date: Wed, 16 Nov 2016 18:06:22 -0800 Subject: [PATCH 12/32] Add DTR NFS support --- _data/toc.yaml | 2 + .../dtr/2.1/guides/configure/use-nfs.md | 71 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 datacenter/dtr/2.1/guides/configure/use-nfs.md diff --git a/_data/toc.yaml b/_data/toc.yaml index 17851adc14..0f84fc3491 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -769,6 +769,8 @@ toc: title: Use your own certificates - path: /datacenter/dtr/2.1/guides/configure/configure-storage/ title: Storage configuration + - path: /datacenter/dtr/2.1/guides/configure/use-nfs/ + title: Use NFS - sectiontitle: Monitor and troubleshoot section: - path: /datacenter/dtr/2.1/guides/monitor-troubleshoot/ diff --git a/datacenter/dtr/2.1/guides/configure/use-nfs.md b/datacenter/dtr/2.1/guides/configure/use-nfs.md new file mode 100644 index 0000000000..672d845df4 --- /dev/null +++ b/datacenter/dtr/2.1/guides/configure/use-nfs.md @@ -0,0 +1,71 @@ +--- +title: Use NFS +description: Learn how to integrate Docker Trusted Registry with NFS +keywords: registry, dtr, storage, nfs +--- + +You can configure DTR to store Docker images in an NFS directory. + +Before installing or configuring DTR to use an NFS directory, make sure that: + +* The NFS server has been correctly configured +* The NFS server has a fixed IP address +* All hosts running DTR have the correct NFS libraries installed + + +To confirm that the hosts can connect to the NFS server, try to list the +directories exported by your NFS server: + +```bash +showmount -e +``` + +You should also try yo mount one of the exported directories: + +```bash +mkdir /tmp/mydir && sudo mount -t nfs : +``` + +## Install DTR with NFS + +One way to configure DTR to use an NFS directory is at install time: + +```none +docker run -it --rm docker/dtr install \ + --nfs-storage-url \ + +``` + +The NFS storage URL should be in the format `nfs:///`. + +When you join replicas to the DTR cluster, the replicas will pick up that +configuration, so you don't need to specify it again. + +### Reconfigure DTR to use NFS + +If you're upgrading from a previous version of DTR and are already using +NFS you can continue using the same configurations. + +If you want to start using the new DTR built-in support for NFS you can +reconfigure DTR: + +```none +docker run -it --rm docker/dtr reconfigure \ + --nfs-storage-url +``` + +If you want to reconfigure DTR to stop using NFS storage, leave the option +in blank: + +```none +docker run -it --rm docker/dtr reconfigure \ + --nfs-storage-url "" +``` + +If the IP address of your NFS server changes, even if the DNS address is kept +the same, you should reconfigure DTR to stop using NFS storage, and then +add it back again. + +## Where to go next + +* [Configure where images are stored](configure-storage.md) From 96a694049afc6df1b42ab21a0c5221be926e23e4 Mon Sep 17 00:00:00 2001 From: Elton Stoneman Date: Thu, 17 Nov 2016 15:05:52 +0000 Subject: [PATCH 13/32] Pre-reqs were listed as Step 2 and came before Step 1 --- datacenter/ucp/1.1/install-sandbox.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datacenter/ucp/1.1/install-sandbox.md b/datacenter/ucp/1.1/install-sandbox.md index 3fc6d90086..dd84a19f55 100644 --- a/datacenter/ucp/1.1/install-sandbox.md +++ b/datacenter/ucp/1.1/install-sandbox.md @@ -53,7 +53,7 @@ the correct ones for you environment. --> >**Note**: The command examples in this page were tested for a macOS environment. If you are in another, you may need to adjust to use analogous commands for your environment. -## Step 2. Verify the prerequisites +## Verify the prerequisites This example requires that you have: From 7da6a0bd214d93fda1746b66075f30e93c3b5638 Mon Sep 17 00:00:00 2001 From: LRubin Date: Thu, 17 Nov 2016 09:31:06 -0800 Subject: [PATCH 14/32] add 'none' cue to large screentext block ...to prevent weird syntax highlighting. --- compose/reference/overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compose/reference/overview.md b/compose/reference/overview.md index 6941f0795f..f155bb5e4f 100644 --- a/compose/reference/overview.md +++ b/compose/reference/overview.md @@ -10,7 +10,7 @@ This page provides the usage information for the `docker-compose` Command. You can also see this information by running `docker-compose --help` from the command line. -``` +```none Define and run multi-container applications with Docker. Usage: @@ -117,4 +117,4 @@ envvars.md#compose-project-name) ## Where to go next -* [CLI environment variables](envvars.md) \ No newline at end of file +* [CLI environment variables](envvars.md) From 2ce1b67e377aca0d17fc5d1f25cb7027565fcdc2 Mon Sep 17 00:00:00 2001 From: Misty Stanley-Jones Date: Thu, 17 Nov 2016 11:47:08 -0800 Subject: [PATCH 15/32] Adjust instructions for starting Swarm nodes Fixes #221 --- swarm/install-manual.md | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/swarm/install-manual.md b/swarm/install-manual.md index ea55acaaf2..83f4f79980 100644 --- a/swarm/install-manual.md +++ b/swarm/install-manual.md @@ -121,20 +121,24 @@ SSH to each node in turn and do the following. $ curl -sSL https://get.docker.com/ | sh -3. Configure and start Engine so it listens for Swarm nodes on port `2375`. +3. Edit `/etc/sysconfig/docker` and add `"-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"` + to the `OPTIONS` variable. - $ sudo docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock +4. Start Docker. -4. Verify that Docker Engine is installed correctly: + $ sudo /etc/init.d/docker start - $ sudo docker run hello-world +4. Verify that Docker Engine is installed correctly by running a container with the + `hello-world` image. - The output should display a "Hello World" message and other text without any - error messages. + $ sudo docker run hello-world + + The output should display a "Hello World" message and other text without any + error messages. 5. Give the `ec2-user` root privileges: - $ sudo usermod -aG docker ec2-user + $ sudo usermod -aG docker ec2-user 6. Enter `logout`. @@ -299,4 +303,4 @@ They will display corresponding entries for the change in leadership. - [High availability in Docker Swarm](multi-manager-setup.md) - [Discovery](discovery.md) - [High-availability cluster using a trio of consul nodes](https://hub.docker.com/r/progrium/consul/) -- [Networking](networking.md) \ No newline at end of file +- [Networking](networking.md) From 6965aa8b9ba5cc1bbf99bdcc6655457304c8b49f Mon Sep 17 00:00:00 2001 From: LRubin Date: Wed, 16 Nov 2016 18:12:06 -0800 Subject: [PATCH 16/32] CLOUD-2887 updates for build reports Signed-off-by: LRubin --- docker-cloud/builds/automated-build.md | 37 ++++++++++++++---- .../builds/images/build-cancelicon.png | Bin 0 -> 18662 bytes docker-cloud/builds/images/build-report.png | Bin 0 -> 95410 bytes docker-cloud/builds/images/cancel-build.png | Bin 84121 -> 86751 bytes docker-cloud/builds/images/retry-build.png | Bin 0 -> 95884 bytes 5 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 docker-cloud/builds/images/build-cancelicon.png create mode 100644 docker-cloud/builds/images/build-report.png create mode 100644 docker-cloud/builds/images/retry-build.png diff --git a/docker-cloud/builds/automated-build.md b/docker-cloud/builds/automated-build.md index ffcea8898f..2d75d6791f 100644 --- a/docker-cloud/builds/automated-build.md +++ b/docker-cloud/builds/automated-build.md @@ -124,18 +124,39 @@ should remain secret. the build processes _only_ and should not be confused with the environment values used by your service (for example to create service links). - ## Check your active builds -You can view a summary of the last five builds for a repository from the repository's **General** tab. You can also click **Timeline** to view a list of all active builds, and expand each build to see their real-time logs. The **Builds** tab also displays a color coded bar chart of the build queue times and durations. +A summary of a repository's builds appears both on the repository **General** +tab, and in the **Builds** tab. The **Builds** tab also displays a color coded +bar chart of the build queue times and durations. Both views display the +pending, in progress, successful, and failed builds for any tag of the +repository. -Both views display the pending, in progress, successful, and failed builds -for any tag of the repository. +From either location, you can click a build job to view its build report. The +build report shows information about the build job including the source +repository and branch (or tag), the build duration, creation time and location, +and the user namespace the build occurred in. -You can click the **Cancel** button for pending builds and builds in progress. -If a build fails, the cancel button is replaced by a **Retry** button. +![screen showing a build report](images/build-report.png) + +## Cancel or retry a build + +While a build is queued or running, a **Cancel** icon appears next to its build +report link on the General tab and on the Builds tab. You can also click the +**Cancel** button from the build report page, or from the Timeline tab's logs +display for the build. + +![list of builds showing the cancel icon](images/build-cancelicon.png) + +If a build fails, a **Retry** icon appears next to the build report line on the +General and Builds tabs, and the build report page and Timeline logs also +display a **Retry** button. + +![Timeline view showing the retry build button](images/retry-build.png) + +> **Note**: If you are viewing the build details for a repository that belongs +to an Organization, the Cancel and Retry buttons only appear if you have `Read & Write` access to the repository. -![](images/cancel-build.png) ## Disable an automated build @@ -355,4 +376,4 @@ Docker Cloud's [Autotest](automated-testing.md) feature which integrates seamlessly with autobuild and autoredeploy. > **Note**: While the Autotest feature builds an image for testing purposes, it -does not push the resulting image to Docker Cloud or the external registry. \ No newline at end of file +does not push the resulting image to Docker Cloud or the external registry. diff --git a/docker-cloud/builds/images/build-cancelicon.png b/docker-cloud/builds/images/build-cancelicon.png new file mode 100644 index 0000000000000000000000000000000000000000..07b3e0d3ec6d87c0cecd717bbc810ff9883dfa5c GIT binary patch literal 18662 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 c*AVx|{yj6VmdKI;Vst0P4s*C;$Ke literal 0 HcmV?d00001 diff --git a/docker-cloud/builds/images/build-report.png b/docker-cloud/builds/images/build-report.png new file mode 100644 index 0000000000000000000000000000000000000000..d71ecd61585d3f1c071f34eda5277cc86ecc8eee GIT binary patch literal 95410 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

old8%TgPk2L=+-d zg>B=`lFq^50=kF6N6pTy*8)`xtyTcd1zbVP#4e!IA=LuZ|ypH>o&OD z3d|kO-G)7d-9?Qj>hwvtGQW3N{4^flUNm1sIklIq_FDPswOc)KIe-p`+c@-}B95v3 zs{bB$KLn`Bz)rxXWJ=Uqj82biQfyYd?fQOWdCGBdcWQi|ZRAJf`{(Z9ML*i_P9a!6 zs$;(^(@W!0@BVcJ)s(ok@Uk-W^o!3KFJS`l)0Q*KMka#Bl+ z-9p%sB$%_e&h7q$uF10SEyS*pyl<)amT>Ggu$f6MO59vPcvb? zG1cye6!G90;2E4nFLd+aAZR0IPdmyh%Ydc8(y~e$wY4rEz(NCv@m^F7yuj_aLyUw% zn3scM&(9aMA2Kp#MS3BE;TwvY3Nk%k^E%{X8+o1J0m-F=eHPF1sbe&!5Qg|i>!FGT z0lhGA9Tw%4ec*yMs<&$eF-XAwR|E5ZeGD>XV z|NCqCpF~wkpG;r>VL}lHH+J5xod)|E}aEO1{ z3CHo#(f_{#_zx>_bw5e}_uRVi{VQw8baxQ))#T&8E+FJ9V8)dOlg|fwkXf{ljllLA zt3(e+lrw8(omEg(Qu|-a|LiUE&L+N({u@qOLVqeXi4abjSdlwj(Xl!3klpDHy-In&Y0bnJyFI7TIVDp1;-uiL=_(lFl}m zrjRWdGl4)mDlYsw?$n8^>X15 zuEvU>WmL)}XlQ84MMLP5=6v`!?BV`BX52afx!DD}ujKyM3OPD(Rm~}I1=9Gc_=Noi|VNSlN26zXi71HfT>iyZDX}cEB}1{8g$g_8}m7W@$>m? zPOI=|QFERN-BUy2`Z>Ah1tAuN!P19zy%xpsV!V7mzF*lff|yK(9gX0CqXCZ8 zMp5Q62yM`XF>1p+n-P!3cimb@ZJUrfO8>_?G*t+<#xJpkQA!1NEG8W~Xu1!6w@2UR zQ1!`>M9-_vbe#J2*0_Dk^3uS7^wFtL(~nRuYfN17#v-aJt0V;+P(?_tHO=) z#*&7vweHMⓈ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 z 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 Xq>nmEEhX@uJ{}nfMe!<8qrm?H3bG)6 literal 84121 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 OADXIqD&Ii1A^!(GhS^8} diff --git a/docker-cloud/builds/images/retry-build.png b/docker-cloud/builds/images/retry-build.png new file mode 100644 index 0000000000000000000000000000000000000000..b827f95ed60ff78e93b8e93da6745758b8d32ba1 GIT binary patch literal 95884 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 literal 0 HcmV?d00001 From 4725674a2f26827b0c6cd9d5f09e7f1b53a34fd3 Mon Sep 17 00:00:00 2001 From: Riyaz Faizullabhoy Date: Thu, 17 Nov 2016 14:11:56 -0800 Subject: [PATCH 17/32] Pin notary-server to v0.4.2 Signed-off-by: Riyaz Faizullabhoy --- engine/security/trust/trust_sandbox.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/security/trust/trust_sandbox.md b/engine/security/trust/trust_sandbox.md index 33d7be4ce7..cacb3e2ea4 100644 --- a/engine/security/trust/trust_sandbox.md +++ b/engine/security/trust/trust_sandbox.md @@ -77,7 +77,7 @@ the `trustsandbox` container, the Notary server, and the Registry server. version: "2" services: notaryserver: - image: dockersecurity/notary_autobuilds:server-latest + image: dockersecurity/notary_autobuilds:server-v0.4.2 volumes: - notarycerts:/go/src/github.com/docker/notary/fixtures networks: From 645e5721461fa5e598035d91c6aefecc7ab409cd Mon Sep 17 00:00:00 2001 From: Misty Stanley-Jones Date: Thu, 17 Nov 2016 14:39:59 -0800 Subject: [PATCH 18/32] Add swarm routing mesh topic to TOC Signed-off-by: Misty Stanley-Jones --- _data/toc.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/_data/toc.yaml b/_data/toc.yaml index 17851adc14..d62de81dee 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -205,6 +205,8 @@ toc: title: Apply rolling updates - path: /engine/swarm/swarm-tutorial/drain-node/ title: Drain a node + - path: /engine/swarm/ingress/ + title: Use swarm mode routing mesh - sectiontitle: How swarm mode works section: - path: /engine/swarm/how-swarm-mode-works/nodes/ From 5e83b9659fccffbe78e55bb5d645f4a22cd9af21 Mon Sep 17 00:00:00 2001 From: John Mulhausen Date: Thu, 17 Nov 2016 15:35:37 -0800 Subject: [PATCH 19/32] Switch to touchend/mouseup for mobile compat --- js/menu.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/menu.js b/js/menu.js index 94bf5a5dbb..b381bd04ef 100644 --- a/js/menu.js +++ b/js/menu.js @@ -2,7 +2,7 @@ var tocData; function hookupTOCEvents() { // do after tree render - $('.expand-menu').on('click touchstart', function(elem) { + $('.expand-menu').on('mouseup touchend', function(elem) { // menu = elem.currentTarget.nextElementSibling menu = elem.currentTarget.parentElement if (menu.classList.contains("menu-closed")) { From 1d89236eff8306fdf01b1f0534fa1c78d0c2471d Mon Sep 17 00:00:00 2001 From: LRubin Date: Thu, 17 Nov 2016 15:45:37 -0800 Subject: [PATCH 20/32] remove deprecated section from api docs Signed-off-by: LRubin --- .../source/includes/container.md | 9 ---- .../cloud-api-source/source/includes/node.md | 8 ---- apidocs/docker-cloud/includes/container.html | 22 ---------- apidocs/docker-cloud/includes/node.html | 22 ---------- apidocs/docker-cloud/index.html | 44 ------------------- apidocs/layouts/single.html | 44 ------------------- 6 files changed, 149 deletions(-) diff --git a/apidocs/cloud-api-source/source/includes/container.md b/apidocs/cloud-api-source/source/includes/container.md index 1032b0e5fd..bcf4e51e43 100644 --- a/apidocs/cloud-api-source/source/includes/container.md +++ b/apidocs/cloud-api-source/source/includes/container.md @@ -364,15 +364,6 @@ bridge | Creates a new network stack for the container on the docker bridge. host | Uses the host network stack inside the container. -### Container Last Metric attributes - -Attribute | Description ---------- | ----------- -cpu | CPU percentage usage -memory | Memory usage in bytes -disk | Disk storage usage in bytes - - ### Container Link attributes Attribute | Description diff --git a/apidocs/cloud-api-source/source/includes/node.md b/apidocs/cloud-api-source/source/includes/node.md index 5b47dc1fdf..1abba0af9a 100644 --- a/apidocs/cloud-api-source/source/includes/node.md +++ b/apidocs/cloud-api-source/source/includes/node.md @@ -77,14 +77,6 @@ Upgrading | The node docker daemon is being upgraded. No actions allowed in this Terminating | The node is being terminated in the cloud provider. No actions allowed in this state. Terminated | The node has been terminated and is no longer present in the cloud provider. No actions allowed in this state. -### Node Last Metric attributes - -Attribute | Description ---------- | ----------- -cpu | CPU percentage usage -memory | Memory usage in bytes -disk | Disk storage usage in bytes - ## List all nodes diff --git a/apidocs/docker-cloud/includes/container.html b/apidocs/docker-cloud/includes/container.html index c1ed1ce6b2..1060ed8fb0 100644 --- a/apidocs/docker-cloud/includes/container.html +++ b/apidocs/docker-cloud/includes/container.html @@ -630,28 +630,6 @@ -

Container Last Metric attributes

- - - - - - - - - - - - - - - - - - - -
AttributeDescription
cpuCPU percentage usage
memoryMemory usage in bytes
diskDisk storage usage in bytes
- diff --git a/apidocs/docker-cloud/includes/node.html b/apidocs/docker-cloud/includes/node.html index 1a0d1ca383..ed53d40499 100644 --- a/apidocs/docker-cloud/includes/node.html +++ b/apidocs/docker-cloud/includes/node.html @@ -200,28 +200,6 @@
-

Node Last Metric attributes

- - - - - - - - - - - - - - - - - - - -
AttributeDescription
cpuCPU percentage usage
memoryMemory usage in bytes
diskDisk storage usage in bytes
-

List all nodes

import dockercloud
 
diff --git a/apidocs/docker-cloud/index.html b/apidocs/docker-cloud/index.html
index 8e6414035e..aea6d05b7a 100644
--- a/apidocs/docker-cloud/index.html
+++ b/apidocs/docker-cloud/index.html
@@ -1983,28 +1983,6 @@ docker-cloud tag set -t tag-2 7eaf7fff
 
 
 
-

Node Last Metric attributes

- - - - - - - - - - - - - - - - - - - -
AttributeDescription
cpuCPU percentage usage
memoryMemory usage in bytes
diskDisk storage usage in bytes
-

List all nodes

import dockercloud
 
@@ -5438,28 +5416,6 @@ docker-cloud tag set -t tag-2 7eaf7fff
 
 
 
-

Container Last Metric attributes

- - - - - - - - - - - - - - - - - - - -
AttributeDescription
cpuCPU percentage usage
memoryMemory usage in bytes
diskDisk storage usage in bytes
- diff --git a/apidocs/layouts/single.html b/apidocs/layouts/single.html index 8e6414035e..aea6d05b7a 100644 --- a/apidocs/layouts/single.html +++ b/apidocs/layouts/single.html @@ -1983,28 +1983,6 @@ docker-cloud tag set -t tag-2 7eaf7fff
-

Node Last Metric attributes

- - - - - - - - - - - - - - - - - - - -
AttributeDescription
cpuCPU percentage usage
memoryMemory usage in bytes
diskDisk storage usage in bytes
-

List all nodes

import dockercloud
 
@@ -5438,28 +5416,6 @@ docker-cloud tag set -t tag-2 7eaf7fff
 
 
 
-

Container Last Metric attributes

- - - - - - - - - - - - - - - - - - - -
AttributeDescription
cpuCPU percentage usage
memoryMemory usage in bytes
diskDisk storage usage in bytes
- From e626571c453f931939b05db9f146421f23185bf7 Mon Sep 17 00:00:00 2001 From: Victoria Bialas Date: Wed, 16 Nov 2016 16:28:35 -0800 Subject: [PATCH 21/32] modify docs feedback to route support questions properly and encourage docs specific issues layout and wording changes per review comments incorporated John's review comments Signed-off-by: Victoria Bialas --- _layouts/docs.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_layouts/docs.html b/_layouts/docs.html index d2c8834ce9..e06cc94258 100644 --- a/_layouts/docs.html +++ b/_layouts/docs.html @@ -200,9 +200,9 @@ ng\:form { {% if page.noratings != true %}
chat icon - Feedback? Questions? Suggestions?
- Edit this page, - file a ticket, or rate this page: + Feedback? Suggestions? Can't find something in the docs?
+ Edit this page + Request docs changes Get support
Rate this page: