Browse code

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

Scottstamp stale links pr carry

Fred Lifton authored on 2014/12/18 09:03:55
Showing 40 changed files
... ...
@@ -55,6 +55,9 @@ docs-shell: docs-build
55 55
 docs-release: docs-build
56 56
 	$(DOCKER_RUN_DOCS) -e OPTIONS -e BUILD_ROOT "$(DOCKER_DOCS_IMAGE)" ./release.sh
57 57
 
58
+docs-test: docs-build
59
+	$(DOCKER_RUN_DOCS) "$(DOCKER_DOCS_IMAGE)" ./test.sh
60
+
58 61
 test: build
59 62
 	$(DOCKER_RUN_DOCKER) hack/make.sh binary cross test-unit test-integration test-integration-cli
60 63
 
... ...
@@ -33,6 +33,11 @@ In the root of the `docker` source directory:
33 33
 If you have any issues you need to debug, you can use `make docs-shell` and then
34 34
 run `mkdocs serve`
35 35
 
36
+## Testing the links
37
+
38
+You can use `make docs-test` to generate a report of missing links that are referenced in
39
+the documentation - there should be none.
40
+
36 41
 ## Adding a new document
37 42
 
38 43
 New document (`.md`) files are added to the documentation builds by adding them
39 44
new file mode 100755
... ...
@@ -0,0 +1,79 @@
0
+#!/usr/bin/env python
1
+
2
+""" I honestly don't even know how the hell this works, just use it. """
3
+__author__ = "Scott Stamp <scott@hypermine.com>"
4
+
5
+from HTMLParser import HTMLParser
6
+from urlparse import urljoin
7
+from sys import setrecursionlimit
8
+import re
9
+import requests
10
+
11
+setrecursionlimit(10000)
12
+root = 'http://localhost:8000'
13
+
14
+
15
+class DataHolder:
16
+
17
+    def __init__(self, value=None, attr_name='value'):
18
+        self._attr_name = attr_name
19
+        self.set(value)
20
+
21
+    def __call__(self, value):
22
+        return self.set(value)
23
+
24
+    def set(self, value):
25
+        setattr(self, self._attr_name, value)
26
+        return value
27
+
28
+    def get(self):
29
+        return getattr(self, self._attr_name)
30
+
31
+
32
+class Parser(HTMLParser):
33
+    global root
34
+
35
+    ids = set()
36
+    crawled = set()
37
+    anchors = {}
38
+    pages = set()
39
+    save_match = DataHolder(attr_name='match')
40
+
41
+    def __init__(self, origin):
42
+        self.origin = origin
43
+        HTMLParser.__init__(self)
44
+
45
+    def handle_starttag(self, tag, attrs):
46
+        attrs = dict(attrs)
47
+        if 'href' in attrs:
48
+            href = attrs['href']
49
+
50
+            if re.match('^{0}|\/|\#[\S]{{1,}}'.format(root), href):
51
+                if self.save_match(re.search('.*\#(.*?)$', href)):
52
+                    if self.origin not in self.anchors:
53
+                        self.anchors[self.origin] = set()
54
+                    self.anchors[self.origin].add(
55
+                        self.save_match.match.groups(1)[0])
56
+
57
+                url = urljoin(root, href)
58
+
59
+                if url not in self.crawled and not re.match('^\#', href):
60
+                    self.crawled.add(url)
61
+                    Parser(url).feed(requests.get(url).content)
62
+
63
+        if 'id' in attrs:
64
+            self.ids.add(attrs['id'])
65
+	# explicit <a name=""></a> references
66
+        if 'name' in attrs:
67
+            self.ids.add(attrs['name'])
68
+
69
+
70
+r = requests.get(root)
71
+parser = Parser(root)
72
+parser.feed(r.content)
73
+for anchor in sorted(parser.anchors):
74
+    if not re.match('.*/\#.*', anchor):
75
+        for anchor_name in parser.anchors[anchor]:
76
+            if anchor_name not in parser.ids:
77
+                print 'Missing - ({0}): #{1}'.format(
78
+                    anchor.replace(root, ''), anchor_name)
... ...
@@ -5,7 +5,7 @@ page_keywords: Examples, Usage, base image, docker, documentation, examples
5 5
 # Create a Base Image
6 6
 
7 7
 So you want to create your own [*Base Image*](
8
-/terms/image/#base-image-def)? Great!
8
+/terms/image/#base-image)? Great!
9 9
 
10 10
 The specific process will depend heavily on the Linux distribution you
11 11
 want to package. We have some examples below, and you are encouraged to
... ...
@@ -17,7 +17,7 @@ If you get `docker: command not found` or something like
17 17
 incomplete Docker installation or insufficient privileges to access
18 18
 Docker on your machine.
19 19
 
20
-Please refer to [*Installation*](/installation/#installation-list)
20
+Please refer to [*Installation*](/installation)
21 21
 for installation instructions.
22 22
 
23 23
 ## Download a pre-built image
... ...
@@ -26,7 +26,7 @@ for installation instructions.
26 26
     $ sudo docker pull ubuntu
27 27
 
28 28
 This will find the `ubuntu` image by name on
29
-[*Docker Hub*](/userguide/dockerrepos/#find-public-images-on-docker-hub)
29
+[*Docker Hub*](/userguide/dockerrepos/#searching-for-images)
30 30
 and download it from [Docker Hub](https://hub.docker.com) to a local
31 31
 image cache.
32 32
 
... ...
@@ -174,6 +174,6 @@ will be stored (as a diff). See which images you already have using the
174 174
 You now have an image state from which you can create new instances.
175 175
 
176 176
 Read more about [*Share Images via
177
-Repositories*](/userguide/dockerrepos/#working-with-the-repository) or
177
+Repositories*](/userguide/dockerrepos) or
178 178
 continue to the complete [*Command
179
-Line*](/reference/commandline/cli/#cli)
179
+Line*](/reference/commandline/cli)
... ...
@@ -7,7 +7,7 @@ page_keywords: chef, installation, usage, docker, documentation
7 7
 > **Note**:
8 8
 > Please note this is a community contributed installation path. The only
9 9
 > `official` installation is using the
10
-> [*Ubuntu*](/installation/ubuntulinux/#ubuntu-linux) installation
10
+> [*Ubuntu*](/installation/ubuntulinux) installation
11 11
 > path. This version may sometimes be out of date.
12 12
 
13 13
 ## Requirements
... ...
@@ -6,7 +6,7 @@ page_keywords: puppet, installation, usage, docker, documentation
6 6
 
7 7
 > *Note:* Please note this is a community contributed installation path. The
8 8
 > only `official` installation is using the
9
-> [*Ubuntu*](/installation/ubuntulinux/#ubuntu-linux) installation
9
+> [*Ubuntu*](/installation/ubuntulinux) installation
10 10
 > path. This version may sometimes be out of date.
11 11
 
12 12
 ## Requirements
... ...
@@ -33,7 +33,7 @@ of another container. Of course, if the host system is setup
33 33
 accordingly, containers can interact with each other through their
34 34
 respective network interfaces — just like they can interact with
35 35
 external hosts. When you specify public ports for your containers or use
36
-[*links*](/userguide/dockerlinks/#working-with-links-names)
36
+[*links*](/userguide/dockerlinks)
37 37
 then IP traffic is allowed between containers. They can ping each other,
38 38
 send/receive UDP packets, and establish TCP connections, but that can be
39 39
 restricted if necessary. From a network architecture point of view, all
... ...
@@ -6,7 +6,7 @@ page_keywords: docker, supervisor, process management
6 6
 
7 7
 > **Note**:
8 8
 > - **If you don't like sudo** then see [*Giving non-root
9
->   access*](/installation/binaries/#dockergroup)
9
+>   access*](/installation/binaries/#giving-non-root-access)
10 10
 
11 11
 Traditionally a Docker container runs a single process when it is
12 12
 launched, for example an Apache daemon or a SSH server daemon. Often
... ...
@@ -6,7 +6,7 @@ page_keywords: docker, example, package installation, networking, debian, ubuntu
6 6
 
7 7
 > **Note**: 
8 8
 > - **If you don't like sudo** then see [*Giving non-root
9
->   access*](/installation/binaries/#dockergroup).
9
+>   access*](/installation/binaries/#giving-non-root-access).
10 10
 > - **If you're using OS X or docker via TCP** then you shouldn't use
11 11
 >   sudo.
12 12
 
... ...
@@ -6,7 +6,7 @@ page_keywords: docker, example, package installation, networking, couchdb, data
6 6
 
7 7
 > **Note**: 
8 8
 > - **If you don't like sudo** then see [*Giving non-root
9
->   access*](/installation/binaries/#dockergroup)
9
+>   access*](/installation/binaries/#giving-non-root-access)
10 10
 
11 11
 Here's an example of using data volumes to share the same data between
12 12
 two CouchDB containers. This could be used for hot upgrades, testing
... ...
@@ -6,7 +6,7 @@ page_keywords: docker, example, package installation, node, centos
6 6
 
7 7
 > **Note**: 
8 8
 > - **If you don't like sudo** then see [*Giving non-root
9
->   access*](/installation/binaries/#dockergroup)
9
+>   access*](/installation/binaries/#giving-non-root-access)
10 10
 
11 11
 The goal of this example is to show you how you can build your own
12 12
 Docker images from a parent image using a `Dockerfile`
... ...
@@ -6,7 +6,7 @@ page_keywords: docker, example, package installation, postgresql
6 6
 
7 7
 > **Note**: 
8 8
 > - **If you don't like sudo** then see [*Giving non-root
9
->   access*](/installation/binaries/#dockergroup)
9
+>   access*](/installation/binaries/#giving-non-root-access)
10 10
 
11 11
 ## Installing PostgreSQL on Docker
12 12
 
... ...
@@ -42,7 +42,7 @@
42 42
      [`POST /containers/(id)/stop`](../reference/api/docker_remote_api_v1.9/#post--containers-(id)-stop)                                                           **
43 43
      [`GET /containers/(id)/top`](../reference/api/docker_remote_api_v1.9/#get--containers-(id)-top)                                                               **
44 44
      [`POST /containers/(id)/wait`](../reference/api/docker_remote_api_v1.9/#post--containers-(id)-wait)                                                           **
45
-     [`POST /containers/create`](../reference/api/docker_remote_api_v1.9/#post--containers-create)                                                                 **
45
+     [`POST /containers/create`](/reference/api/docker_remote_api_v1.9/#create-a-container)                                                                 **
46 46
      [`GET /containers/json`](../reference/api/docker_remote_api_v1.9/#get--containers-json)                                                                       **
47 47
      [`POST /containers/(id)/resize`](../reference/api/docker_remote_api_v1.9/#get--containers-resize)                                                                  **
48 48
                                                                                                                                                                           
... ...
@@ -40,10 +40,10 @@ over to the [User Guide](/userguide).
40 40
 ## Standard Ubuntu Installation
41 41
 
42 42
 If you want a more hands-on installation, then you can follow the
43
-[*Ubuntu*](../ubuntulinux/#ubuntu-linux) instructions installing Docker
44
-on any EC2 instance running Ubuntu. Just follow Step 1 from [*Amazon
45
-QuickStart*](#amazon-quickstart) to pick an image (or use one of your
43
+[*Ubuntu*](/installation/ubuntulinux) instructions installing Docker
44
+on any EC2 instance running Ubuntu. Just follow Step 1 from the Amazon
45
+QuickStart above to pick an image (or use one of your
46 46
 own) and skip the step with the *User Data*. Then continue with the
47
-[*Ubuntu*](../ubuntulinux/#ubuntu-linux) instructions.
47
+[*Ubuntu*](/installation/ubuntulinux) instructions.
48 48
 
49 49
 Continue with the [User Guide](/userguide/).
... ...
@@ -77,7 +77,7 @@ need to add `sudo` to all the client commands.
77 77
 > **Warning**: 
78 78
 > The *docker* group (or the group specified with `-G`) is root-equivalent;
79 79
 > see [*Docker Daemon Attack Surface*](
80
-> /articles/security/#dockersecurity-daemon) details.
80
+> /articles/security/#docker-daemon-attack-surface) details.
81 81
 
82 82
 ## Upgrades
83 83
 
... ...
@@ -6,8 +6,8 @@ page_keywords: Docker, Docker documentation, installation, debian
6 6
 
7 7
 Docker is supported on the following versions of Debian:
8 8
 
9
- - [*Debian 8.0 Jessie (64-bit)*](#debian-jessie-8-64-bit)
10
- - [*Debian 7.5 Wheezy (64-bit)*](#debian-wheezy-7-64-bit)
9
+ - [*Debian 8.0 Jessie (64-bit)*](#debian-jessie-80-64-bit)
10
+ - [*Debian 7.5 Wheezy (64-bit)*](#debian-wheezystable-7x-64-bit)
11 11
 
12 12
 ## Debian Jessie 8.0 (64-bit)
13 13
 
... ...
@@ -81,7 +81,7 @@ use the `-G` flag to specify an alternative group.
81 81
 > **Warning**: 
82 82
 > The `docker` group (or the group specified with the `-G` flag) is
83 83
 > `root`-equivalent; see [*Docker Daemon Attack Surface*](
84
-> /articles/security/#dockersecurity-daemon) details.
84
+> /articles/security/#docker-daemon-attack-surface) details.
85 85
 
86 86
 **Example:**
87 87
 
... ...
@@ -240,7 +240,7 @@ alternative group.
240 240
 > **Warning**: 
241 241
 > The `docker` group (or the group specified with the `-G` flag) is
242 242
 > `root`-equivalent; see [*Docker Daemon Attack Surface*](
243
-> /articles/security/#dockersecurity-daemon) for details.
243
+> /articles/security/#docker-daemon-attack-surface) for details.
244 244
 
245 245
 **Example:**
246 246
 
... ...
@@ -366,7 +366,7 @@ output is now generated in the client, using the
366 366
 You can now split stderr from stdout. This is done by
367 367
 prefixing a header to each transmission. See
368 368
 [`POST /containers/(id)/attach`](
369
-/reference/api/docker_remote_api_v1.9/#post--containers-(id)-attach "POST /containers/(id)/attach").
369
+/reference/api/docker_remote_api_v1.9/#attach-to-a-container "POST /containers/(id)/attach").
370 370
 The WebSocket attach is unchanged. Note that attach calls on the
371 371
 previous API version didn't change. Stdout and stderr are merged.
372 372
 
... ...
@@ -499,7 +499,7 @@ Status Codes:
499 499
 
500 500
     When using the TTY setting is enabled in
501 501
     [`POST /containers/create`
502
-](../docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
502
+](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
503 503
     the stream is the raw data from the process PTY and client's stdin.
504 504
     When the TTY is disabled, then the stream is multiplexed to separate
505 505
     stdout and stderr.
... ...
@@ -998,7 +998,7 @@ Build an image from Dockerfile via stdin
998 998
     The archive must include a file called `Dockerfile`
999 999
  at its root. It may include any number of other files,
1000 1000
     which will be accessible in the build context (See the [*ADD build
1001
-    command*](/reference/builder/#dockerbuilder)).
1001
+    command*](/reference/builder/#add)).
1002 1002
 
1003 1003
 Query Parameters:
1004 1004
 
... ...
@@ -535,7 +535,7 @@ Status Codes:
535 535
 
536 536
     When using the TTY setting is enabled in
537 537
     [`POST /containers/create`
538
-    ](../docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
538
+    ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
539 539
     the stream is the raw data from the process PTY and client's stdin.
540 540
     When the TTY is disabled, then the stream is multiplexed to separate
541 541
     stdout and stderr.
... ...
@@ -583,7 +583,7 @@ Status Codes:
583 583
 
584 584
     When using the TTY setting is enabled in
585 585
     [`POST /containers/create`
586
-    ](../docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
586
+    ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
587 587
     the stream is the raw data from the process PTY and client's stdin.
588 588
     When the TTY is disabled, then the stream is multiplexed to separate
589 589
     stdout and stderr.
... ...
@@ -576,7 +576,7 @@ Status Codes:
576 576
 
577 577
     When using the TTY setting is enabled in
578 578
     [`POST /containers/create`
579
-    ](../docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
579
+    ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
580 580
     the stream is the raw data from the process PTY and client's stdin.
581 581
     When the TTY is disabled, then the stream is multiplexed to separate
582 582
     stdout and stderr.
... ...
@@ -584,7 +584,7 @@ Status Codes:
584 584
 
585 585
     When using the TTY setting is enabled in
586 586
     [`POST /containers/create`
587
-    ](../docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
587
+    ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
588 588
     the stream is the raw data from the process PTY and client's stdin.
589 589
     When the TTY is disabled, then the stream is multiplexed to separate
590 590
     stdout and stderr.
... ...
@@ -724,7 +724,7 @@ Status Codes:
724 724
 
725 725
     When using the TTY setting is enabled in
726 726
     [`POST /containers/create`
727
-    ](../docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
727
+    ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
728 728
     the stream is the raw data from the process PTY and client's stdin.
729 729
     When the TTY is disabled, then the stream is multiplexed to separate
730 730
     stdout and stderr.
... ...
@@ -678,7 +678,7 @@ Status Codes:
678 678
 
679 679
     When using the TTY setting is enabled in
680 680
     [`POST /containers/create`
681
-    ](../docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
681
+    ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
682 682
     the stream is the raw data from the process PTY and client's stdin.
683 683
     When the TTY is disabled, then the stream is multiplexed to separate
684 684
     stdout and stderr.
... ...
@@ -525,7 +525,7 @@ Status Codes:
525 525
 
526 526
     When using the TTY setting is enabled in
527 527
     [`POST /containers/create`
528
-    ](/api/docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
528
+    ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
529 529
     the stream is the raw data from the process PTY and client's stdin.
530 530
     When the TTY is disabled, then the stream is multiplexed to separate
531 531
     stdout and stderr.
... ...
@@ -470,7 +470,7 @@ Status Codes:
470 470
 
471 471
     When using the TTY setting is enabled in
472 472
     [`POST /containers/create`
473
-    ](/api/docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
473
+    ](/reference/api/docker_remote_api_v1.7/#create-a-container),
474 474
     the stream is the raw data from the process PTY and client's stdin.
475 475
     When the TTY is disabled, then the stream is multiplexed to separate
476 476
     stdout and stderr.
... ...
@@ -518,7 +518,7 @@ Status Codes:
518 518
 
519 519
     When using the TTY setting is enabled in
520 520
     [`POST /containers/create`
521
-    ](/api/docker_remote_api_v1.9/#post--containers-create "POST /containers/create"),
521
+    ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"),
522 522
     the stream is the raw data from the process PTY and client's stdin.
523 523
     When the TTY is disabled, then the stream is multiplexed to separate
524 524
     stdout and stderr.
... ...
@@ -522,7 +522,7 @@ Status Codes:
522 522
     **Stream details**:
523 523
 
524 524
     When using the TTY setting is enabled in
525
-    [`POST /containers/create`](#post--containers-create), the
525
+    [`POST /containers/create`](#create-a-container), the
526 526
     stream is the raw data from the process PTY and client's stdin. When
527 527
     the TTY is disabled, then the stream is multiplexed to separate
528 528
     stdout and stderr.
... ...
@@ -1004,7 +1004,7 @@ Build an image from Dockerfile using a POST body.
1004 1004
     The archive must include a file called `Dockerfile`
1005 1005
  at its root. It may include any number of other files,
1006 1006
     which will be accessible in the build context (See the [*ADD build
1007
-    command*](/reference/builder/#dockerbuilder)).
1007
+    command*](/reference/builder/#add)).
1008 1008
 
1009 1009
 Query Parameters:
1010 1010
 
... ...
@@ -79,7 +79,7 @@ guide](/articles/dockerfile_best-practices/#build-cache) for more information):
79 79
     Successfully built 1a5ffc17324d
80 80
 
81 81
 When you're done with your build, you're ready to look into [*Pushing a
82
-repository to its registry*]( /userguide/dockerrepos/#image-push).
82
+repository to its registry*]( /userguide/dockerrepos/#contributing-to-docker-hub).
83 83
 
84 84
 ## Format
85 85
 
... ...
@@ -93,7 +93,7 @@ be UPPERCASE in order to distinguish them from arguments more easily.
93 93
 
94 94
 Docker runs the instructions in a `Dockerfile` in order. **The
95 95
 first instruction must be \`FROM\`** in order to specify the [*Base
96
-Image*](/terms/image/#base-image-def) from which you are building.
96
+Image*](/terms/image/#base-image) from which you are building.
97 97
 
98 98
 Docker will treat lines that *begin* with `#` as a
99 99
 comment. A `#` marker anywhere else in the line will
... ...
@@ -186,11 +186,11 @@ Or
186 186
 
187 187
     FROM <image>:<tag>
188 188
 
189
-The `FROM` instruction sets the [*Base Image*](/terms/image/#base-image-def)
189
+The `FROM` instruction sets the [*Base Image*](/terms/image/#base-image)
190 190
 for subsequent instructions. As such, a valid `Dockerfile` must have `FROM` as
191 191
 its first instruction. The image can be any valid image – it is especially easy
192 192
 to start by **pulling an image** from the [*Public Repositories*](
193
-/userguide/dockerrepos/#using-public-repositories).
193
+/userguide/dockerrepos).
194 194
 
195 195
 `FROM` must be the first non-comment instruction in the `Dockerfile`.
196 196
 
... ...
@@ -763,7 +763,7 @@ and mark it as holding externally mounted volumes from native host or other
763 763
 containers. The value can be a JSON array, `VOLUME ["/var/log/"]`, or a plain
764 764
 string with multiple arguments, such as `VOLUME /var/log` or `VOLUME /var/log
765 765
 /var/db`.  For more information/examples and mounting instructions via the
766
-Docker client, refer to [*Share Directories via Volumes*](/userguide/dockervolumes/#volume-def)
766
+Docker client, refer to [*Share Directories via Volumes*](/userguide/dockervolumes/#volume)
767 767
 documentation.
768 768
 
769 769
 > **Note**:
... ...
@@ -459,7 +459,7 @@ Use this command to build Docker images from a Dockerfile and a
459 459
 
460 460
 The files at `PATH` or `URL` are called the "context" of the build. The
461 461
 build process may refer to any of the files in the context, for example
462
-when using an [*ADD*](/reference/builder/#dockerfile-add) instruction.
462
+when using an [*ADD*](/reference/builder/#add) instruction.
463 463
 When a single Dockerfile is given as `URL` or is piped through `STDIN`
464 464
 (`docker build - < Dockerfile`), then no context is set.
465 465
 
... ...
@@ -539,7 +539,7 @@ machine and that no parsing of the Dockerfile
539 539
 happens at the client side (where you're running
540 540
 `docker build`). That means that *all* the files at
541 541
 `PATH` get sent, not just the ones listed to
542
-[*ADD*](/reference/builder/#dockerfile-add) in the Dockerfile.
542
+[*ADD*](/reference/builder/#add) in the Dockerfile.
543 543
 
544 544
 The transfer of context from the local machine to the Docker daemon is
545 545
 what the `docker` client means when you see the
... ...
@@ -1817,7 +1817,7 @@ Search [Docker Hub](https://hub.docker.com) for images
1817 1817
       -s, --stars=0        Only displays with at least x stars
1818 1818
 
1819 1819
 See [*Find Public Images on Docker Hub*](
1820
-/userguide/dockerrepos/#find-public-images-on-docker-hub) for
1820
+/userguide/dockerrepos/#searching-for-images) for
1821 1821
 more details on finding shared images from the command line.
1822 1822
 
1823 1823
 ## start
... ...
@@ -1853,7 +1853,7 @@ grace period, `SIGKILL`.
1853 1853
 
1854 1854
 You can group your images together using names and tags, and then upload
1855 1855
 them to [*Share Images via Repositories*](
1856
-/userguide/dockerrepos/#working-with-the-repository).
1856
+/userguide/dockerrepos/#contributing-to-docker-hub).
1857 1857
 
1858 1858
 ## top
1859 1859
 
... ...
@@ -7,7 +7,7 @@ page_keywords: docker, run, configure, runtime
7 7
 **Docker runs processes in isolated containers**. When an operator
8 8
 executes `docker run`, she starts a process with its own file system,
9 9
 its own networking, and its own isolated process tree.  The
10
-[*Image*](/terms/image/#image-def) which starts the process may define
10
+[*Image*](/terms/image/#image) which starts the process may define
11 11
 defaults related to the binary to run, the networking to expose, and
12 12
 more, but `docker run` gives final control to the operator who starts
13 13
 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
114 114
 assign a name to the container with `--name` then the daemon will also
115 115
 generate a random string name too. The name can become a handy way to
116 116
 add meaning to a container since you can use this name when defining
117
-[*links*](/userguide/dockerlinks/#working-with-links-names) (or any
117
+[*links*](/userguide/dockerlinks) (or any
118 118
 other place you need to identify a container). This works for both
119 119
 background and foreground Docker containers.
120 120
 
... ...
@@ -420,7 +420,7 @@ familiar with using LXC directly.
420 420
 
421 421
 ## Overriding Dockerfile image defaults
422 422
 
423
-When a developer builds an image from a [*Dockerfile*](/reference/builder/#dockerbuilder)
423
+When a developer builds an image from a [*Dockerfile*](/reference/builder)
424 424
 or when she commits it, the developer can set a number of default parameters
425 425
 that take effect when the image starts up as a container.
426 426
 
... ...
@@ -634,7 +634,7 @@ container's `/etc/hosts` entry will be automatically updated.
634 634
 
635 635
 The volumes commands are complex enough to have their own documentation
636 636
 in section [*Managing data in 
637
-containers*](/userguide/dockervolumes/#volume-def). A developer can define
637
+containers*](/userguide/dockervolumes). A developer can define
638 638
 one or more `VOLUME`'s associated with an image, but only the operator
639 639
 can give access from one container to another (or from a container to a
640 640
 volume mounted on the host).
... ...
@@ -8,10 +8,10 @@ page_keywords: containers, lxc, concepts, explanation, image, container
8 8
 
9 9
 ![](/terms/images/docker-filesystems-debian.png)
10 10
 
11
-In Docker terminology, a read-only [*Layer*](/terms/layer/#layer-def) is
11
+In Docker terminology, a read-only [*Layer*](/terms/layer/#layer) is
12 12
 called an **image**. An image never changes.
13 13
 
14
-Since Docker uses a [*Union File System*](/terms/layer/#ufs-def), the
14
+Since Docker uses a [*Union File System*](/terms/layer/#union-file-system), the
15 15
 processes think the whole file system is mounted read-write. But all the
16 16
 changes go to the top-most writeable layer, and underneath, the original
17 17
 file in the read-only image is unchanged. Since images don't change,
... ...
@@ -7,7 +7,7 @@ page_keywords: containers, lxc, concepts, explanation, image, container
7 7
 ## Introduction
8 8
 
9 9
 In a traditional Linux boot, the kernel first mounts the root [*File
10
-System*](/terms/filesystem/#filesystem-def) as read-only, checks its
10
+System*](/terms/filesystem) as read-only, checks its
11 11
 integrity, and then switches the whole rootfs volume to read-write mode.
12 12
 
13 13
 ## Layer
... ...
@@ -36,8 +36,8 @@ e-mail address. It will then automatically log you in. You can now commit and
36 36
 push your own images up to your repos on Docker Hub.
37 37
 
38 38
 > **Note:**
39
-> Your authentication credentials will be stored in the [`.dockercfg`
40
-> authentication file](#authentication-file) in your home directory.
39
+> Your authentication credentials will be stored in the `.dockercfg`
40
+> authentication file in your home directory.
41 41
 
42 42
 ## Searching for images
43 43
 
... ...
@@ -21,7 +21,7 @@ Docker.
21 21
 
22 22
 A *data volume* is a specially-designated directory within one or more
23 23
 containers that bypasses the [*Union File
24
-System*](/terms/layer/#ufs-def) to provide several useful features for
24
+System*](/terms/layer/#union-file-system) to provide several useful features for
25 25
 persistent or shared data:
26 26
 
27 27
 - Data volumes can be shared and reused between containers
... ...
@@ -29,7 +29,7 @@ page_keywords: documentation, docs, the docker guide, docker guide, docker, dock
29 29
 	<p>
30 30
 	<div class="alert alert-success" id="all_good" style="display:none;">Congratulations, you made no mistake!<br />
31 31
 	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 />
32
-	And try the next challenge: <a href="#fill_the_dockerfile">Fill the Dockerfile</a>
32
+	And try the next challenge: <a href="#fill-the-dockerfile">Fill the Dockerfile</a>
33 33
 	</div>
34 34
 	<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>
35 35
 	<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"
69 69
 which user to use, and how expose a particular port.</p>
70 70
 
71 71
 <a title="back" class="btn btn-primary back" href="/userguide/dockerimages/#creating-our-own-images">Back</a>
72
-<a title="next level" class="btn btn-primary" href="/userguide/level2">Go to the next level</a>
73 72
\ No newline at end of file
73
+<a title="next level" class="btn btn-primary" href="/userguide/level2">Go to the next level</a>
... ...
@@ -39,7 +39,7 @@ What is the Dockerfile instruction to specify the base image?<br>
39 39
 	
40 40
 	<div class="alert alert-success" id="all_good" style="display:none;">Congratulations, you made no mistake!<br />
41 41
 	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 />
42
-	And try the next challenge: <a href="#fill_the_dockerfile">Fill the Dockerfile</a>
42
+	And try the next challenge: <a href="#fill-the-dockerfile">Fill the Dockerfile</a>
43 43
 	</div>
44 44
 	<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>
45 45
 	<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.
93 93
 
94 94
 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>.
95 95
 
96
-<a title="creating our own images" class="btn btn-primary" href="/userguide/dockerimages/#creating-our-own-images">Back to the Docs!</a>
97 96
\ No newline at end of file
97
+<a title="creating our own images" class="btn btn-primary" href="/userguide/dockerimages/#creating-our-own-images">Back to the Docs!</a>
98 98
new file mode 100755
... ...
@@ -0,0 +1,6 @@
0
+#!/bin/sh
1
+
2
+mkdocs serve &
3
+echo "Waiting for 5 seconds to allow mkdocs server to be ready"
4
+sleep 5
5
+./docvalidate.py