* Runtime: allow multiple params in inspect
| ... | ... |
@@ -460,7 +460,7 @@ func (cli *DockerCli) CmdStop(args ...string) error {
|
| 460 | 460 |
for _, name := range cmd.Args() {
|
| 461 | 461 |
_, _, err := cli.call("POST", "/containers/"+name+"/stop?"+v.Encode(), nil)
|
| 462 | 462 |
if err != nil {
|
| 463 |
- fmt.Printf("%s", err)
|
|
| 463 |
+ fmt.Fprintf(os.Stderr, "%s", err) |
|
| 464 | 464 |
} else {
|
| 465 | 465 |
fmt.Println(name) |
| 466 | 466 |
} |
| ... | ... |
@@ -485,7 +485,7 @@ func (cli *DockerCli) CmdRestart(args ...string) error {
|
| 485 | 485 |
for _, name := range cmd.Args() {
|
| 486 | 486 |
_, _, err := cli.call("POST", "/containers/"+name+"/restart?"+v.Encode(), nil)
|
| 487 | 487 |
if err != nil {
|
| 488 |
- fmt.Printf("%s", err)
|
|
| 488 |
+ fmt.Fprintf(os.Stderr, "%s", err) |
|
| 489 | 489 |
} else {
|
| 490 | 490 |
fmt.Println(name) |
| 491 | 491 |
} |
| ... | ... |
@@ -506,7 +506,7 @@ func (cli *DockerCli) CmdStart(args ...string) error {
|
| 506 | 506 |
for _, name := range args {
|
| 507 | 507 |
_, _, err := cli.call("POST", "/containers/"+name+"/start", nil)
|
| 508 | 508 |
if err != nil {
|
| 509 |
- fmt.Printf("%s", err)
|
|
| 509 |
+ fmt.Fprintf(os.Stderr, "%s", err) |
|
| 510 | 510 |
} else {
|
| 511 | 511 |
fmt.Println(name) |
| 512 | 512 |
} |
| ... | ... |
@@ -515,29 +515,38 @@ func (cli *DockerCli) CmdStart(args ...string) error {
|
| 515 | 515 |
} |
| 516 | 516 |
|
| 517 | 517 |
func (cli *DockerCli) CmdInspect(args ...string) error {
|
| 518 |
- cmd := Subcmd("inspect", "CONTAINER|IMAGE", "Return low-level information on a container/image")
|
|
| 518 |
+ cmd := Subcmd("inspect", "CONTAINER|IMAGE [CONTAINER|IMAGE...]", "Return low-level information on a container/image")
|
|
| 519 | 519 |
if err := cmd.Parse(args); err != nil {
|
| 520 | 520 |
return nil |
| 521 | 521 |
} |
| 522 |
- if cmd.NArg() != 1 {
|
|
| 522 |
+ if cmd.NArg() < 1 {
|
|
| 523 | 523 |
cmd.Usage() |
| 524 | 524 |
return nil |
| 525 | 525 |
} |
| 526 |
- obj, _, err := cli.call("GET", "/containers/"+cmd.Arg(0)+"/json", nil)
|
|
| 527 |
- if err != nil {
|
|
| 528 |
- obj, _, err = cli.call("GET", "/images/"+cmd.Arg(0)+"/json", nil)
|
|
| 526 |
+ fmt.Printf("[")
|
|
| 527 |
+ for i, name := range args {
|
|
| 528 |
+ if i > 0 {
|
|
| 529 |
+ fmt.Printf(",")
|
|
| 530 |
+ } |
|
| 531 |
+ obj, _, err := cli.call("GET", "/containers/"+name+"/json", nil)
|
|
| 529 | 532 |
if err != nil {
|
| 530 |
- return err |
|
| 533 |
+ obj, _, err = cli.call("GET", "/images/"+name+"/json", nil)
|
|
| 534 |
+ if err != nil {
|
|
| 535 |
+ fmt.Fprintf(os.Stderr, "%s", err) |
|
| 536 |
+ continue |
|
| 537 |
+ } |
|
| 531 | 538 |
} |
| 532 |
- } |
|
| 533 | 539 |
|
| 534 |
- indented := new(bytes.Buffer) |
|
| 535 |
- if err = json.Indent(indented, obj, "", " "); err != nil {
|
|
| 536 |
- return err |
|
| 537 |
- } |
|
| 538 |
- if _, err := io.Copy(os.Stdout, indented); err != nil {
|
|
| 539 |
- return err |
|
| 540 |
+ indented := new(bytes.Buffer) |
|
| 541 |
+ if err = json.Indent(indented, obj, "", " "); err != nil {
|
|
| 542 |
+ fmt.Fprintf(os.Stderr, "%s", err) |
|
| 543 |
+ continue |
|
| 544 |
+ } |
|
| 545 |
+ if _, err := io.Copy(os.Stdout, indented); err != nil {
|
|
| 546 |
+ fmt.Fprintf(os.Stderr, "%s", err) |
|
| 547 |
+ } |
|
| 540 | 548 |
} |
| 549 |
+ fmt.Printf("]")
|
|
| 541 | 550 |
return nil |
| 542 | 551 |
} |
| 543 | 552 |
|