|
@@ -23,6 +23,7 @@ import (
|
|
|
"os/signal"
|
|
|
"path/filepath"
|
|
|
"reflect"
|
|
|
+ "regexp"
|
|
|
"runtime"
|
|
|
"sort"
|
|
|
"strconv"
|
|
@@ -504,8 +505,7 @@ func (cli *DockerCli) CmdStop(args ...string) error {
|
|
|
v.Set("t", strconv.Itoa(*nSeconds))
|
|
|
|
|
|
for _, name := range cmd.Args() {
|
|
|
- encName := cleanName(name)
|
|
|
- _, _, err := cli.call("POST", "/containers/"+encName+"/stop?"+v.Encode(), nil)
|
|
|
+ _, _, err := cli.call("POST", "/containers/"+name+"/stop?"+v.Encode(), nil)
|
|
|
if err != nil {
|
|
|
fmt.Fprintf(cli.err, "%s\n", err)
|
|
|
} else {
|
|
@@ -530,8 +530,7 @@ func (cli *DockerCli) CmdRestart(args ...string) error {
|
|
|
v.Set("t", strconv.Itoa(*nSeconds))
|
|
|
|
|
|
for _, name := range cmd.Args() {
|
|
|
- encName := cleanName(name)
|
|
|
- _, _, err := cli.call("POST", "/containers/"+encName+"/restart?"+v.Encode(), nil)
|
|
|
+ _, _, err := cli.call("POST", "/containers/"+name+"/restart?"+v.Encode(), nil)
|
|
|
if err != nil {
|
|
|
fmt.Fprintf(cli.err, "%s\n", err)
|
|
|
} else {
|
|
@@ -607,8 +606,7 @@ func (cli *DockerCli) CmdStart(args ...string) error {
|
|
|
|
|
|
var encounteredError error
|
|
|
for _, name := range cmd.Args() {
|
|
|
- encName := cleanName(name)
|
|
|
- _, _, err := cli.call("POST", "/containers/"+encName+"/start", nil)
|
|
|
+ _, _, err := cli.call("POST", "/containers/"+name+"/start", nil)
|
|
|
if err != nil {
|
|
|
if !*attach || !*openStdin {
|
|
|
fmt.Fprintf(cli.err, "%s\n", err)
|
|
@@ -831,8 +829,7 @@ func (cli *DockerCli) CmdRm(args ...string) error {
|
|
|
val.Set("link", "1")
|
|
|
}
|
|
|
for _, name := range cmd.Args() {
|
|
|
- encName := cleanName(name)
|
|
|
- _, _, err := cli.call("DELETE", "/containers/"+encName+"?"+val.Encode(), nil)
|
|
|
+ _, _, err := cli.call("DELETE", "/containers/"+name+"?"+val.Encode(), nil)
|
|
|
if err != nil {
|
|
|
fmt.Fprintf(cli.err, "%s\n", err)
|
|
|
} else {
|
|
@@ -854,8 +851,7 @@ func (cli *DockerCli) CmdKill(args ...string) error {
|
|
|
}
|
|
|
|
|
|
for _, name := range args {
|
|
|
- encName := cleanName(name)
|
|
|
- _, _, err := cli.call("POST", "/containers/"+encName+"/kill", nil)
|
|
|
+ _, _, err := cli.call("POST", "/containers/"+name+"/kill", nil)
|
|
|
if err != nil {
|
|
|
fmt.Fprintf(cli.err, "%s\n", err)
|
|
|
} else {
|
|
@@ -1363,7 +1359,7 @@ func (cli *DockerCli) CmdLogs(args ...string) error {
|
|
|
cmd.Usage()
|
|
|
return nil
|
|
|
}
|
|
|
- name := cleanName(cmd.Arg(0))
|
|
|
+ name := cmd.Arg(0)
|
|
|
|
|
|
if err := cli.hijack("POST", "/containers/"+name+"/attach?logs=1&stdout=1&stderr=1", false, nil, cli.out, cli.err, nil); err != nil {
|
|
|
return err
|
|
@@ -1383,7 +1379,6 @@ func (cli *DockerCli) CmdAttach(args ...string) error {
|
|
|
return nil
|
|
|
}
|
|
|
name := cmd.Arg(0)
|
|
|
- name = cleanName(name)
|
|
|
body, _, err := cli.call("GET", "/containers/"+name+"/json", nil)
|
|
|
if err != nil {
|
|
|
return err
|
|
@@ -1799,6 +1794,10 @@ func (cli *DockerCli) call(method, path string, data interface{}) ([]byte, int,
|
|
|
params = bytes.NewBuffer(buf)
|
|
|
}
|
|
|
|
|
|
+ // fixme: refactor client to support redirect
|
|
|
+ re := regexp.MustCompile("/+")
|
|
|
+ path = re.ReplaceAllString(path, "/")
|
|
|
+
|
|
|
req, err := http.NewRequest(method, fmt.Sprintf("/v%g%s", APIVERSION, path), params)
|
|
|
if err != nil {
|
|
|
return nil, -1, err
|
|
@@ -1845,6 +1844,11 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer, h
|
|
|
if (method == "POST" || method == "PUT") && in == nil {
|
|
|
in = bytes.NewReader([]byte{})
|
|
|
}
|
|
|
+
|
|
|
+ // fixme: refactor client to support redirect
|
|
|
+ re := regexp.MustCompile("/+")
|
|
|
+ path = re.ReplaceAllString(path, "/")
|
|
|
+
|
|
|
req, err := http.NewRequest(method, fmt.Sprintf("/v%g%s", APIVERSION, path), in)
|
|
|
if err != nil {
|
|
|
return err
|
|
@@ -1901,6 +1905,9 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer, h
|
|
|
}
|
|
|
|
|
|
func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in io.ReadCloser, stdout, stderr io.Writer, started chan bool) error {
|
|
|
+ // fixme: refactor client to support redirect
|
|
|
+ re := regexp.MustCompile("/+")
|
|
|
+ path = re.ReplaceAllString(path, "/")
|
|
|
|
|
|
req, err := http.NewRequest(method, fmt.Sprintf("/v%g%s", APIVERSION, path), nil)
|
|
|
if err != nil {
|
|
@@ -2081,10 +2088,6 @@ func getExitCode(cli *DockerCli, containerId string) (bool, int, error) {
|
|
|
return c.State.Running, c.State.ExitCode, nil
|
|
|
}
|
|
|
|
|
|
-func cleanName(name string) string {
|
|
|
- return strings.Replace(name, "/", "%252F", -1)
|
|
|
-}
|
|
|
-
|
|
|
func NewDockerCli(in io.ReadCloser, out, err io.Writer, proto, addr string) *DockerCli {
|
|
|
var (
|
|
|
isTerminal = false
|