Ver Fonte

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

Scottstamp stale links pr carry
Fred Lifton há 10 anos atrás
pai
commit
5df189a1b0
40 ficheiros alterados com 153 adições e 60 exclusões
  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
 	$(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
 	$(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
 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
 
 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
 
 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
 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
 Docker on your machine.
 
-Please refer to [*Installation*](/installation/#installation-list)
+Please refer to [*Installation*](/installation)
 for installation instructions.
 
 ## Download a pre-built image
@@ -26,7 +26,7 @@ for installation instructions.
     $ sudo docker pull ubuntu
 
 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
 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.
 
 Read more about [*Share Images via
-Repositories*](/userguide/dockerrepos/#working-with-the-repository) or
+Repositories*](/userguide/dockerrepos) or
 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**:
 > Please note this is a community contributed installation path. 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.
 
 ## 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
 > 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.
 
 ## 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
 respective network interfaces — just like they can interact with
 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,
 send/receive UDP packets, and establish TCP connections, but that can be
 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**:
 > - **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
 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**: 
 > - **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
 >   sudo.
 

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

@@ -6,7 +6,7 @@ page_keywords: docker, example, package installation, networking, couchdb, data
 
 > **Note**: 
 > - **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
 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**: 
 > - **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
 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**: 
 > - **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
 

+ 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)                                                           **
      [`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/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)                                                                       **
      [`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
 
 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
-[*Ubuntu*](../ubuntulinux/#ubuntu-linux) instructions.
+[*Ubuntu*](/installation/ubuntulinux) instructions.
 
 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**: 
 > The *docker* group (or the group specified with `-G`) is root-equivalent;
 > see [*Docker Daemon Attack Surface*](
-> /articles/security/#dockersecurity-daemon) details.
+> /articles/security/#docker-daemon-attack-surface) details.
 
 ## 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:
 
- - [*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)
 
@@ -81,7 +81,7 @@ use the `-G` flag to specify an alternative group.
 > **Warning**: 
 > The `docker` group (or the group specified with the `-G` flag) is
 > `root`-equivalent; see [*Docker Daemon Attack Surface*](
-> /articles/security/#dockersecurity-daemon) details.
+> /articles/security/#docker-daemon-attack-surface) details.
 
 **Example:**
 

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

@@ -240,7 +240,7 @@ alternative group.
 > **Warning**: 
 > The `docker` group (or the group specified with the `-G` flag) is
 > `root`-equivalent; see [*Docker Daemon Attack Surface*](
-> /articles/security/#dockersecurity-daemon) for details.
+> /articles/security/#docker-daemon-attack-surface) for details.
 
 **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
 prefixing a header to each transmission. See
 [`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
 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
     [`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.
     When the TTY is disabled, then the stream is multiplexed to separate
     stdout and stderr.
@@ -998,7 +998,7 @@ Build an image from Dockerfile via stdin
     The archive must include a file called `Dockerfile`
  at its root. It may include any number of other files,
     which will be accessible in the build context (See the [*ADD build
-    command*](/reference/builder/#dockerbuilder)).
+    command*](/reference/builder/#add)).
 
 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
     [`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.
     When the TTY is disabled, then the stream is multiplexed to separate
     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
     [`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.
     When the TTY is disabled, then the stream is multiplexed to separate
     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
     [`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.
     When the TTY is disabled, then the stream is multiplexed to separate
     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
     [`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.
     When the TTY is disabled, then the stream is multiplexed to separate
     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
     [`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.
     When the TTY is disabled, then the stream is multiplexed to separate
     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
     [`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.
     When the TTY is disabled, then the stream is multiplexed to separate
     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
     [`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.
     When the TTY is disabled, then the stream is multiplexed to separate
     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
     [`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.
     When the TTY is disabled, then the stream is multiplexed to separate
     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
     [`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.
     When the TTY is disabled, then the stream is multiplexed to separate
     stdout and stderr.

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

@@ -522,7 +522,7 @@ Status Codes:
     **Stream details**:
 
     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
     the TTY is disabled, then the stream is multiplexed to separate
     stdout and stderr.
@@ -1004,7 +1004,7 @@ Build an image from Dockerfile using a POST body.
     The archive must include a file called `Dockerfile`
  at its root. It may include any number of other files,
     which will be accessible in the build context (See the [*ADD build
-    command*](/reference/builder/#dockerbuilder)).
+    command*](/reference/builder/#add)).
 
 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
 
 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
 
@@ -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
 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
 comment. A `#` marker anywhere else in the line will
@@ -186,11 +186,11 @@ Or
 
     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
 its first instruction. The image can be any valid image – it is especially easy
 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`.
 
@@ -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
 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*](/userguide/dockervolumes/#volume-def)
+Docker client, refer to [*Share Directories via Volumes*](/userguide/dockervolumes/#volume)
 documentation.
 
 > **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
 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`
 (`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
 `docker build`). That means that *all* the files at
 `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
 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
 
 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.
 
 ## start
@@ -1853,7 +1853,7 @@ grace period, `SIGKILL`.
 
 You can group your images together using names and tags, and then upload
 them to [*Share Images via Repositories*](
-/userguide/dockerrepos/#working-with-the-repository).
+/userguide/dockerrepos/#contributing-to-docker-hub).
 
 ## 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
 executes `docker run`, she starts a process with its own file system,
 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
 more, but `docker run` gives final control to the operator who starts
 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
 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
-[*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
 background and foreground Docker containers.
 
@@ -420,7 +420,7 @@ familiar with using LXC directly.
 
 ## 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
 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
 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
 can give access from one container to another (or from a container to a
 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)
 
-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.
 
-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
 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,

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

@@ -7,7 +7,7 @@ page_keywords: containers, lxc, concepts, explanation, image, container
 ## Introduction
 
 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.
 
 ## 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.
 
 > **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
 

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

@@ -21,7 +21,7 @@ Docker.
 
 A *data volume* is a specially-designated directory within one or more
 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:
 
 - 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>
 	<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 />
-	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 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>
@@ -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>
 
 <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 />
 	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 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>
@@ -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>.
 
-<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