diff --git a/CHANGELOG.md b/CHANGELOG.md
index a9e2dab79e..4d3502d23a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## 0.3.3 (2013-05-23)
+ - Registry: Fix push regression
+ - Various bugfixes
+
## 0.3.2 (2013-05-09)
* Runtime: Store the actual archive on commit
* Registry: Improve the checksum process
diff --git a/README.md b/README.md
index c83feeae58..918fdaade2 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,7 @@ Docker is an open-source implementation of the deployment engine which powers [d
It benefits directly from the experience accumulated over several years of large-scale operation and support of hundreds of thousands
of applications and databases.
-![Docker L](docs/sources/static_files/lego_docker.jpg "Docker")
+![Docker L](docs/sources/concepts/images/lego_docker.jpg "Docker")
## Better than VMs
diff --git a/api.go b/api.go
index 29103fac10..0a902c4043 100644
--- a/api.go
+++ b/api.go
@@ -13,6 +13,8 @@ import (
"strings"
)
+const API_VERSION = 1.0
+
func hijackServer(w http.ResponseWriter) (io.ReadCloser, io.Writer, error) {
conn, _, err := w.(http.Hijacker).Hijack()
if err != nil {
@@ -56,7 +58,7 @@ func getBoolParam(value string) (bool, error) {
return false, fmt.Errorf("Bad parameter")
}
-func getAuth(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func getAuth(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
b, err := json.Marshal(srv.registry.GetAuthConfig())
if err != nil {
return err
@@ -65,7 +67,7 @@ func getAuth(srv *Server, w http.ResponseWriter, r *http.Request, vars map[strin
return nil
}
-func postAuth(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func postAuth(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
config := &auth.AuthConfig{}
if err := json.NewDecoder(r.Body).Decode(config); err != nil {
return err
@@ -94,7 +96,7 @@ func postAuth(srv *Server, w http.ResponseWriter, r *http.Request, vars map[stri
return nil
}
-func getVersion(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func getVersion(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
m := srv.DockerVersion()
b, err := json.Marshal(m)
if err != nil {
@@ -104,7 +106,7 @@ func getVersion(srv *Server, w http.ResponseWriter, r *http.Request, vars map[st
return nil
}
-func postContainersKill(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func postContainersKill(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
@@ -116,7 +118,7 @@ func postContainersKill(srv *Server, w http.ResponseWriter, r *http.Request, var
return nil
}
-func getContainersExport(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func getContainersExport(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
@@ -129,7 +131,7 @@ func getContainersExport(srv *Server, w http.ResponseWriter, r *http.Request, va
return nil
}
-func getImagesJson(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func getImagesJson(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
@@ -152,14 +154,14 @@ func getImagesJson(srv *Server, w http.ResponseWriter, r *http.Request, vars map
return nil
}
-func getImagesViz(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func getImagesViz(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := srv.ImagesViz(w); err != nil {
return err
}
return nil
}
-func getInfo(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func getInfo(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
out := srv.DockerInfo()
b, err := json.Marshal(out)
if err != nil {
@@ -169,7 +171,7 @@ func getInfo(srv *Server, w http.ResponseWriter, r *http.Request, vars map[strin
return nil
}
-func getImagesHistory(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func getImagesHistory(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
@@ -186,7 +188,7 @@ func getImagesHistory(srv *Server, w http.ResponseWriter, r *http.Request, vars
return nil
}
-func getContainersChanges(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func getContainersChanges(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
@@ -203,7 +205,7 @@ func getContainersChanges(srv *Server, w http.ResponseWriter, r *http.Request, v
return nil
}
-func getContainersPs(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func getContainersPs(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
@@ -227,7 +229,7 @@ func getContainersPs(srv *Server, w http.ResponseWriter, r *http.Request, vars m
return nil
}
-func postImagesTag(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func postImagesTag(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
@@ -249,7 +251,7 @@ func postImagesTag(srv *Server, w http.ResponseWriter, r *http.Request, vars map
return nil
}
-func postCommit(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func postCommit(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
@@ -276,7 +278,7 @@ func postCommit(srv *Server, w http.ResponseWriter, r *http.Request, vars map[st
}
// Creates an image from Pull or from Import
-func postImagesCreate(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func postImagesCreate(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
@@ -299,7 +301,7 @@ func postImagesCreate(srv *Server, w http.ResponseWriter, r *http.Request, vars
return nil
}
-func getImagesSearch(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func getImagesSearch(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
@@ -317,7 +319,7 @@ func getImagesSearch(srv *Server, w http.ResponseWriter, r *http.Request, vars m
return nil
}
-func postImagesInsert(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func postImagesInsert(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
@@ -335,7 +337,7 @@ func postImagesInsert(srv *Server, w http.ResponseWriter, r *http.Request, vars
return nil
}
-func postImagesPush(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func postImagesPush(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
@@ -352,7 +354,7 @@ func postImagesPush(srv *Server, w http.ResponseWriter, r *http.Request, vars ma
return nil
}
-func postContainersCreate(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func postContainersCreate(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
config := &Config{}
if err := json.NewDecoder(r.Body).Decode(config); err != nil {
return err
@@ -382,7 +384,7 @@ func postContainersCreate(srv *Server, w http.ResponseWriter, r *http.Request, v
return nil
}
-func postContainersRestart(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func postContainersRestart(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
@@ -401,7 +403,7 @@ func postContainersRestart(srv *Server, w http.ResponseWriter, r *http.Request,
return nil
}
-func deleteContainers(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func deleteContainers(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
@@ -421,7 +423,7 @@ func deleteContainers(srv *Server, w http.ResponseWriter, r *http.Request, vars
return nil
}
-func deleteImages(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func deleteImages(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
@@ -433,7 +435,7 @@ func deleteImages(srv *Server, w http.ResponseWriter, r *http.Request, vars map[
return nil
}
-func postContainersStart(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func postContainersStart(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
@@ -445,7 +447,7 @@ func postContainersStart(srv *Server, w http.ResponseWriter, r *http.Request, va
return nil
}
-func postContainersStop(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func postContainersStop(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
@@ -466,7 +468,7 @@ func postContainersStop(srv *Server, w http.ResponseWriter, r *http.Request, var
return nil
}
-func postContainersWait(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func postContainersWait(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
@@ -483,7 +485,7 @@ func postContainersWait(srv *Server, w http.ResponseWriter, r *http.Request, var
return nil
}
-func postContainersAttach(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func postContainersAttach(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
@@ -526,7 +528,7 @@ func postContainersAttach(srv *Server, w http.ResponseWriter, r *http.Request, v
return nil
}
-func getContainersByName(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func getContainersByName(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
@@ -544,7 +546,7 @@ func getContainersByName(srv *Server, w http.ResponseWriter, r *http.Request, va
return nil
}
-func getImagesByName(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func getImagesByName(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
@@ -562,7 +564,7 @@ func getImagesByName(srv *Server, w http.ResponseWriter, r *http.Request, vars m
return nil
}
-func postImagesGetCache(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+func postImagesGetCache(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
apiConfig := &ApiImageConfig{}
if err := json.NewDecoder(r.Body).Decode(apiConfig); err != nil {
return err
@@ -589,7 +591,7 @@ func ListenAndServe(addr string, srv *Server, logging bool) error {
r := mux.NewRouter()
log.Printf("Listening for HTTP on %s\n", addr)
- m := map[string]map[string]func(*Server, http.ResponseWriter, *http.Request, map[string]string) error{
+ m := map[string]map[string]func(*Server, float64, http.ResponseWriter, *http.Request, map[string]string) error{
"GET": {
"/auth": getAuth,
"/version": getVersion,
@@ -633,7 +635,7 @@ func ListenAndServe(addr string, srv *Server, logging bool) error {
localRoute := route
localMethod := method
localFct := fct
- r.Path(localRoute).Methods(localMethod).HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ f := func(w http.ResponseWriter, r *http.Request) {
utils.Debugf("Calling %s %s", localMethod, localRoute)
if logging {
log.Println(r.Method, r.RequestURI)
@@ -644,10 +646,20 @@ func ListenAndServe(addr string, srv *Server, logging bool) error {
utils.Debugf("Warning: client and server don't have the same version (client: %s, server: %s)", userAgent[1], VERSION)
}
}
- if err := localFct(srv, w, r, mux.Vars(r)); err != nil {
+ version, err := strconv.ParseFloat(mux.Vars(r)["version"], 64)
+ if err != nil {
+ version = API_VERSION
+ }
+ if version == 0 || version > API_VERSION {
+ w.WriteHeader(http.StatusNotFound)
+ return
+ }
+ if err := localFct(srv, version, w, r, mux.Vars(r)); err != nil {
httpError(w, err)
}
- })
+ }
+ r.Path("/v{version:[0-9.]+}" + localRoute).Methods(localMethod).HandlerFunc(f)
+ r.Path(localRoute).Methods(localMethod).HandlerFunc(f)
}
}
diff --git a/api_test.go b/api_test.go
index dd685ffece..de4289728e 100644
--- a/api_test.go
+++ b/api_test.go
@@ -48,7 +48,7 @@ func TestGetAuth(t *testing.T) {
t.Fatal(err)
}
- if err := postAuth(srv, r, req, nil); err != nil {
+ if err := postAuth(srv, API_VERSION, r, req, nil); err != nil {
t.Fatal(err)
}
@@ -74,7 +74,7 @@ func TestGetVersion(t *testing.T) {
r := httptest.NewRecorder()
- if err := getVersion(srv, r, nil, nil); err != nil {
+ if err := getVersion(srv, API_VERSION, r, nil, nil); err != nil {
t.Fatal(err)
}
@@ -98,7 +98,7 @@ func TestGetInfo(t *testing.T) {
r := httptest.NewRecorder()
- if err := getInfo(srv, r, nil, nil); err != nil {
+ if err := getInfo(srv, API_VERSION, r, nil, nil); err != nil {
t.Fatal(err)
}
@@ -129,7 +129,7 @@ func TestGetImagesJson(t *testing.T) {
r := httptest.NewRecorder()
- if err := getImagesJson(srv, r, req, nil); err != nil {
+ if err := getImagesJson(srv, API_VERSION, r, req, nil); err != nil {
t.Fatal(err)
}
@@ -154,7 +154,7 @@ func TestGetImagesJson(t *testing.T) {
t.Fatal(err)
}
- if err := getImagesJson(srv, r2, req2, nil); err != nil {
+ if err := getImagesJson(srv, API_VERSION, r2, req2, nil); err != nil {
t.Fatal(err)
}
@@ -179,7 +179,7 @@ func TestGetImagesJson(t *testing.T) {
t.Fatal(err)
}
- if err := getImagesJson(srv, r3, req3, nil); err != nil {
+ if err := getImagesJson(srv, API_VERSION, r3, req3, nil); err != nil {
t.Fatal(err)
}
@@ -200,7 +200,7 @@ func TestGetImagesJson(t *testing.T) {
t.Fatal(err)
}
- err = getImagesJson(srv, r4, req4, nil)
+ err = getImagesJson(srv, API_VERSION, r4, req4, nil)
if err == nil {
t.Fatalf("Error expected, received none")
}
@@ -221,7 +221,7 @@ func TestGetImagesViz(t *testing.T) {
srv := &Server{runtime: runtime}
r := httptest.NewRecorder()
- if err := getImagesViz(srv, r, nil, nil); err != nil {
+ if err := getImagesViz(srv, API_VERSION, r, nil, nil); err != nil {
t.Fatal(err)
}
@@ -258,7 +258,7 @@ func TestGetImagesSearch(t *testing.T) {
t.Fatal(err)
}
- if err := getImagesSearch(srv, r, req, nil); err != nil {
+ if err := getImagesSearch(srv, API_VERSION, r, req, nil); err != nil {
t.Fatal(err)
}
@@ -282,7 +282,7 @@ func TestGetImagesHistory(t *testing.T) {
r := httptest.NewRecorder()
- if err := getImagesHistory(srv, r, nil, map[string]string{"name": unitTestImageName}); err != nil {
+ if err := getImagesHistory(srv, API_VERSION, r, nil, map[string]string{"name": unitTestImageName}); err != nil {
t.Fatal(err)
}
@@ -305,7 +305,7 @@ func TestGetImagesByName(t *testing.T) {
srv := &Server{runtime: runtime}
r := httptest.NewRecorder()
- if err := getImagesByName(srv, r, nil, map[string]string{"name": unitTestImageName}); err != nil {
+ if err := getImagesByName(srv, API_VERSION, r, nil, map[string]string{"name": unitTestImageName}); err != nil {
t.Fatal(err)
}
@@ -342,7 +342,7 @@ func TestGetContainersPs(t *testing.T) {
}
r := httptest.NewRecorder()
- if err := getContainersPs(srv, r, req, nil); err != nil {
+ if err := getContainersPs(srv, API_VERSION, r, req, nil); err != nil {
t.Fatal(err)
}
containers := []ApiContainers{}
@@ -385,7 +385,7 @@ func TestGetContainersExport(t *testing.T) {
}
r := httptest.NewRecorder()
- if err = getContainersExport(srv, r, nil, map[string]string{"name": container.Id}); err != nil {
+ if err = getContainersExport(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil {
t.Fatal(err)
}
@@ -440,7 +440,7 @@ func TestGetContainersChanges(t *testing.T) {
}
r := httptest.NewRecorder()
- if err := getContainersChanges(srv, r, nil, map[string]string{"name": container.Id}); err != nil {
+ if err := getContainersChanges(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil {
t.Fatal(err)
}
changes := []Change{}
@@ -484,7 +484,7 @@ func TestGetContainersByName(t *testing.T) {
defer runtime.Destroy(container)
r := httptest.NewRecorder()
- if err := getContainersByName(srv, r, nil, map[string]string{"name": container.Id}); err != nil {
+ if err := getContainersByName(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil {
t.Fatal(err)
}
outContainer := &Container{}
@@ -515,7 +515,7 @@ func TestPostAuth(t *testing.T) {
srv.registry.ResetClient(authConfigOrig)
r := httptest.NewRecorder()
- if err := getAuth(srv, r, nil, nil); err != nil {
+ if err := getAuth(srv, API_VERSION, r, nil, nil); err != nil {
t.Fatal(err)
}
@@ -562,7 +562,7 @@ func TestPostCommit(t *testing.T) {
}
r := httptest.NewRecorder()
- if err := postCommit(srv, r, req, nil); err != nil {
+ if err := postCommit(srv, API_VERSION, r, req, nil); err != nil {
t.Fatal(err)
}
if r.Code != http.StatusCreated {
@@ -840,7 +840,7 @@ func TestPostContainersCreate(t *testing.T) {
}
r := httptest.NewRecorder()
- if err := postContainersCreate(srv, r, req, nil); err != nil {
+ if err := postContainersCreate(srv, API_VERSION, r, req, nil); err != nil {
t.Fatal(err)
}
if r.Code != http.StatusCreated {
@@ -903,7 +903,7 @@ func TestPostContainersKill(t *testing.T) {
}
r := httptest.NewRecorder()
- if err := postContainersKill(srv, r, nil, map[string]string{"name": container.Id}); err != nil {
+ if err := postContainersKill(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil {
t.Fatal(err)
}
if r.Code != http.StatusNoContent {
@@ -951,7 +951,7 @@ func TestPostContainersRestart(t *testing.T) {
t.Fatal(err)
}
r := httptest.NewRecorder()
- if err := postContainersRestart(srv, r, req, map[string]string{"name": container.Id}); err != nil {
+ if err := postContainersRestart(srv, API_VERSION, r, req, map[string]string{"name": container.Id}); err != nil {
t.Fatal(err)
}
if r.Code != http.StatusNoContent {
@@ -992,7 +992,7 @@ func TestPostContainersStart(t *testing.T) {
defer runtime.Destroy(container)
r := httptest.NewRecorder()
- if err := postContainersStart(srv, r, nil, map[string]string{"name": container.Id}); err != nil {
+ if err := postContainersStart(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil {
t.Fatal(err)
}
if r.Code != http.StatusNoContent {
@@ -1007,7 +1007,7 @@ func TestPostContainersStart(t *testing.T) {
}
r = httptest.NewRecorder()
- if err = postContainersStart(srv, r, nil, map[string]string{"name": container.Id}); err == nil {
+ if err = postContainersStart(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err == nil {
t.Fatalf("A running containter should be able to be started")
}
@@ -1054,7 +1054,7 @@ func TestPostContainersStop(t *testing.T) {
t.Fatal(err)
}
r := httptest.NewRecorder()
- if err := postContainersStop(srv, r, req, map[string]string{"name": container.Id}); err != nil {
+ if err := postContainersStop(srv, API_VERSION, r, req, map[string]string{"name": container.Id}); err != nil {
t.Fatal(err)
}
if r.Code != http.StatusNoContent {
@@ -1092,7 +1092,7 @@ func TestPostContainersWait(t *testing.T) {
setTimeout(t, "Wait timed out", 3*time.Second, func() {
r := httptest.NewRecorder()
- if err := postContainersWait(srv, r, nil, map[string]string{"name": container.Id}); err != nil {
+ if err := postContainersWait(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil {
t.Fatal(err)
}
apiWait := &ApiWait{}
@@ -1154,7 +1154,7 @@ func TestPostContainersAttach(t *testing.T) {
t.Fatal(err)
}
- if err := postContainersAttach(srv, r, req, map[string]string{"name": container.Id}); err != nil {
+ if err := postContainersAttach(srv, API_VERSION, r, req, map[string]string{"name": container.Id}); err != nil {
t.Fatal(err)
}
}()
@@ -1224,7 +1224,7 @@ func TestDeleteContainers(t *testing.T) {
t.Fatal(err)
}
r := httptest.NewRecorder()
- if err := deleteContainers(srv, r, req, map[string]string{"name": container.Id}); err != nil {
+ if err := deleteContainers(srv, API_VERSION, r, req, map[string]string{"name": container.Id}); err != nil {
t.Fatal(err)
}
if r.Code != http.StatusNoContent {
diff --git a/builder_client.go b/builder_client.go
index ceeab002c9..c3950b2be3 100644
--- a/builder_client.go
+++ b/builder_client.go
@@ -32,12 +32,6 @@ type builderClient struct {
}
func (b *builderClient) clearTmp(containers, images map[string]struct{}) {
- for c := range containers {
- if _, _, err := b.cli.call("DELETE", "/containers/"+c, nil); err != nil {
- utils.Debugf("%s", err)
- }
- utils.Debugf("Removing container %s", c)
- }
for i := range images {
if _, _, err := b.cli.call("DELETE", "/images/"+i, nil); err != nil {
utils.Debugf("%s", err)
diff --git a/commands.go b/commands.go
index fda90489e4..6212459b42 100644
--- a/commands.go
+++ b/commands.go
@@ -24,7 +24,7 @@ import (
"unicode"
)
-const VERSION = "0.3.2"
+const VERSION = "0.3.3"
var (
GIT_COMMIT string
@@ -1167,7 +1167,7 @@ func (cli *DockerCli) call(method, path string, data interface{}) ([]byte, int,
params = bytes.NewBuffer(buf)
}
- req, err := http.NewRequest(method, fmt.Sprintf("http://%s:%d", cli.addr, cli.port)+path, params)
+ req, err := http.NewRequest(method, fmt.Sprintf("http://%s:%d/v%g%s", cli.addr, cli.port, API_VERSION, path), params)
if err != nil {
return nil, -1, err
}
@@ -1199,7 +1199,7 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer) e
if (method == "POST" || method == "PUT") && in == nil {
in = bytes.NewReader([]byte{})
}
- req, err := http.NewRequest(method, fmt.Sprintf("http://%s:%d%s", cli.addr, cli.port, path), in)
+ req, err := http.NewRequest(method, fmt.Sprintf("http://%s:%d/v%f%s", cli.addr, cli.port, API_VERSION, path), in)
if err != nil {
return err
}
@@ -1230,7 +1230,7 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer) e
}
func (cli *DockerCli) hijack(method, path string, setRawTerminal bool) error {
- req, err := http.NewRequest(method, path, nil)
+ req, err := http.NewRequest(method, fmt.Sprintf("/v%f%s", API_VERSION, path), nil)
if err != nil {
return err
}
diff --git a/docs/sources/api/docker_remote_api.rst b/docs/sources/api/docker_remote_api.rst
index 2b1aad0e84..4c8ebe847f 100644
--- a/docs/sources/api/docker_remote_api.rst
+++ b/docs/sources/api/docker_remote_api.rst
@@ -1,3 +1,7 @@
+:title: Remote API
+:description: API Documentation for Docker
+:keywords: API, Docker, rcli, REST, documentation
+
=================
Docker Remote API
=================
@@ -118,7 +122,8 @@ Create a container
.. sourcecode:: http
HTTP/1.1 201 OK
-
+ Content-Type: application/json
+
{
"Id":"e90e34656806"
"Warnings":[]
diff --git a/docs/sources/api/index.rst b/docs/sources/api/index.rst
index 8c118bcbc0..4d8ff3fe67 100644
--- a/docs/sources/api/index.rst
+++ b/docs/sources/api/index.rst
@@ -1,6 +1,6 @@
-:title: docker documentation
+:title: API Documentation
:description: docker documentation
-:keywords:
+:keywords: docker, ipa, documentation
API's
=============
diff --git a/docs/sources/api/registry_api.rst b/docs/sources/api/registry_api.rst
index e299584e17..f33ca187bb 100644
--- a/docs/sources/api/registry_api.rst
+++ b/docs/sources/api/registry_api.rst
@@ -1,4 +1,4 @@
-:title: docker Registry documentation
+:title: Registry Documentation
:description: Documentation for docker Registry and Registry API
:keywords: docker, registry, api, index
diff --git a/docs/sources/commandline/command/attach.rst b/docs/sources/commandline/command/attach.rst
index ac9a84c0cf..4c4c189d8f 100644
--- a/docs/sources/commandline/command/attach.rst
+++ b/docs/sources/commandline/command/attach.rst
@@ -1,3 +1,7 @@
+:title: Attach Command
+:description: Attach to a running container
+:keywords: attach, container, docker, documentation
+
===========================================
``attach`` -- Attach to a running container
===========================================
diff --git a/docs/sources/commandline/command/build.rst b/docs/sources/commandline/command/build.rst
index 8d07c725c2..a8d2093a5b 100644
--- a/docs/sources/commandline/command/build.rst
+++ b/docs/sources/commandline/command/build.rst
@@ -1,3 +1,7 @@
+:title: Build Command
+:description: Build a new image from the Dockerfile passed via stdin
+:keywords: build, docker, container, documentation
+
========================================================
``build`` -- Build a container from Dockerfile via stdin
========================================================
diff --git a/docs/sources/commandline/command/commit.rst b/docs/sources/commandline/command/commit.rst
index 1d5c503414..92f3205662 100644
--- a/docs/sources/commandline/command/commit.rst
+++ b/docs/sources/commandline/command/commit.rst
@@ -1,3 +1,7 @@
+:title: Commit Command
+:description: Create a new image from a container's changes
+:keywords: commit, docker, container, documentation
+
===========================================================
``commit`` -- Create a new image from a container's changes
===========================================================
diff --git a/docs/sources/commandline/command/diff.rst b/docs/sources/commandline/command/diff.rst
index 301da6c499..2901a7f215 100644
--- a/docs/sources/commandline/command/diff.rst
+++ b/docs/sources/commandline/command/diff.rst
@@ -1,3 +1,7 @@
+:title: Diff Command
+:description: Inspect changes on a container's filesystem
+:keywords: diff, docker, container, documentation
+
=======================================================
``diff`` -- Inspect changes on a container's filesystem
=======================================================
diff --git a/docs/sources/commandline/command/export.rst b/docs/sources/commandline/command/export.rst
index 88ecd2fd53..9d7e6b369c 100644
--- a/docs/sources/commandline/command/export.rst
+++ b/docs/sources/commandline/command/export.rst
@@ -1,3 +1,7 @@
+:title: Export Command
+:description: Export the contents of a filesystem as a tar archive
+:keywords: export, docker, container, documentation
+
=================================================================
``export`` -- Stream the contents of a container as a tar archive
=================================================================
diff --git a/docs/sources/commandline/command/history.rst b/docs/sources/commandline/command/history.rst
index 92fad3b487..2f9d3f2814 100644
--- a/docs/sources/commandline/command/history.rst
+++ b/docs/sources/commandline/command/history.rst
@@ -1,3 +1,7 @@
+:title: History Command
+:description: Show the history of an image
+:keywords: history, docker, container, documentation
+
===========================================
``history`` -- Show the history of an image
===========================================
diff --git a/docs/sources/commandline/command/images.rst b/docs/sources/commandline/command/images.rst
index 5bcfe817f4..497bda6e16 100644
--- a/docs/sources/commandline/command/images.rst
+++ b/docs/sources/commandline/command/images.rst
@@ -1,3 +1,7 @@
+:title: Images Command
+:description: List images
+:keywords: images, docker, container, documentation
+
=========================
``images`` -- List images
=========================
diff --git a/docs/sources/commandline/command/import.rst b/docs/sources/commandline/command/import.rst
index 5fe90764b9..34a7138e07 100644
--- a/docs/sources/commandline/command/import.rst
+++ b/docs/sources/commandline/command/import.rst
@@ -1,3 +1,7 @@
+:title: Import Command
+:description: Create a new filesystem image from the contents of a tarball
+:keywords: import, tarball, docker, url, documentation
+
==========================================================================
``import`` -- Create a new filesystem image from the contents of a tarball
==========================================================================
diff --git a/docs/sources/commandline/command/info.rst b/docs/sources/commandline/command/info.rst
index 10697dba18..6df3486c53 100644
--- a/docs/sources/commandline/command/info.rst
+++ b/docs/sources/commandline/command/info.rst
@@ -1,3 +1,7 @@
+:title: Info Command
+:description: Display system-wide information.
+:keywords: info, docker, information, documentation
+
===========================================
``info`` -- Display system-wide information
===========================================
diff --git a/docs/sources/commandline/command/inspect.rst b/docs/sources/commandline/command/inspect.rst
index 34365d1f26..90dbe959eb 100644
--- a/docs/sources/commandline/command/inspect.rst
+++ b/docs/sources/commandline/command/inspect.rst
@@ -1,3 +1,7 @@
+:title: Inspect Command
+:description: Return low-level information on a container
+:keywords: inspect, container, docker, documentation
+
==========================================================
``inspect`` -- Return low-level information on a container
==========================================================
diff --git a/docs/sources/commandline/command/kill.rst b/docs/sources/commandline/command/kill.rst
index cbd019e1a9..f53d3883b0 100644
--- a/docs/sources/commandline/command/kill.rst
+++ b/docs/sources/commandline/command/kill.rst
@@ -1,3 +1,7 @@
+:title: Kill Command
+:description: Kill a running container
+:keywords: kill, container, docker, documentation
+
====================================
``kill`` -- Kill a running container
====================================
diff --git a/docs/sources/commandline/command/login.rst b/docs/sources/commandline/command/login.rst
index b064b40145..bab4fa34e3 100644
--- a/docs/sources/commandline/command/login.rst
+++ b/docs/sources/commandline/command/login.rst
@@ -1,3 +1,7 @@
+:title: Login Command
+:description: Register or Login to the docker registry server
+:keywords: login, docker, documentation
+
============================================================
``login`` -- Register or Login to the docker registry server
============================================================
diff --git a/docs/sources/commandline/command/logs.rst b/docs/sources/commandline/command/logs.rst
index 87f3f95b65..a3423f6e0c 100644
--- a/docs/sources/commandline/command/logs.rst
+++ b/docs/sources/commandline/command/logs.rst
@@ -1,3 +1,7 @@
+:title: Logs Command
+:description: Fetch the logs of a container
+:keywords: logs, container, docker, documentation
+
=========================================
``logs`` -- Fetch the logs of a container
=========================================
diff --git a/docs/sources/commandline/command/port.rst b/docs/sources/commandline/command/port.rst
index 4fb6d7f812..8d59fedab6 100644
--- a/docs/sources/commandline/command/port.rst
+++ b/docs/sources/commandline/command/port.rst
@@ -1,3 +1,7 @@
+:title: Port Command
+:description: Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
+:keywords: port, docker, container, documentation
+
=========================================================================
``port`` -- Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
=========================================================================
diff --git a/docs/sources/commandline/command/ps.rst b/docs/sources/commandline/command/ps.rst
index f73177918b..597dbd9ae7 100644
--- a/docs/sources/commandline/command/ps.rst
+++ b/docs/sources/commandline/command/ps.rst
@@ -1,3 +1,7 @@
+:title: Ps Command
+:description: List containers
+:keywords: ps, docker, documentation, container
+
=========================
``ps`` -- List containers
=========================
diff --git a/docs/sources/commandline/command/pull.rst b/docs/sources/commandline/command/pull.rst
index 1c417ddcde..4348f28d0f 100644
--- a/docs/sources/commandline/command/pull.rst
+++ b/docs/sources/commandline/command/pull.rst
@@ -1,3 +1,7 @@
+:title: Pull Command
+:description: Pull an image or a repository from the registry
+:keywords: pull, image, repo, repository, documentation, docker
+
=========================================================================
``pull`` -- Pull an image or a repository from the docker registry server
=========================================================================
diff --git a/docs/sources/commandline/command/push.rst b/docs/sources/commandline/command/push.rst
index a42296c715..9304f9acc5 100644
--- a/docs/sources/commandline/command/push.rst
+++ b/docs/sources/commandline/command/push.rst
@@ -1,3 +1,7 @@
+:title: Push Command
+:description: Push an image or a repository to the registry
+:keywords: push, docker, image, repository, documentation, repo
+
=======================================================================
``push`` -- Push an image or a repository to the docker registry server
=======================================================================
diff --git a/docs/sources/commandline/command/restart.rst b/docs/sources/commandline/command/restart.rst
index 24bba5a5a9..dfc0dfea6e 100644
--- a/docs/sources/commandline/command/restart.rst
+++ b/docs/sources/commandline/command/restart.rst
@@ -1,3 +1,7 @@
+:title: Restart Command
+:description: Restart a running container
+:keywords: restart, container, docker, documentation
+
==========================================
``restart`` -- Restart a running container
==========================================
diff --git a/docs/sources/commandline/command/rm.rst b/docs/sources/commandline/command/rm.rst
index f6d6893bfb..dc6d91632d 100644
--- a/docs/sources/commandline/command/rm.rst
+++ b/docs/sources/commandline/command/rm.rst
@@ -1,3 +1,7 @@
+:title: Rm Command
+:description: Remove a container
+:keywords: remove, container, docker, documentation, rm
+
============================
``rm`` -- Remove a container
============================
diff --git a/docs/sources/commandline/command/rmi.rst b/docs/sources/commandline/command/rmi.rst
index 3761196f23..a0131886d6 100644
--- a/docs/sources/commandline/command/rmi.rst
+++ b/docs/sources/commandline/command/rmi.rst
@@ -1,3 +1,7 @@
+:title: Rmi Command
+:description: Remove an image
+:keywords: rmi, remove, image, docker, documentation
+
==========================
``rmi`` -- Remove an image
==========================
diff --git a/docs/sources/commandline/command/run.rst b/docs/sources/commandline/command/run.rst
index 95fb208dd3..d6c9aef315 100644
--- a/docs/sources/commandline/command/run.rst
+++ b/docs/sources/commandline/command/run.rst
@@ -1,3 +1,7 @@
+:title: Run Command
+:description: Run a command in a new container
+:keywords: run, container, docker, documentation
+
===========================================
``run`` -- Run a command in a new container
===========================================
@@ -19,5 +23,5 @@
-t=false: Allocate a pseudo-tty
-u="": Username or UID
-d=[]: Set custom dns servers for the container
- -v=[]: Creates a new volumes and mount it at the specified path.
+ -v=[]: Creates a new volume and mounts it at the specified path.
-volumes-from="": Mount all volumes from the given container.
diff --git a/docs/sources/commandline/command/search.rst b/docs/sources/commandline/command/search.rst
index 0af24dfaf5..2f07e20c3a 100644
--- a/docs/sources/commandline/command/search.rst
+++ b/docs/sources/commandline/command/search.rst
@@ -1,3 +1,7 @@
+:title: Search Command
+:description: Searches for the TERM parameter on the Docker index and prints out a list of repositories that match.
+:keywords: search, docker, image, documentation
+
===================================================================
``search`` -- Search for an image in the docker index
===================================================================
diff --git a/docs/sources/commandline/command/start.rst b/docs/sources/commandline/command/start.rst
index df415ca3d3..b70ad21cfd 100644
--- a/docs/sources/commandline/command/start.rst
+++ b/docs/sources/commandline/command/start.rst
@@ -1,3 +1,7 @@
+:title: Start Command
+:description: Start a stopped container
+:keywords: start, docker, container, documentation
+
======================================
``start`` -- Start a stopped container
======================================
diff --git a/docs/sources/commandline/command/stop.rst b/docs/sources/commandline/command/stop.rst
index df6d66ccf9..3d571563ec 100644
--- a/docs/sources/commandline/command/stop.rst
+++ b/docs/sources/commandline/command/stop.rst
@@ -1,3 +1,7 @@
+:title: Stop Command
+:description: Stop a running container
+:keywords: stop, container, docker, documentation
+
====================================
``stop`` -- Stop a running container
====================================
diff --git a/docs/sources/commandline/command/tag.rst b/docs/sources/commandline/command/tag.rst
index 59647355e9..a9e831aae9 100644
--- a/docs/sources/commandline/command/tag.rst
+++ b/docs/sources/commandline/command/tag.rst
@@ -1,3 +1,7 @@
+:title: Tag Command
+:description: Tag an image into a repository
+:keywords: tag, docker, image, repository, documentation, repo
+
=========================================
``tag`` -- Tag an image into a repository
=========================================
diff --git a/docs/sources/commandline/command/version.rst b/docs/sources/commandline/command/version.rst
index eedf02f2d0..fb3d3b450e 100644
--- a/docs/sources/commandline/command/version.rst
+++ b/docs/sources/commandline/command/version.rst
@@ -1,3 +1,7 @@
+:title: Version Command
+:description:
+:keywords: version, docker, documentation
+
==================================================
``version`` -- Show the docker version information
==================================================
diff --git a/docs/sources/commandline/command/wait.rst b/docs/sources/commandline/command/wait.rst
index 2959bf880b..23bd54513c 100644
--- a/docs/sources/commandline/command/wait.rst
+++ b/docs/sources/commandline/command/wait.rst
@@ -1,3 +1,7 @@
+:title: Wait Command
+:description: Block until a container stops, then print its exit code.
+:keywords: wait, docker, container, documentation
+
===================================================================
``wait`` -- Block until a container stops, then print its exit code
===================================================================
diff --git a/docs/sources/commandline/index.rst b/docs/sources/commandline/index.rst
index fecf8e4885..f1a3e2da45 100644
--- a/docs/sources/commandline/index.rst
+++ b/docs/sources/commandline/index.rst
@@ -1,6 +1,6 @@
-:title: docker documentation
+:title: Commands
:description: -- todo: change me
-:keywords: todo: change me
+:keywords: todo, commands, command line, help, docker, documentation
Commands
diff --git a/docs/sources/concepts/buildingblocks.rst b/docs/sources/concepts/buildingblocks.rst
index 154ef00f45..5f752ea47b 100644
--- a/docs/sources/concepts/buildingblocks.rst
+++ b/docs/sources/concepts/buildingblocks.rst
@@ -1,4 +1,4 @@
-:title: Building blocks
+:title: Building Blocks
:description: An introduction to docker and standard containers?
:keywords: containers, lxc, concepts, explanation
diff --git a/docs/sources/concepts/containers.rst b/docs/sources/concepts/containers.rst
index 8378a7e29f..e08c3654c0 100644
--- a/docs/sources/concepts/containers.rst
+++ b/docs/sources/concepts/containers.rst
@@ -1,6 +1,6 @@
:title: Introduction
:description: An introduction to docker and standard containers?
-:keywords: containers, lxc, concepts, explanation
+:keywords: containers, lxc, concepts, explanation, docker, documentation
:note: This version of the introduction is temporary, just to make sure we don't break the links from the website when the documentation is updated
diff --git a/docs/sources/concepts/index.rst b/docs/sources/concepts/index.rst
index d8e1af5770..ba1f9f4718 100644
--- a/docs/sources/concepts/index.rst
+++ b/docs/sources/concepts/index.rst
@@ -1,6 +1,6 @@
-:title: docker documentation
+:title: Concepts
:description: -- todo: change me
-:keywords: todo: change me
+:keywords: concepts, documentation, docker, containers
diff --git a/docs/sources/contributing/contributing.rst b/docs/sources/contributing/contributing.rst
index 7b2b4da2d3..c2bd7c80fb 100644
--- a/docs/sources/contributing/contributing.rst
+++ b/docs/sources/contributing/contributing.rst
@@ -1,3 +1,7 @@
+:title: Contribution Guidelines
+:description: Contribution guidelines: create issues, convetions, pull requests
+:keywords: contributing, docker, documentation, help, guideline
+
Contributing to Docker
======================
diff --git a/docs/sources/examples/python_web_app.rst b/docs/sources/examples/python_web_app.rst
index 992a09dc42..3dd25015f1 100644
--- a/docs/sources/examples/python_web_app.rst
+++ b/docs/sources/examples/python_web_app.rst
@@ -40,7 +40,7 @@ We attach to the new container to see what is going on. Ctrl-C to disconnect
.. code-block:: bash
- BUILD_IMG=$(docker commit $BUILD_JOB _/builds/github.com/hykes/helloflask/master)
+ BUILD_IMG=$(docker commit $BUILD_JOB _/builds/github.com/shykes/helloflask/master)
Save the changed we just made in the container to a new image called "_/builds/github.com/hykes/helloflask/master" and save the image id in the BUILD_IMG variable name.
@@ -58,7 +58,7 @@ Use the new image we just created and create a new container with network port 5
.. code-block:: bash
docker logs $WEB_WORKER
- * Running on \http://0.0.0.0:5000/
+ * Running on http://0.0.0.0:5000/
view the logs for the new container using the WEB_WORKER variable, and if everything worked as planned you should see the line "Running on http://0.0.0.0:5000/" in the log output.
@@ -70,7 +70,7 @@ lookup the public-facing port which is NAT-ed store the private port used by the
.. code-block:: bash
- curl \http://`hostname`:$WEB_PORT
+ curl http://`hostname`:$WEB_PORT
Hello world!
access the web app using curl. If everything worked as planned you should see the line "Hello world!" inside of your console.
diff --git a/docs/sources/faq.rst b/docs/sources/faq.rst
index b96ed06437..901e51ddbb 100644
--- a/docs/sources/faq.rst
+++ b/docs/sources/faq.rst
@@ -1,3 +1,7 @@
+:title: FAQ
+:description: Most frequently asked questions.
+:keywords: faq, questions, documentation, docker
+
FAQ
===
diff --git a/docs/sources/index/variable.rst b/docs/sources/index/variable.rst
index efbcfae80c..90eac3af8a 100644
--- a/docs/sources/index/variable.rst
+++ b/docs/sources/index/variable.rst
@@ -1,3 +1,7 @@
+:title: Index Environment Variable
+:description: Setting this environment variable on the docker server will change the URL docker index.
+:keywords: docker, index environment variable, documentation
+
=================================
Docker Index Environment Variable
=================================
diff --git a/docs/sources/installation/amazon.rst b/docs/sources/installation/amazon.rst
index 64ff20f8be..59896bb63c 100644
--- a/docs/sources/installation/amazon.rst
+++ b/docs/sources/installation/amazon.rst
@@ -1,3 +1,7 @@
+:title: Installation on Amazon EC2
+:description: Docker installation on Amazon EC2 with a single vagrant command. Vagrant 1.1 or higher is required.
+:keywords: amazon ec2, virtualization, cloud, docker, documentation, installation
+
Amazon EC2
==========
diff --git a/docs/sources/installation/archlinux.rst b/docs/sources/installation/archlinux.rst
index db013c6cb9..9e3766eb26 100644
--- a/docs/sources/installation/archlinux.rst
+++ b/docs/sources/installation/archlinux.rst
@@ -1,3 +1,7 @@
+:title: Installation on Arch Linux
+:description: Docker installation on Arch Linux.
+:keywords: arch linux, virtualization, docker, documentation, installation
+
.. _arch_linux:
Arch Linux
diff --git a/docs/sources/installation/binaries.rst b/docs/sources/installation/binaries.rst
index 25d13ab68e..8bab5695cd 100644
--- a/docs/sources/installation/binaries.rst
+++ b/docs/sources/installation/binaries.rst
@@ -1,3 +1,7 @@
+:title: Installation from Binaries
+:description: This instruction set is meant for hackers who want to try out Docker on a variety of environments.
+:keywords: binaries, installation, docker, documentation, linux
+
.. _binaries:
Binaries
diff --git a/docs/sources/installation/index.rst b/docs/sources/installation/index.rst
index 1976f30ba0..9f831091cf 100644
--- a/docs/sources/installation/index.rst
+++ b/docs/sources/installation/index.rst
@@ -1,6 +1,6 @@
-:title: docker documentation
+:title: Documentation
:description: -- todo: change me
-:keywords: todo: change me
+:keywords: todo, docker, documentation, installation, OS support
diff --git a/docs/sources/installation/kernel.rst b/docs/sources/installation/kernel.rst
index 2ec5940a7f..6f242e9e10 100644
--- a/docs/sources/installation/kernel.rst
+++ b/docs/sources/installation/kernel.rst
@@ -1,63 +1,35 @@
+:title: Kernel Requirements
+:description: Kernel supports
+:keywords: kernel requirements, kernel support, docker, installation, cgroups, namespaces
+
.. _kernel:
Kernel Requirements
===================
+In short, Docker has the following kernel requirements:
+
+- Linux version 3.8 or above.
+
+- `AUFS support `_.
+
+- Cgroups and namespaces must be enabled.
+
+
The officially supported kernel is the one recommended by the
:ref:`ubuntu_linux` installation path. It is the one that most developers
will use, and the one that receives the most attention from the core
contributors. If you decide to go with a different kernel and hit a bug,
please try to reproduce it with the official kernels first.
-If for some reason you cannot or do not want to use the "official" kernels,
+If you cannot or do not want to use the "official" kernels,
here is some technical background about the features (both optional and
mandatory) that docker needs to run successfully.
-In short, you need kernel version 3.8 (or above), compiled to include
-`AUFS support `_. Of course, you need to
-enable cgroups and namespaces.
+Linux version 3.8 or above
+--------------------------
-
-Namespaces and Cgroups
-----------------------
-
-You need to enable namespaces and cgroups, to the extend of what is needed
-to run LXC containers. Technically, while namespaces have been introduced
-in the early 2.6 kernels, we do not advise to try any kernel before 2.6.32
-to run LXC containers. Note that 2.6.32 has some documented issues regarding
-network namespace setup and teardown; those issues are not a risk if you
-run containers in a private environment, but can lead to denial-of-service
-attacks if you want to run untrusted code in your containers. For more details,
-see `[LP#720095 `_.
-
-Kernels 2.6.38, and every version since 3.2, have been deployed successfully
-to run containerized production workloads. Feature-wise, there is no huge
-improvement between 2.6.38 and up to 3.6 (as far as docker is concerned!).
-
-Starting with version 3.7, the kernel has basic support for
-`Checkpoint/Restore In Userspace `_, which is not used by
-docker at this point, but allows to suspend the state of a container to
-disk and resume it later.
-
-Version 3.8 provides improvements in stability, which are deemed necessary
-for the operation of docker. Versions 3.2 to 3.5 have been shown to
-exhibit a reproducible bug (for more details, see issue
-`#407 `_).
-
-Version 3.8 also brings better support for the
-`setns() syscall `_ -- but this should not
-be a concern since docker does not leverage on this feature for now.
-
-If you want a technical overview about those concepts, you might
-want to check those articles on dotCloud's blog:
-`about namespaces `_
-and `about cgroups `_.
-
-
-Important Note About Pre-3.8 Kernels
-------------------------------------
-
-As mentioned above, kernels before 3.8 are not stable when used with docker.
+Kernel versions 3.2 to 3.5 are not stable when used with docker.
In some circumstances, you will experience kernel "oopses", or even crashes.
The symptoms include:
@@ -77,6 +49,36 @@ detects something older than 3.8.
See issue `#407 `_ for details.
+AUFS support
+------------
+
+Docker currently relies on AUFS, an unioning filesystem.
+While AUFS is included in the kernels built by the Debian and Ubuntu
+distributions, is not part of the standard kernel. This means that if
+you decide to roll your own kernel, you will have to patch your
+kernel tree to add AUFS. The process is documented on
+`AUFS webpage `_.
+
+
+Cgroups and namespaces
+----------------------
+
+You need to enable namespaces and cgroups, to the extend of what is needed
+to run LXC containers. Technically, while namespaces have been introduced
+in the early 2.6 kernels, we do not advise to try any kernel before 2.6.32
+to run LXC containers. Note that 2.6.32 has some documented issues regarding
+network namespace setup and teardown; those issues are not a risk if you
+run containers in a private environment, but can lead to denial-of-service
+attacks if you want to run untrusted code in your containers. For more details,
+see `[LP#720095 `_.
+
+Kernels 2.6.38, and every version since 3.2, have been deployed successfully
+to run containerized production workloads. Feature-wise, there is no huge
+improvement between 2.6.38 and up to 3.6 (as far as docker is concerned!).
+
+
+
+
Extra Cgroup Controllers
------------------------
@@ -111,39 +113,3 @@ And replace it by the following one::
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount"
Then run ``update-grub``, and reboot.
-
-
-AUFS
-----
-
-Docker currently relies on AUFS, an unioning filesystem.
-While AUFS is included in the kernels built by the Debian and Ubuntu
-distributions, is not part of the standard kernel. This means that if
-you decide to roll your own kernel, you will have to patch your
-kernel tree to add AUFS. The process is documented on
-`AUFS webpage `_.
-
-Note: the AUFS patch is fairly intrusive, but for the record, people have
-successfully applied GRSEC and AUFS together, to obtain hardened production
-kernels.
-
-If you want more information about that topic, there is an
-`article about AUFS on dotCloud's blog
-`_.
-
-
-BTRFS, ZFS, OverlayFS...
-------------------------
-
-There is ongoing development on docker, to implement support for
-`BTRFS `_
-(see github issue `#443 `_).
-
-People have also showed interest for `ZFS `_
-(using e.g. `ZFS-on-Linux `_) and OverlayFS.
-The latter is functionally close to AUFS, and it might end up being included
-in the stock kernel; so it's a strong candidate!
-
-Would you like to `contribute
-`_
-support for your favorite filesystem?
diff --git a/docs/sources/installation/rackspace.rst b/docs/sources/installation/rackspace.rst
index dfb88aee84..7482404683 100644
--- a/docs/sources/installation/rackspace.rst
+++ b/docs/sources/installation/rackspace.rst
@@ -1,3 +1,7 @@
+:title: Rackspace Cloud Installation
+:description: Installing Docker on Ubuntu proviced by Rackspace
+:keywords: Rackspace Cloud, installation, docker, linux, ubuntu
+
===============
Rackspace Cloud
===============
diff --git a/docs/sources/installation/ubuntulinux.rst b/docs/sources/installation/ubuntulinux.rst
index de4a2bb9ca..6d2d3e671d 100644
--- a/docs/sources/installation/ubuntulinux.rst
+++ b/docs/sources/installation/ubuntulinux.rst
@@ -1,3 +1,7 @@
+:title: Requirements and Installation on Ubuntu Linux
+:description: Please note this project is currently under heavy development. It should not be used in production.
+:keywords: Docker, Docker documentation, requirements, virtualbox, vagrant, git, ssh, putty, cygwin, linux
+
.. _ubuntu_linux:
Ubuntu Linux
diff --git a/docs/sources/installation/upgrading.rst b/docs/sources/installation/upgrading.rst
index 8dfde73891..9fa47904be 100644
--- a/docs/sources/installation/upgrading.rst
+++ b/docs/sources/installation/upgrading.rst
@@ -1,3 +1,7 @@
+:title: Upgrading
+:description: These instructions are for upgrading Docker
+:keywords: Docker, Docker documentation, upgrading docker, upgrade
+
.. _upgrading:
Upgrading
diff --git a/docs/sources/installation/vagrant.rst b/docs/sources/installation/vagrant.rst
index d1a76b5a2b..24a1e91354 100644
--- a/docs/sources/installation/vagrant.rst
+++ b/docs/sources/installation/vagrant.rst
@@ -1,3 +1,6 @@
+:title: Using Vagrant (Mac, Linux)
+:description: This guide will setup a new virtualbox virtual machine with docker installed on your computer.
+:keywords: Docker, Docker documentation, virtualbox, vagrant, git, ssh, putty, cygwin
.. _install_using_vagrant:
diff --git a/docs/sources/toctree.rst b/docs/sources/toctree.rst
index 09f2a7af5b..ae6d5f010c 100644
--- a/docs/sources/toctree.rst
+++ b/docs/sources/toctree.rst
@@ -1,6 +1,6 @@
-:title: docker documentation
-:description: docker documentation
-:keywords:
+:title: Documentation
+:description: -- todo: change me
+:keywords: todo, docker, documentation, installation, usage, examples, contributing, faq, command line, concepts
Documentation
=============
diff --git a/docs/sources/use/basics.rst b/docs/sources/use/basics.rst
index c71147e3f2..4c450fbc97 100644
--- a/docs/sources/use/basics.rst
+++ b/docs/sources/use/basics.rst
@@ -1,6 +1,6 @@
-:title: Base commands
+:title: Basic Commands
:description: Common usage and commands
-:keywords: Examples, Usage
+:keywords: Examples, Usage, basic commands, docker, documentation, examples
The basics
diff --git a/docs/sources/use/builder.rst b/docs/sources/use/builder.rst
index 84d275782e..4e53ed4a79 100644
--- a/docs/sources/use/builder.rst
+++ b/docs/sources/use/builder.rst
@@ -1,3 +1,7 @@
+:title: Docker Builder
+:description: Docker Builder specifes a simple DSL which allows you to automate the steps you would normally manually take to create an image.
+:keywords: builder, docker, Docker Builder, automation, image creation
+
==============
Docker Builder
==============
diff --git a/docs/sources/use/index.rst b/docs/sources/use/index.rst
index 9939dc7ea8..a1086c1fd2 100644
--- a/docs/sources/use/index.rst
+++ b/docs/sources/use/index.rst
@@ -1,6 +1,6 @@
-:title: docker documentation
+:title: Documentation
:description: -- todo: change me
-:keywords: todo: change me
+:keywords: todo, docker, documentation, basic, builder
diff --git a/docs/sources/use/puppet.rst b/docs/sources/use/puppet.rst
index af2d5c8d57..1c48aec8e5 100644
--- a/docs/sources/use/puppet.rst
+++ b/docs/sources/use/puppet.rst
@@ -1,3 +1,6 @@
+:title: Puppet Usage
+:description: Installating and using Puppet
+:keywords: puppet, installation, usage, docker, documentation
.. _install_using_puppet:
diff --git a/docs/sources/use/workingwithrepository.rst b/docs/sources/use/workingwithrepository.rst
index c1ce7f455e..9a2f96cf0d 100644
--- a/docs/sources/use/workingwithrepository.rst
+++ b/docs/sources/use/workingwithrepository.rst
@@ -1,3 +1,7 @@
+:title: Working With Repositories
+:description: Generally, there are two types of repositories: Top-level repositories which are controlled by the people behind Docker, and user repositories.
+:keywords: repo, repositiores, usage, pull image, push image, image, documentation
+
.. _working_with_the_repository:
Working with the repository
diff --git a/docs/theme/docker/layout.html b/docs/theme/docker/layout.html
index aa5a24d496..d212c9ca86 100755
--- a/docs/theme/docker/layout.html
+++ b/docs/theme/docker/layout.html
@@ -8,7 +8,7 @@
- Docker - {{ meta['title'] if meta and meta['title'] else title }}
+ {{ meta['title'] if meta and meta['title'] else title }} - Docker Documentation
diff --git a/docs/website/index.html b/docs/website/index.html
index 2dad365ce4..d441ed8d78 100644
--- a/docs/website/index.html
+++ b/docs/website/index.html
@@ -198,6 +198,35 @@