Selaa lähdekoodia

Merge pull request #9682 from SvenDowideit/scottstamp-stale-links-pr-carry

Scottstamp stale links pr carry
Fred Lifton 10 vuotta sitten
vanhempi
commit
5df189a1b0
40 muutettua tiedostoa jossa 153 lisäystä ja 60 poistoa
  1. 3 0
      Makefile
  2. 5 0
      docs/README.md
  3. 79 0
      docs/docvalidate.py
  4. 1 1
      docs/sources/articles/baseimages.md
  5. 4 4
      docs/sources/articles/basics.md
  6. 1 1
      docs/sources/articles/chef.md
  7. 1 1
      docs/sources/articles/puppet.md
  8. 1 1
      docs/sources/articles/security.md
  9. 1 1
      docs/sources/articles/using_supervisord.md
  10. 1 1
      docs/sources/examples/apt-cacher-ng.md
  11. 1 1
      docs/sources/examples/couchdb_data_volumes.md
  12. 1 1
      docs/sources/examples/nodejs_web_app.md
  13. 1 1
      docs/sources/examples/postgresql_service.md
  14. 1 1
      docs/sources/http-routingtable.md
  15. 4 4
      docs/sources/installation/amazon.md
  16. 1 1
      docs/sources/installation/binaries.md
  17. 3 3
      docs/sources/installation/debian.md
  18. 1 1
      docs/sources/installation/ubuntulinux.md
  19. 1 1
      docs/sources/reference/api/docker_remote_api.md
  20. 2 2
      docs/sources/reference/api/docker_remote_api_v1.10.md
  21. 1 1
      docs/sources/reference/api/docker_remote_api_v1.11.md
  22. 1 1
      docs/sources/reference/api/docker_remote_api_v1.12.md
  23. 1 1
      docs/sources/reference/api/docker_remote_api_v1.13.md
  24. 1 1
      docs/sources/reference/api/docker_remote_api_v1.14.md
  25. 1 1
      docs/sources/reference/api/docker_remote_api_v1.15.md
  26. 1 1
      docs/sources/reference/api/docker_remote_api_v1.16.md
  27. 1 1
      docs/sources/reference/api/docker_remote_api_v1.6.md
  28. 1 1
      docs/sources/reference/api/docker_remote_api_v1.7.md
  29. 1 1
      docs/sources/reference/api/docker_remote_api_v1.8.md
  30. 2 2
      docs/sources/reference/api/docker_remote_api_v1.9.md
  31. 5 5
      docs/sources/reference/builder.md
  32. 4 4
      docs/sources/reference/commandline/cli.md
  33. 4 4
      docs/sources/reference/run.md
  34. 2 2
      docs/sources/terms/image.md
  35. 1 1
      docs/sources/terms/layer.md
  36. 2 2
      docs/sources/userguide/dockerrepos.md
  37. 1 1
      docs/sources/userguide/dockervolumes.md
  38. 2 2
      docs/sources/userguide/level1.md
  39. 2 2
      docs/sources/userguide/level2.md
  40. 6 0
      docs/test.sh

+ 3 - 0
Makefile

@@ -55,6 +55,9 @@ docs-shell: docs-build
 docs-release: docs-build
 docs-release: docs-build
 	$(DOCKER_RUN_DOCS) -e OPTIONS -e BUILD_ROOT "$(DOCKER_DOCS_IMAGE)" ./release.sh
 	$(DOCKER_RUN_DOCS) -e OPTIONS -e BUILD_ROOT "$(DOCKER_DOCS_IMAGE)" ./release.sh
 
 
+docs-test: docs-build
+	$(DOCKER_RUN_DOCS) "$(DOCKER_DOCS_IMAGE)" ./test.sh
+
 test: build
 test: build
 	$(DOCKER_RUN_DOCKER) hack/make.sh binary cross test-unit test-integration test-integration-cli
 	$(DOCKER_RUN_DOCKER) hack/make.sh binary cross test-unit test-integration test-integration-cli
 
 

+ 5 - 0
docs/README.md

@@ -33,6 +33,11 @@ In the root of the `docker` source directory:
 If you have any issues you need to debug, you can use `make docs-shell` and then
 If you have any issues you need to debug, you can use `make docs-shell` and then
 run `mkdocs serve`
 run `mkdocs serve`
 
 
+## Testing the links
+
+You can use `make docs-test` to generate a report of missing links that are referenced in
+the documentation - there should be none.
+
 ## Adding a new document
 ## Adding a new document
 
 
 New document (`.md`) files are added to the documentation builds by adding them
 New document (`.md`) files are added to the documentation builds by adding them

+ 79 - 0
docs/docvalidate.py

@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+
+""" I honestly don't even know how the hell this works, just use it. """
+__author__ = "Scott Stamp <scott@hypermine.com>"
+
+from HTMLParser import HTMLParser
+from urlparse import urljoin
+from sys import setrecursionlimit
+import re
+import requests
+
+setrecursionlimit(10000)
+root = 'http://localhost:8000'
+
+
+class DataHolder:
+
+    def __init__(self, value=None, attr_name='value'):
+        self._attr_name = attr_name
+        self.set(value)
+
+    def __call__(self, value):
+        return self.set(value)
+
+    def set(self, value):
+        setattr(self, self._attr_name, value)
+        return value
+
+    def get(self):
+        return getattr(self, self._attr_name)
+
+
+class Parser(HTMLParser):
+    global root
+
+    ids = set()
+    crawled = set()
+    anchors = {}
+    pages = set()
+    save_match = DataHolder(attr_name='match')
+
+    def __init__(self, origin):
+        self.origin = origin
+        HTMLParser.__init__(self)
+
+    def handle_starttag(self, tag, attrs):
+        attrs = dict(attrs)
+        if 'href' in attrs:
+            href = attrs['href']
+
+            if re.match('^{0}|\/|\#[\S]{{1,}}'.format(root), href):
+                if self.save_match(re.search('.*\#(.*?)$', href)):
+                    if self.origin not in self.anchors:
+                        self.anchors[self.origin] = set()
+                    self.anchors[self.origin].add(
+                        self.save_match.match.groups(1)[0])
+
+                url = urljoin(root, href)
+
+                if url not in self.crawled and not re.match('^\#', href):
+                    self.crawled.add(url)
+                    Parser(url).feed(requests.get(url).content)
+
+        if 'id' in attrs:
+            self.ids.add(attrs['id'])
+	# explicit <a name=""></a> references
+        if 'name' in attrs:
+            self.ids.add(attrs['name'])
+
+
+r = requests.get(root)
+parser = Parser(root)
+parser.feed(r.content)
+for anchor in sorted(parser.anchors):
+    if not re.match('.*/\#.*', anchor):
+        for anchor_name in parser.anchors[anchor]:
+            if anchor_name not in parser.ids:
+                print 'Missing - ({0}): #{1}'.format(
+                    anchor.replace(root, ''), anchor_name)

+ 1 - 1
docs/sources/articles/baseimages.md

@@ -5,7 +5,7 @@ page_keywords: Examples, Usage, base image, docker, documentation, examples
 # Create a Base Image
 # Create a Base Image
 
 
 So you want to create your own [*Base Image*](
 So you want to create your own [*Base Image*](
-/terms/image/#base-image-def)? Great!
+/terms/image/#base-image)? Great!
 
 
 The specific process will depend heavily on the Linux distribution you
 The specific process will depend heavily on the Linux distribution you
 want to package. We have some examples below, and you are encouraged to
 want to package. We have some examples below, and you are encouraged to

+ 4 - 4
docs/sources/articles/basics.md

@@ -17,7 +17,7 @@ If you get `docker: command not found` or something like
 incomplete Docker installation or insufficient privileges to access
 incomplete Docker installation or insufficient privileges to access
 Docker on your machine.
 Docker on your machine.
 
 
-Please refer to [*Installation*](/installation/#installation-list)
+Please refer to [*Installation*](/installation)
 for installation instructions.
 for installation instructions.
 
 
 ## Download a pre-built image
 ## Download a pre-built image
@@ -26,7 +26,7 @@ for installation instructions.
     $ sudo docker pull ubuntu
     $ sudo docker pull ubuntu
 
 
 This will find the `ubuntu` image by name on
 This will find the `ubuntu` image by name on
-[*Docker Hub*](/userguide/dockerrepos/#find-public-images-on-docker-hub)
+[*Docker Hub*](/userguide/dockerrepos/#searching-for-images)
 and download it from [Docker Hub](https://hub.docker.com) to a local
 and download it from [Docker Hub](https://hub.docker.com) to a local
 image cache.
 image cache.
 
 
@@ -174,6 +174,6 @@ will be stored (as a diff). See which images you already have using the
 You now have an image state from which you can create new instances.
 You now have an image state from which you can create new instances.
 
 
 Read more about [*Share Images via
 Read more about [*Share Images via
-Repositories*](/userguide/dockerrepos/#working-with-the-repository) or
+Repositories*](/userguide/dockerrepos) or
 continue to the complete [*Command
 continue to the complete [*Command
-Line*](/reference/commandline/cli/#cli)
+Line*](/reference/commandline/cli)

+ 1 - 1
docs/sources/articles/chef.md

@@ -7,7 +7,7 @@ page_keywords: chef, installation, usage, docker, documentation
 > **Note**:
 > **Note**:
 > Please note this is a community contributed installation path. The only
 > Please note this is a community contributed installation path. The only
 > `official` installation is using the
 > `official` installation is using the
-> [*Ubuntu*](/installation/ubuntulinux/#ubuntu-linux) installation
+> [*Ubuntu*](/installation/ubuntulinux) installation
 > path. This version may sometimes be out of date.
 > path. This version may sometimes be out of date.
 
 
 ## Requirements
 ## Requirements

+ 1 - 1
docs/sources/articles/puppet.md

@@ -6,7 +6,7 @@ page_keywords: puppet, installation, usage, docker, documentation
 
 
 > *Note:* Please note this is a community contributed installation path. The
 > *Note:* Please note this is a community contributed installation path. The
 > only `official` installation is using the
 > only `official` installation is using the
-> [*Ubuntu*](/installation/ubuntulinux/#ubuntu-linux) installation
+> [*Ubuntu*](/installation/ubuntulinux) installation
 > path. This version may sometimes be out of date.
 > path. This version may sometimes be out of date.
 
 
 ## Requirements
 ## Requirements

+ 1 - 1
docs/sources/articles/security.md

@@ -33,7 +33,7 @@ of another container. Of course, if the host system is setup
 accordingly, containers can interact with each other through their
 accordingly, containers can interact with each other through their
 respective network interfaces — just like they can interact with
 respective network interfaces — just like they can interact with
 external hosts. When you specify public ports for your containers or use
 external hosts. When you specify public ports for your containers or use
-[*links*](/userguide/dockerlinks/#working-with-links-names)
+[*links*](/userguide/dockerlinks)
 then IP traffic is allowed between containers. They can ping each other,
 then IP traffic is allowed between containers. They can ping each other,
 send/receive UDP packets, and establish TCP connections, but that can be
 send/receive UDP packets, and establish TCP connections, but that can be
 restricted if necessary. From a network architecture point of view, all
 restricted if necessary. From a network architecture point of view, all

+ 1 - 1
docs/sources/articles/using_supervisord.md

@@ -6,7 +6,7 @@ page_keywords: docker, supervisor, process management
 
 
 > **Note**:
 > **Note**:
 > - **If you don't like sudo** then see [*Giving non-root
 > - **If you don't like sudo** then see [*Giving non-root
->   access*](/installation/binaries/#dockergroup)
+>   access*](/installation/binaries/#giving-non-root-access)
 
 
 Traditionally a Docker container runs a single process when it is
 Traditionally a Docker container runs a single process when it is
 launched, for example an Apache daemon or a SSH server daemon. Often
 launched, for example an Apache daemon or a SSH server daemon. Often

+ 1 - 1
docs/sources/examples/apt-cacher-ng.md

@@ -6,7 +6,7 @@ page_keywords: docker, example, package installation, networking, debian, ubuntu
 
 
 > **Note**: 
 > **Note**: 
 > - **If you don't like sudo** then see [*Giving non-root
 > - **If you don't like sudo** then see [*Giving non-root
->   access*](/installation/binaries/#dockergroup).
+>   access*](/installation/binaries/#giving-non-root-access).
 > - **If you're using OS X or docker via TCP** then you shouldn't use
 > - **If you're using OS X or docker via TCP** then you shouldn't use
 >   sudo.
 >   sudo.
 
 

+ 1 - 1
docs/sources/examples/couchdb_data_volumes.md

@@ -6,7 +6,7 @@ page_keywords: docker, example, package installation, networking, couchdb, data
 
 
 > **Note**: 
 > **Note**: 
 > - **If you don't like sudo** then see [*Giving non-root
 > - **If you don't like sudo** then see [*Giving non-root
->   access*](/installation/binaries/#dockergroup)
+>   access*](/installation/binaries/#giving-non-root-access)
 
 
 Here's an example of using data volumes to share the same data between
 Here's an example of using data volumes to share the same data between
 two CouchDB containers. This could be used for hot upgrades, testing
 two CouchDB containers. This could be used for hot upgrades, testing

+ 1 - 1
docs/sources/examples/nodejs_web_app.md

@@ -6,7 +6,7 @@ page_keywords: docker, example, package installation, node, centos
 
 
 > **Note**: 
 > **Note**: 
 > - **If you don't like sudo** then see [*Giving non-root
 > - **If you don't like sudo** then see [*Giving non-root
->   access*](/installation/binaries/#dockergroup)
+>   access*](/installation/binaries/#giving-non-root-access)
 
 
 The goal of this example is to show you how you can build your own
 The goal of this example is to show you how you can build your own
 Docker images from a parent image using a `Dockerfile`
 Docker images from a parent image using a `Dockerfile`

+ 1 - 1
docs/sources/examples/postgresql_service.md

@@ -6,7 +6,7 @@ page_keywords: docker, example, package installation, postgresql
 
 
 > **Note**: 
 > **Note**: 
 > - **If you don't like sudo** then see [*Giving non-root
 > - **If you don't like sudo** then see [*Giving non-root
->   access*](/installation/binaries/#dockergroup)
+>   access*](/installation/binaries/#giving-non-root-access)
 
 
 ## Installing PostgreSQL on Docker
 ## Installing PostgreSQL on Docker
 
 

+ 1 - 1
docs/sources/http-routingtable.md

@@ -42,7 +42,7 @@
      [`POST /containers/(id)/stop`](../reference/api/docker_remote_api_v1.9/#post--containers-(id)-stop)                                                           **
      [`POST /containers/(id)/stop`](../reference/api/docker_remote_api_v1.9/#post--containers-(id)-stop)                                                           **
      [`GET /containers/(id)/top`](../reference/api/docker_remote_api_v1.9/#get--containers-(id)-top)                                                               **
      [`GET /containers/(id)/top`](../reference/api/docker_remote_api_v1.9/#get--containers-(id)-top)                                                               **
      [`POST /containers/(id)/wait`](../reference/api/docker_remote_api_v1.9/#post--containers-(id)-wait)                                                           **
      [`POST /containers/(id)/wait`](../reference/api/docker_remote_api_v1.9/#post--containers-(id)-wait)                                                           **
-     [`POST /containers/create`](../reference/api/docker_remote_api_v1.9/#post--containers-create)                                                                 **
+     [`POST /containers/create`](/reference/api/docker_remote_api_v1.9/#create-a-container)                                                                 **
      [`GET /containers/json`](../reference/api/docker_remote_api_v1.9/#get--containers-json)                                                                       **
      [`GET /containers/json`](../reference/api/docker_remote_api_v1.9/#get--containers-json)                                                                       **
      [`POST /containers/(id)/resize`](../reference/api/docker_remote_api_v1.9/#get--containers-resize)                                                                  **
      [`POST /containers/(id)/resize`](../reference/api/docker_remote_api_v1.9/#get--containers-resize)                                                                  **
                                                                                                                                                                           
                                                                                                                                                                           

+ 4 - 4
docs/sources/installation/amazon.md

@@ -40,10 +40,10 @@ over to the [User Guide](/userguide).
 ## Standard Ubuntu Installation
 ## Standard Ubuntu Installation
 
 
 If you want a more hands-on installation, then you can follow the
 If you want a more hands-on installation, then you can follow the
-[*Ubuntu*](../ubuntulinux/#ubuntu-linux) instructions installing Docker
-on any EC2 instance running Ubuntu. Just follow Step 1 from [*Amazon
-QuickStart*](#amazon-quickstart) to pick an image (or use one of your
+[*Ubuntu*](/installation/ubuntulinux) instructions installing Docker
+on any EC2 instance running Ubuntu. Just follow Step 1 from the Amazon
+QuickStart above to pick an image (or use one of your
 own) and skip the step with the *User Data*. Then continue with the
 own) and skip the step with the *User Data*. Then continue with the
-[*Ubuntu*](../ubuntulinux/#ubuntu-linux) instructions.
+[*Ubuntu*](/installation/ubuntulinux) instructions.
 
 
 Continue with the [User Guide](/userguide/).
 Continue with the [User Guide](/userguide/).

+ 1 - 1
docs/sources/installation/binaries.md

@@ -77,7 +77,7 @@ need to add `sudo` to all the client commands.
 > **Warning**: 
 > **Warning**: 
 > The *docker* group (or the group specified with `-G`) is root-equivalent;
 > The *docker* group (or the group specified with `-G`) is root-equivalent;
 > see [*Docker Daemon Attack Surface*](
 > see [*Docker Daemon Attack Surface*](
-> /articles/security/#dockersecurity-daemon) details.
+> /articles/security/#docker-daemon-attack-surface) details.
 
 
 ## Upgrades
 ## Upgrades
 
 

+ 3 - 3
docs/sources/installation/debian.md

@@ -6,8 +6,8 @@ page_keywords: Docker, Docker documentation, installation, debian
 
 
 Docker is supported on the following versions of Debian:
 Docker is supported on the following versions of Debian:
 
 
- - [*Debian 8.0 Jessie (64-bit)*](#debian-jessie-8-64-bit)
- - [*Debian 7.5 Wheezy (64-bit)*](#debian-wheezy-7-64-bit)
+ - [*Debian 8.0 Jessie (64-bit)*](#debian-jessie-80-64-bit)
+ - [*Debian 7.5 Wheezy (64-bit)*](#debian-wheezystable-7x-64-bit)
 
 
 ## Debian Jessie 8.0 (64-bit)
 ## Debian Jessie 8.0 (64-bit)
 
 
@@ -81,7 +81,7 @@ use the `-G` flag to specify an alternative group.
 > **Warning**: 
 > **Warning**: 
 > The `docker` group (or the group specified with the `-G` flag) is
 > The `docker` group (or the group specified with the `-G` flag) is
 > `root`-equivalent; see [*Docker Daemon Attack Surface*](
 > `root`-equivalent; see [*Docker Daemon Attack Surface*](
-> /articles/security/#dockersecurity-daemon) details.
+> /articles/security/#docker-daemon-attack-surface) details.
 
 
 **Example:**
 **Example:**
 
 

+ 1 - 1
docs/sources/installation/ubuntulinux.md

@@ -240,7 +240,7 @@ alternative group.
 > **Warning**: 
 > **Warning**: 
 > The `docker` group (or the group specified with the `-G` flag) is
 > The `docker` group (or the group specified with the `-G` flag) is
 > `root`-equivalent; see [*Docker Daemon Attack Surface*](
 > `root`-equivalent; see [*Docker Daemon Attack Surface*](
-> /articles/security/#dockersecurity-daemon) for details.
+> /articles/security/#docker-daemon-attack-surface) for details.
 
 
 **Example:**
 **Example:**
 
 

+ 1 - 1
docs/sources/reference/api/docker_remote_api.md

@@ -366,7 +366,7 @@ output is now generated in the client, using the
 You can now split stderr from stdout. This is done by
 You can now split stderr from stdout. This is done by
 prefixing a header to each transmission. See
 prefixing a header to each transmission. See
 [`POST /containers/(id)/attach`](
 [`POST /containers/(id)/attach`](
-/reference/api/docker_remote_api_v1.9/#post--containers-(id)-attach "POST /containers/(id)/attach").
+/reference/api/docker_remote_api_v1.9/#attach-to-a-container "POST /containers/(id)/attach").
 The WebSocket attach is unchanged. Note that attach calls on the
 The WebSocket attach is unchanged. Note that attach calls on the
 previous API version didn't change. Stdout and stderr are merged.
 previous API version didn't change. Stdout and stderr are merged.
 
 

+ 2 - 2
docs/sources/reference/api/docker_remote_api_v1.10.md

@@ -499,7 +499,7 @@ Status Codes:
 
 
     When using the TTY setting is enabled in
     When using the TTY setting is enabled in
     [`POST /containers/create`
     [`POST /containers/create`
-](../docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
+](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
     the stream is the raw data from the process PTY and client's stdin.
     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
     When the TTY is disabled, then the stream is multiplexed to separate
     stdout and stderr.
     stdout and stderr.
@@ -998,7 +998,7 @@ Build an image from Dockerfile via stdin
     The archive must include a file called `Dockerfile`
     The archive must include a file called `Dockerfile`
  at its root. It may include any number of other files,
  at its root. It may include any number of other files,
     which will be accessible in the build context (See the [*ADD build
     which will be accessible in the build context (See the [*ADD build
-    command*](/reference/builder/#dockerbuilder)).
+    command*](/reference/builder/#add)).
 
 
 Query Parameters:
 Query Parameters:
 
 

+ 1 - 1
docs/sources/reference/api/docker_remote_api_v1.11.md

@@ -535,7 +535,7 @@ Status Codes:
 
 
     When using the TTY setting is enabled in
     When using the TTY setting is enabled in
     [`POST /containers/create`
     [`POST /containers/create`
-    ](../docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
+    ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
     the stream is the raw data from the process PTY and client's stdin.
     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
     When the TTY is disabled, then the stream is multiplexed to separate
     stdout and stderr.
     stdout and stderr.

+ 1 - 1
docs/sources/reference/api/docker_remote_api_v1.12.md

@@ -583,7 +583,7 @@ Status Codes:
 
 
     When using the TTY setting is enabled in
     When using the TTY setting is enabled in
     [`POST /containers/create`
     [`POST /containers/create`
-    ](../docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
+    ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
     the stream is the raw data from the process PTY and client's stdin.
     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
     When the TTY is disabled, then the stream is multiplexed to separate
     stdout and stderr.
     stdout and stderr.

+ 1 - 1
docs/sources/reference/api/docker_remote_api_v1.13.md

@@ -576,7 +576,7 @@ Status Codes:
 
 
     When using the TTY setting is enabled in
     When using the TTY setting is enabled in
     [`POST /containers/create`
     [`POST /containers/create`
-    ](../docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
+    ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
     the stream is the raw data from the process PTY and client's stdin.
     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
     When the TTY is disabled, then the stream is multiplexed to separate
     stdout and stderr.
     stdout and stderr.

+ 1 - 1
docs/sources/reference/api/docker_remote_api_v1.14.md

@@ -584,7 +584,7 @@ Status Codes:
 
 
     When using the TTY setting is enabled in
     When using the TTY setting is enabled in
     [`POST /containers/create`
     [`POST /containers/create`
-    ](../docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
+    ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
     the stream is the raw data from the process PTY and client's stdin.
     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
     When the TTY is disabled, then the stream is multiplexed to separate
     stdout and stderr.
     stdout and stderr.

+ 1 - 1
docs/sources/reference/api/docker_remote_api_v1.15.md

@@ -724,7 +724,7 @@ Status Codes:
 
 
     When using the TTY setting is enabled in
     When using the TTY setting is enabled in
     [`POST /containers/create`
     [`POST /containers/create`
-    ](../docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
+    ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
     the stream is the raw data from the process PTY and client's stdin.
     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
     When the TTY is disabled, then the stream is multiplexed to separate
     stdout and stderr.
     stdout and stderr.

+ 1 - 1
docs/sources/reference/api/docker_remote_api_v1.16.md

@@ -678,7 +678,7 @@ Status Codes:
 
 
     When using the TTY setting is enabled in
     When using the TTY setting is enabled in
     [`POST /containers/create`
     [`POST /containers/create`
-    ](../docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
+    ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
     the stream is the raw data from the process PTY and client's stdin.
     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
     When the TTY is disabled, then the stream is multiplexed to separate
     stdout and stderr.
     stdout and stderr.

+ 1 - 1
docs/sources/reference/api/docker_remote_api_v1.6.md

@@ -525,7 +525,7 @@ Status Codes:
 
 
     When using the TTY setting is enabled in
     When using the TTY setting is enabled in
     [`POST /containers/create`
     [`POST /containers/create`
-    ](/api/docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
+    ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
     the stream is the raw data from the process PTY and client's stdin.
     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
     When the TTY is disabled, then the stream is multiplexed to separate
     stdout and stderr.
     stdout and stderr.

+ 1 - 1
docs/sources/reference/api/docker_remote_api_v1.7.md

@@ -470,7 +470,7 @@ Status Codes:
 
 
     When using the TTY setting is enabled in
     When using the TTY setting is enabled in
     [`POST /containers/create`
     [`POST /containers/create`
-    ](/api/docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
+    ](/reference/api/docker_remote_api_v1.7/#create-a-container),
     the stream is the raw data from the process PTY and client's stdin.
     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
     When the TTY is disabled, then the stream is multiplexed to separate
     stdout and stderr.
     stdout and stderr.

+ 1 - 1
docs/sources/reference/api/docker_remote_api_v1.8.md

@@ -518,7 +518,7 @@ Status Codes:
 
 
     When using the TTY setting is enabled in
     When using the TTY setting is enabled in
     [`POST /containers/create`
     [`POST /containers/create`
-    ](/api/docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
+    ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
     the stream is the raw data from the process PTY and client's stdin.
     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
     When the TTY is disabled, then the stream is multiplexed to separate
     stdout and stderr.
     stdout and stderr.

+ 2 - 2
docs/sources/reference/api/docker_remote_api_v1.9.md

@@ -522,7 +522,7 @@ Status Codes:
     **Stream details**:
     **Stream details**:
 
 
     When using the TTY setting is enabled in
     When using the TTY setting is enabled in
-    [`POST /containers/create`](#post--containers-create), the
+    [`POST /containers/create`](#create-a-container), the
     stream is the raw data from the process PTY and client's stdin. When
     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
     the TTY is disabled, then the stream is multiplexed to separate
     stdout and stderr.
     stdout and stderr.
@@ -1004,7 +1004,7 @@ Build an image from Dockerfile using a POST body.
     The archive must include a file called `Dockerfile`
     The archive must include a file called `Dockerfile`
  at its root. It may include any number of other files,
  at its root. It may include any number of other files,
     which will be accessible in the build context (See the [*ADD build
     which will be accessible in the build context (See the [*ADD build
-    command*](/reference/builder/#dockerbuilder)).
+    command*](/reference/builder/#add)).
 
 
 Query Parameters:
 Query Parameters:
 
 

+ 5 - 5
docs/sources/reference/builder.md

@@ -79,7 +79,7 @@ guide](/articles/dockerfile_best-practices/#build-cache) for more information):
     Successfully built 1a5ffc17324d
     Successfully built 1a5ffc17324d
 
 
 When you're done with your build, you're ready to look into [*Pushing a
 When you're done with your build, you're ready to look into [*Pushing a
-repository to its registry*]( /userguide/dockerrepos/#image-push).
+repository to its registry*]( /userguide/dockerrepos/#contributing-to-docker-hub).
 
 
 ## Format
 ## Format
 
 
@@ -93,7 +93,7 @@ be UPPERCASE in order to distinguish them from arguments more easily.
 
 
 Docker runs the instructions in a `Dockerfile` in order. **The
 Docker runs the instructions in a `Dockerfile` in order. **The
 first instruction must be \`FROM\`** in order to specify the [*Base
 first instruction must be \`FROM\`** in order to specify the [*Base
-Image*](/terms/image/#base-image-def) from which you are building.
+Image*](/terms/image/#base-image) from which you are building.
 
 
 Docker will treat lines that *begin* with `#` as a
 Docker will treat lines that *begin* with `#` as a
 comment. A `#` marker anywhere else in the line will
 comment. A `#` marker anywhere else in the line will
@@ -186,11 +186,11 @@ Or
 
 
     FROM <image>:<tag>
     FROM <image>:<tag>
 
 
-The `FROM` instruction sets the [*Base Image*](/terms/image/#base-image-def)
+The `FROM` instruction sets the [*Base Image*](/terms/image/#base-image)
 for subsequent instructions. As such, a valid `Dockerfile` must have `FROM` as
 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
 its first instruction. The image can be any valid image – it is especially easy
 to start by **pulling an image** from the [*Public Repositories*](
 to start by **pulling an image** from the [*Public Repositories*](
-/userguide/dockerrepos/#using-public-repositories).
+/userguide/dockerrepos).
 
 
 `FROM` must be the first non-comment instruction in the `Dockerfile`.
 `FROM` must be the first non-comment instruction in the `Dockerfile`.
 
 
@@ -763,7 +763,7 @@ and mark 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
 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
 string with multiple arguments, such as `VOLUME /var/log` or `VOLUME /var/log
 /var/db`.  For more information/examples and mounting instructions via the
 /var/db`.  For more information/examples and mounting instructions via the
-Docker client, refer to [*Share Directories via Volumes*](/userguide/dockervolumes/#volume-def)
+Docker client, refer to [*Share Directories via Volumes*](/userguide/dockervolumes/#volume)
 documentation.
 documentation.
 
 
 > **Note**:
 > **Note**:

+ 4 - 4
docs/sources/reference/commandline/cli.md

@@ -459,7 +459,7 @@ Use this command to build Docker images from a Dockerfile and a
 
 
 The files at `PATH` or `URL` are called the "context" of the build. The
 The files at `PATH` or `URL` are called the "context" of the build. The
 build process may refer to any of the files in the context, for example
 build process may refer to any of the files in the context, for example
-when using an [*ADD*](/reference/builder/#dockerfile-add) instruction.
+when using an [*ADD*](/reference/builder/#add) instruction.
 When a single Dockerfile is given as `URL` or is piped through `STDIN`
 When a single Dockerfile is given as `URL` or is piped through `STDIN`
 (`docker build - < Dockerfile`), then no context is set.
 (`docker build - < Dockerfile`), then no context is set.
 
 
@@ -539,7 +539,7 @@ machine and that no parsing of the Dockerfile
 happens at the client side (where you're running
 happens at the client side (where you're running
 `docker build`). That means that *all* the files at
 `docker build`). That means that *all* the files at
 `PATH` get sent, not just the ones listed to
 `PATH` get sent, not just the ones listed to
-[*ADD*](/reference/builder/#dockerfile-add) in the Dockerfile.
+[*ADD*](/reference/builder/#add) in the Dockerfile.
 
 
 The transfer of context from the local machine to the Docker daemon is
 The transfer of context from the local machine to the Docker daemon is
 what the `docker` client means when you see the
 what the `docker` client means when you see the
@@ -1817,7 +1817,7 @@ Search [Docker Hub](https://hub.docker.com) for images
       -s, --stars=0        Only displays with at least x stars
       -s, --stars=0        Only displays with at least x stars
 
 
 See [*Find Public Images on Docker Hub*](
 See [*Find Public Images on Docker Hub*](
-/userguide/dockerrepos/#find-public-images-on-docker-hub) for
+/userguide/dockerrepos/#searching-for-images) for
 more details on finding shared images from the command line.
 more details on finding shared images from the command line.
 
 
 ## start
 ## start
@@ -1853,7 +1853,7 @@ grace period, `SIGKILL`.
 
 
 You can group your images together using names and tags, and then upload
 You can group your images together using names and tags, and then upload
 them to [*Share Images via Repositories*](
 them to [*Share Images via Repositories*](
-/userguide/dockerrepos/#working-with-the-repository).
+/userguide/dockerrepos/#contributing-to-docker-hub).
 
 
 ## top
 ## top
 
 

+ 4 - 4
docs/sources/reference/run.md

@@ -7,7 +7,7 @@ page_keywords: docker, run, configure, runtime
 **Docker runs processes in isolated containers**. When an operator
 **Docker runs processes in isolated containers**. When an operator
 executes `docker run`, she starts a process with its own file system,
 executes `docker run`, she starts a process with its own file system,
 its own networking, and its own isolated process tree.  The
 its own networking, and its own isolated process tree.  The
-[*Image*](/terms/image/#image-def) which starts the process may define
+[*Image*](/terms/image/#image) which starts the process may define
 defaults related to the binary to run, the networking to expose, and
 defaults related to the binary to run, the networking to expose, and
 more, but `docker run` gives final control to the operator who starts
 more, but `docker run` gives final control to the operator who starts
 the container from the image. That's the main reason
 the container from the image. That's the main reason
@@ -114,7 +114,7 @@ The UUID identifiers come from the Docker daemon, and if you do not
 assign a name to the container with `--name` then the daemon will also
 assign a name to the container with `--name` then the daemon will also
 generate a random string name too. The name can become a handy way to
 generate a random string name too. The name can become a handy way to
 add meaning to a container since you can use this name when defining
 add meaning to a container since you can use this name when defining
-[*links*](/userguide/dockerlinks/#working-with-links-names) (or any
+[*links*](/userguide/dockerlinks) (or any
 other place you need to identify a container). This works for both
 other place you need to identify a container). This works for both
 background and foreground Docker containers.
 background and foreground Docker containers.
 
 
@@ -420,7 +420,7 @@ familiar with using LXC directly.
 
 
 ## Overriding Dockerfile image defaults
 ## Overriding Dockerfile image defaults
 
 
-When a developer builds an image from a [*Dockerfile*](/reference/builder/#dockerbuilder)
+When a developer builds an image from a [*Dockerfile*](/reference/builder)
 or when she commits it, the developer can set a number of default parameters
 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.
 that take effect when the image starts up as a container.
 
 
@@ -634,7 +634,7 @@ container's `/etc/hosts` entry will be automatically updated.
 
 
 The volumes commands are complex enough to have their own documentation
 The volumes commands are complex enough to have their own documentation
 in section [*Managing data in 
 in section [*Managing data in 
-containers*](/userguide/dockervolumes/#volume-def). A developer can define
+containers*](/userguide/dockervolumes). A developer can define
 one or more `VOLUME`'s associated with an image, but only the operator
 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
 can give access from one container to another (or from a container to a
 volume mounted on the host).
 volume mounted on the host).

+ 2 - 2
docs/sources/terms/image.md

@@ -8,10 +8,10 @@ page_keywords: containers, lxc, concepts, explanation, image, container
 
 
 ![](/terms/images/docker-filesystems-debian.png)
 ![](/terms/images/docker-filesystems-debian.png)
 
 
-In Docker terminology, a read-only [*Layer*](/terms/layer/#layer-def) is
+In Docker terminology, a read-only [*Layer*](/terms/layer/#layer) is
 called an **image**. An image never changes.
 called an **image**. An image never changes.
 
 
-Since Docker uses a [*Union File System*](/terms/layer/#ufs-def), the
+Since Docker uses a [*Union File System*](/terms/layer/#union-file-system), the
 processes think the whole file system is mounted read-write. But all the
 processes think the whole file system is mounted read-write. But all the
 changes go to the top-most writeable layer, and underneath, the original
 changes go to the top-most writeable layer, and underneath, the original
 file in the read-only image is unchanged. Since images don't change,
 file in the read-only image is unchanged. Since images don't change,

+ 1 - 1
docs/sources/terms/layer.md

@@ -7,7 +7,7 @@ page_keywords: containers, lxc, concepts, explanation, image, container
 ## Introduction
 ## Introduction
 
 
 In a traditional Linux boot, the kernel first mounts the root [*File
 In a traditional Linux boot, the kernel first mounts the root [*File
-System*](/terms/filesystem/#filesystem-def) as read-only, checks its
+System*](/terms/filesystem) as read-only, checks its
 integrity, and then switches the whole rootfs volume to read-write mode.
 integrity, and then switches the whole rootfs volume to read-write mode.
 
 
 ## Layer
 ## Layer

+ 2 - 2
docs/sources/userguide/dockerrepos.md

@@ -36,8 +36,8 @@ e-mail address. It will then automatically log you in. You can now commit and
 push your own images up to your repos on Docker Hub.
 push your own images up to your repos on Docker Hub.
 
 
 > **Note:**
 > **Note:**
-> Your authentication credentials will be stored in the [`.dockercfg`
-> authentication file](#authentication-file) in your home directory.
+> Your authentication credentials will be stored in the `.dockercfg`
+> authentication file in your home directory.
 
 
 ## Searching for images
 ## Searching for images
 
 

+ 1 - 1
docs/sources/userguide/dockervolumes.md

@@ -21,7 +21,7 @@ Docker.
 
 
 A *data volume* is a specially-designated directory within one or more
 A *data volume* is a specially-designated directory within one or more
 containers that bypasses the [*Union File
 containers that bypasses the [*Union File
-System*](/terms/layer/#ufs-def) to provide several useful features for
+System*](/terms/layer/#union-file-system) to provide several useful features for
 persistent or shared data:
 persistent or shared data:
 
 
 - Data volumes can be shared and reused between containers
 - Data volumes can be shared and reused between containers

+ 2 - 2
docs/sources/userguide/level1.md

@@ -29,7 +29,7 @@ page_keywords: documentation, docs, the docker guide, docker guide, docker, dock
 	<p>
 	<p>
 	<div class="alert alert-success" id="all_good" style="display:none;">Congratulations, you made no mistake!<br />
 	<div class="alert alert-success" id="all_good" style="display:none;">Congratulations, you made no mistake!<br />
 	Tell the world <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.docker.io/learn/dockerfile/level1/" data-text="I just successfully answered questions of the #Dockerfile tutorial Level 1. What's your score?" data-via="docker" >Tweet</a><br />
 	Tell the world <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.docker.io/learn/dockerfile/level1/" data-text="I just successfully answered questions of the #Dockerfile tutorial Level 1. What's your score?" data-via="docker" >Tweet</a><br />
-	And try the next challenge: <a href="#fill_the_dockerfile">Fill the Dockerfile</a>
+	And try the next challenge: <a href="#fill-the-dockerfile">Fill the Dockerfile</a>
 	</div>
 	</div>
 	<div class="alert alert-error" id="no_good" style="display:none;">Your Dockerfile skills are not yet perfect, try to take the time to read this tutorial again.</div>
 	<div class="alert alert-error" id="no_good" style="display:none;">Your Dockerfile skills are not yet perfect, try to take the time to read this tutorial again.</div>
 	<div class="alert alert-block" id="some_good" style="display:none;">You're almost there! Read carefully the sections corresponding to your errors, and take the test again!</div>
 	<div class="alert alert-block" id="some_good" style="display:none;">You're almost there! Read carefully the sections corresponding to your errors, and take the test again!</div>
@@ -69,4 +69,4 @@ Tell the world! <a href="https://twitter.com/share" class="twitter-share-button"
 which user to use, and how expose a particular port.</p>
 which user to use, and how expose a particular port.</p>
 
 
 <a title="back" class="btn btn-primary back" href="/userguide/dockerimages/#creating-our-own-images">Back</a>
 <a title="back" class="btn btn-primary back" href="/userguide/dockerimages/#creating-our-own-images">Back</a>
-<a title="next level" class="btn btn-primary" href="/userguide/level2">Go to the next level</a>
+<a title="next level" class="btn btn-primary" href="/userguide/level2">Go to the next level</a>

+ 2 - 2
docs/sources/userguide/level2.md

@@ -39,7 +39,7 @@ What is the Dockerfile instruction to specify the base image?<br>
 	
 	
 	<div class="alert alert-success" id="all_good" style="display:none;">Congratulations, you made no mistake!<br />
 	<div class="alert alert-success" id="all_good" style="display:none;">Congratulations, you made no mistake!<br />
 	Tell the world <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.docker.io/learn/dockerfile/level1/" data-text="I just successfully answered questions of the #Dockerfile tutorial Level 1. What's your score?" data-via="docker" >Tweet</a><br />
 	Tell the world <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.docker.io/learn/dockerfile/level1/" data-text="I just successfully answered questions of the #Dockerfile tutorial Level 1. What's your score?" data-via="docker" >Tweet</a><br />
-	And try the next challenge: <a href="#fill_the_dockerfile">Fill the Dockerfile</a>
+	And try the next challenge: <a href="#fill-the-dockerfile">Fill the Dockerfile</a>
 	</div>
 	</div>
 	<div class="alert alert-error" id="no_good" style="display:none;">Your Dockerfile skills are not yet perfect, try to take the time to read this tutorial again.</div>
 	<div class="alert alert-error" id="no_good" style="display:none;">Your Dockerfile skills are not yet perfect, try to take the time to read this tutorial again.</div>
 	<div class="alert alert-block" id="some_good" style="display:none;">You're almost there! Read carefully the sections corresponding to your errors, and take the test again!</div>
 	<div class="alert alert-block" id="some_good" style="display:none;">You're almost there! Read carefully the sections corresponding to your errors, and take the test again!</div>
@@ -93,4 +93,4 @@ Thanks for going through our tutorial! We will be posting Level 3 in the future.
 
 
 To improve your Dockerfile writing skills even further, visit the <a href="https://docs.docker.com/articles/dockerfile_best-practices/">Dockerfile best practices page</a>.
 To improve your Dockerfile writing skills even further, visit the <a href="https://docs.docker.com/articles/dockerfile_best-practices/">Dockerfile best practices page</a>.
 
 
-<a title="creating our own images" class="btn btn-primary" href="/userguide/dockerimages/#creating-our-own-images">Back to the Docs!</a>
+<a title="creating our own images" class="btn btn-primary" href="/userguide/dockerimages/#creating-our-own-images">Back to the Docs!</a>

+ 6 - 0
docs/test.sh

@@ -0,0 +1,6 @@
+#!/bin/sh
+
+mkdocs serve &
+echo "Waiting for 5 seconds to allow mkdocs server to be ready"
+sleep 5
+./docvalidate.py