mirror of https://github.com/docker/docs.git
Merge pull request #796 from jimmyxian/refresh-container
Add Refresh container
This commit is contained in:
commit
a3950e7f65
|
@ -532,6 +532,29 @@ func proxyContainer(c *context, w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
}
|
||||
|
||||
// Proxy a request to the right node and force refresh container
|
||||
func proxyContainerAndForceRefresh(c *context, w http.ResponseWriter, r *http.Request) {
|
||||
name, container, err := getContainerFromVars(c, mux.Vars(r))
|
||||
if err != nil {
|
||||
httpError(w, err.Error(), http.StatusNotFound)
|
||||
return
|
||||
}
|
||||
|
||||
// Set the full container ID in the proxied URL path.
|
||||
if name != "" {
|
||||
r.URL.Path = strings.Replace(r.URL.Path, name, container.Id, 1)
|
||||
}
|
||||
|
||||
cb := func(resp *http.Response) {
|
||||
// force fresh container
|
||||
container.Refresh()
|
||||
}
|
||||
|
||||
if err := proxyAsync(c.tlsConfig, container.Engine.Addr, w, r, cb); err != nil {
|
||||
httpError(w, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
// Proxy a request to the right node
|
||||
func proxyImage(c *context, w http.ResponseWriter, r *http.Request) {
|
||||
name := mux.Vars(r)["name"]
|
||||
|
|
|
@ -52,14 +52,14 @@ var routes = map[string]map[string]handler{
|
|||
"/images/{name:.*}/push": proxyImage,
|
||||
"/images/{name:.*}/tag": proxyImageAndForceRefresh,
|
||||
"/containers/create": postContainersCreate,
|
||||
"/containers/{name:.*}/kill": proxyContainer,
|
||||
"/containers/{name:.*}/pause": proxyContainer,
|
||||
"/containers/{name:.*}/unpause": proxyContainer,
|
||||
"/containers/{name:.*}/kill": proxyContainerAndForceRefresh,
|
||||
"/containers/{name:.*}/pause": proxyContainerAndForceRefresh,
|
||||
"/containers/{name:.*}/unpause": proxyContainerAndForceRefresh,
|
||||
"/containers/{name:.*}/rename": postRenameContainer,
|
||||
"/containers/{name:.*}/restart": proxyContainer,
|
||||
"/containers/{name:.*}/start": proxyContainer,
|
||||
"/containers/{name:.*}/stop": proxyContainer,
|
||||
"/containers/{name:.*}/wait": proxyContainer,
|
||||
"/containers/{name:.*}/restart": proxyContainerAndForceRefresh,
|
||||
"/containers/{name:.*}/start": proxyContainerAndForceRefresh,
|
||||
"/containers/{name:.*}/stop": proxyContainerAndForceRefresh,
|
||||
"/containers/{name:.*}/wait": proxyContainerAndForceRefresh,
|
||||
"/containers/{name:.*}/resize": proxyContainer,
|
||||
"/containers/{name:.*}/attach": proxyHijack,
|
||||
"/containers/{name:.*}/copy": proxyContainer,
|
||||
|
|
|
@ -82,14 +82,14 @@ func proxyAsync(tlsConfig *tls.Config, addr string, w http.ResponseWriter, r *ht
|
|||
w.WriteHeader(resp.StatusCode)
|
||||
io.Copy(NewWriteFlusher(w), resp.Body)
|
||||
|
||||
// cleanup
|
||||
resp.Body.Close()
|
||||
closeIdleConnections(client)
|
||||
|
||||
if callback != nil {
|
||||
callback(resp)
|
||||
}
|
||||
|
||||
// cleanup
|
||||
resp.Body.Close()
|
||||
closeIdleConnections(client)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -10,3 +10,8 @@ type Container struct {
|
|||
Info dockerclient.ContainerInfo
|
||||
Engine *Engine
|
||||
}
|
||||
|
||||
// Refresh container
|
||||
func (c *Container) Refresh() error {
|
||||
return c.Engine.refreshContainer(c.Id, true)
|
||||
}
|
||||
|
|
|
@ -19,8 +19,7 @@ function teardown() {
|
|||
docker_swarm run -d --name test_container busybox sleep 500
|
||||
|
||||
# make sure container is up
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
|
||||
# grab the checksum of the test file inside the container.
|
||||
run docker_swarm exec test_container md5sum $test_file
|
||||
|
|
|
@ -13,8 +13,7 @@ function teardown() {
|
|||
docker_swarm run -d --name test_container busybox sleep 500
|
||||
|
||||
# make sure container is up
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
|
||||
# no changes
|
||||
run docker_swarm diff test_container
|
||||
|
|
|
@ -20,8 +20,7 @@ function teardown() {
|
|||
docker_swarm start test_container
|
||||
|
||||
# make sure container is up and not paused
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
|
||||
run docker_swarm exec test_container echo foobar
|
||||
[ "$status" -eq 0 ]
|
||||
|
|
|
@ -14,14 +14,12 @@ function teardown() {
|
|||
docker_swarm run -d --name test_container busybox sleep 1000
|
||||
|
||||
# make sure container is up before killing
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
|
||||
# kill
|
||||
docker_swarm kill test_container
|
||||
|
||||
# verify
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=exited) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=exited) ]
|
||||
[ $(docker_swarm inspect -f '{{ .State.ExitCode }}' test_container) -eq 137 ]
|
||||
}
|
||||
|
|
|
@ -16,12 +16,10 @@ function teardown() {
|
|||
docker_swarm run -d --name test_container busybox sleep 1000
|
||||
|
||||
# make sure container is up
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
|
||||
docker_swarm pause test_container
|
||||
|
||||
# verify
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=paused) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=paused) ]
|
||||
}
|
||||
|
|
|
@ -13,8 +13,7 @@ function teardown() {
|
|||
docker_swarm run -d -p 8000 --name test_container busybox sleep 500
|
||||
|
||||
# make sure container is up
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
|
||||
# port verify
|
||||
run docker_swarm port test_container
|
||||
|
|
|
@ -14,8 +14,7 @@ function teardown() {
|
|||
docker_swarm run -d --name test_container busybox sleep 1000
|
||||
|
||||
# make sure container is up
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
|
||||
# Keep track of when the container was started.
|
||||
local started_at=$(docker_swarm inspect -f '{{ .State.StartedAt }}' test_container)
|
||||
|
@ -25,7 +24,6 @@ function teardown() {
|
|||
|
||||
# verify
|
||||
run docker_swarm ps -l
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
[ "$(docker_swarm inspect -f '{{ .State.StartedAt }}' test_container)" != "$started_at" ]
|
||||
}
|
||||
|
|
|
@ -32,8 +32,7 @@ function teardown() {
|
|||
docker_swarm run -d --name test_container busybox sleep 500
|
||||
|
||||
# make sure container exsists and is up
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
|
||||
# rm, remove a running container, return error
|
||||
run docker_swarm rm test_container
|
||||
|
|
|
@ -19,6 +19,5 @@ function teardown() {
|
|||
docker_swarm run -d --name test_container busybox sleep 100
|
||||
|
||||
# verify, container is running
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
}
|
||||
|
|
|
@ -23,6 +23,5 @@ function teardown() {
|
|||
docker_swarm start test_container
|
||||
|
||||
# Verify
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
}
|
||||
|
|
|
@ -16,8 +16,7 @@ function teardown() {
|
|||
docker_swarm run -d --name test_container busybox sleep 50
|
||||
|
||||
# make sure container is up
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
|
||||
# storage the stats output in TEMP_FILE
|
||||
# it will stop automatically when manager stop
|
||||
|
|
|
@ -14,13 +14,11 @@ function teardown() {
|
|||
docker_swarm run -d --name test_container busybox sleep 500
|
||||
|
||||
# make sure container is up before stop
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
|
||||
# stop
|
||||
docker_swarm stop test_container
|
||||
|
||||
# verify
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=exited) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=exited) ]
|
||||
}
|
||||
|
|
|
@ -14,8 +14,7 @@ function teardown() {
|
|||
docker_swarm run -d --name test_container busybox sleep 500
|
||||
|
||||
# make sure container is running
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
|
||||
run docker_swarm top test_container
|
||||
[ "$status" -eq 0 ]
|
||||
|
|
|
@ -14,19 +14,16 @@ function teardown() {
|
|||
docker_swarm run -d --name test_container busybox sleep 1000
|
||||
|
||||
# make sure container is up
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
|
||||
# pause
|
||||
docker_swarm pause test_container
|
||||
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=paused) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=paused) ]
|
||||
|
||||
# unpause
|
||||
docker_swarm unpause test_container
|
||||
|
||||
# verify
|
||||
# FIXME(#748): Retry required because of race condition.
|
||||
retry 5 0.5 eval "[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]"
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue