This is part of an effort to break apart the deprecated server/ package
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
| ... | ... |
@@ -129,6 +129,9 @@ func (daemon *Daemon) Install(eng *engine.Engine) error {
|
| 129 | 129 |
if err := eng.Register("stop", daemon.ContainerStop); err != nil {
|
| 130 | 130 |
return err |
| 131 | 131 |
} |
| 132 |
+ if err := eng.Register("start", daemon.ContainerStart); err != nil {
|
|
| 133 |
+ return err |
|
| 134 |
+ } |
|
| 132 | 135 |
return nil |
| 133 | 136 |
} |
| 134 | 137 |
|
| 135 | 138 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,68 @@ |
| 0 |
+package daemon |
|
| 1 |
+ |
|
| 2 |
+import ( |
|
| 3 |
+ "fmt" |
|
| 4 |
+ "os" |
|
| 5 |
+ "strings" |
|
| 6 |
+ |
|
| 7 |
+ "github.com/docker/docker/engine" |
|
| 8 |
+ "github.com/docker/docker/runconfig" |
|
| 9 |
+) |
|
| 10 |
+ |
|
| 11 |
+func (daemon *Daemon) ContainerStart(job *engine.Job) engine.Status {
|
|
| 12 |
+ if len(job.Args) < 1 {
|
|
| 13 |
+ return job.Errorf("Usage: %s container_id", job.Name)
|
|
| 14 |
+ } |
|
| 15 |
+ var ( |
|
| 16 |
+ name = job.Args[0] |
|
| 17 |
+ container = daemon.Get(name) |
|
| 18 |
+ ) |
|
| 19 |
+ |
|
| 20 |
+ if container == nil {
|
|
| 21 |
+ return job.Errorf("No such container: %s", name)
|
|
| 22 |
+ } |
|
| 23 |
+ |
|
| 24 |
+ if container.State.IsRunning() {
|
|
| 25 |
+ return job.Errorf("Container already started")
|
|
| 26 |
+ } |
|
| 27 |
+ |
|
| 28 |
+ // If no environment was set, then no hostconfig was passed. |
|
| 29 |
+ if len(job.Environ()) > 0 {
|
|
| 30 |
+ hostConfig := runconfig.ContainerHostConfigFromJob(job) |
|
| 31 |
+ if err := daemon.setHostConfig(container, hostConfig); err != nil {
|
|
| 32 |
+ return job.Error(err) |
|
| 33 |
+ } |
|
| 34 |
+ } |
|
| 35 |
+ if err := container.Start(); err != nil {
|
|
| 36 |
+ return job.Errorf("Cannot start container %s: %s", name, err)
|
|
| 37 |
+ } |
|
| 38 |
+ job.Eng.Job("log", "start", container.ID, daemon.Repositories().ImageName(container.Image)).Run()
|
|
| 39 |
+ |
|
| 40 |
+ return engine.StatusOK |
|
| 41 |
+} |
|
| 42 |
+ |
|
| 43 |
+func (daemon *Daemon) setHostConfig(container *Container, hostConfig *runconfig.HostConfig) error {
|
|
| 44 |
+ // Validate the HostConfig binds. Make sure that: |
|
| 45 |
+ // the source exists |
|
| 46 |
+ for _, bind := range hostConfig.Binds {
|
|
| 47 |
+ splitBind := strings.Split(bind, ":") |
|
| 48 |
+ source := splitBind[0] |
|
| 49 |
+ |
|
| 50 |
+ // ensure the source exists on the host |
|
| 51 |
+ _, err := os.Stat(source) |
|
| 52 |
+ if err != nil && os.IsNotExist(err) {
|
|
| 53 |
+ err = os.MkdirAll(source, 0755) |
|
| 54 |
+ if err != nil {
|
|
| 55 |
+ return fmt.Errorf("Could not create local directory '%s' for bind mount: %s!", source, err.Error())
|
|
| 56 |
+ } |
|
| 57 |
+ } |
|
| 58 |
+ } |
|
| 59 |
+ // Register any links from the host config before starting the container |
|
| 60 |
+ if err := daemon.RegisterLinks(container, hostConfig); err != nil {
|
|
| 61 |
+ return err |
|
| 62 |
+ } |
|
| 63 |
+ container.SetHostConfig(hostConfig) |
|
| 64 |
+ container.ToDisk() |
|
| 65 |
+ |
|
| 66 |
+ return nil |
|
| 67 |
+} |
| ... | ... |
@@ -408,65 +408,6 @@ func (srv *Server) ContainerDestroy(job *engine.Job) engine.Status {
|
| 408 | 408 |
return engine.StatusOK |
| 409 | 409 |
} |
| 410 | 410 |
|
| 411 |
-func (srv *Server) setHostConfig(container *daemon.Container, hostConfig *runconfig.HostConfig) error {
|
|
| 412 |
- // Validate the HostConfig binds. Make sure that: |
|
| 413 |
- // the source exists |
|
| 414 |
- for _, bind := range hostConfig.Binds {
|
|
| 415 |
- splitBind := strings.Split(bind, ":") |
|
| 416 |
- source := splitBind[0] |
|
| 417 |
- |
|
| 418 |
- // ensure the source exists on the host |
|
| 419 |
- _, err := os.Stat(source) |
|
| 420 |
- if err != nil && os.IsNotExist(err) {
|
|
| 421 |
- err = os.MkdirAll(source, 0755) |
|
| 422 |
- if err != nil {
|
|
| 423 |
- return fmt.Errorf("Could not create local directory '%s' for bind mount: %s!", source, err.Error())
|
|
| 424 |
- } |
|
| 425 |
- } |
|
| 426 |
- } |
|
| 427 |
- // Register any links from the host config before starting the container |
|
| 428 |
- if err := srv.daemon.RegisterLinks(container, hostConfig); err != nil {
|
|
| 429 |
- return err |
|
| 430 |
- } |
|
| 431 |
- container.SetHostConfig(hostConfig) |
|
| 432 |
- container.ToDisk() |
|
| 433 |
- |
|
| 434 |
- return nil |
|
| 435 |
-} |
|
| 436 |
- |
|
| 437 |
-func (srv *Server) ContainerStart(job *engine.Job) engine.Status {
|
|
| 438 |
- if len(job.Args) < 1 {
|
|
| 439 |
- return job.Errorf("Usage: %s container_id", job.Name)
|
|
| 440 |
- } |
|
| 441 |
- var ( |
|
| 442 |
- name = job.Args[0] |
|
| 443 |
- daemon = srv.daemon |
|
| 444 |
- container = daemon.Get(name) |
|
| 445 |
- ) |
|
| 446 |
- |
|
| 447 |
- if container == nil {
|
|
| 448 |
- return job.Errorf("No such container: %s", name)
|
|
| 449 |
- } |
|
| 450 |
- |
|
| 451 |
- if container.State.IsRunning() {
|
|
| 452 |
- return job.Errorf("Container already started")
|
|
| 453 |
- } |
|
| 454 |
- |
|
| 455 |
- // If no environment was set, then no hostconfig was passed. |
|
| 456 |
- if len(job.Environ()) > 0 {
|
|
| 457 |
- hostConfig := runconfig.ContainerHostConfigFromJob(job) |
|
| 458 |
- if err := srv.setHostConfig(container, hostConfig); err != nil {
|
|
| 459 |
- return job.Error(err) |
|
| 460 |
- } |
|
| 461 |
- } |
|
| 462 |
- if err := container.Start(); err != nil {
|
|
| 463 |
- return job.Errorf("Cannot start container %s: %s", name, err)
|
|
| 464 |
- } |
|
| 465 |
- srv.LogEvent("start", container.ID, daemon.Repositories().ImageName(container.Image))
|
|
| 466 |
- |
|
| 467 |
- return engine.StatusOK |
|
| 468 |
-} |
|
| 469 |
- |
|
| 470 | 411 |
func (srv *Server) ContainerWait(job *engine.Job) engine.Status {
|
| 471 | 412 |
if len(job.Args) != 1 {
|
| 472 | 413 |
return job.Errorf("Usage: %s", job.Name)
|
| ... | ... |
@@ -87,7 +87,6 @@ func InitServer(job *engine.Job) engine.Status {
|
| 87 | 87 |
|
| 88 | 88 |
for name, handler := range map[string]engine.Handler{
|
| 89 | 89 |
"restart": srv.ContainerRestart, |
| 90 |
- "start": srv.ContainerStart, |
|
| 91 | 90 |
"wait": srv.ContainerWait, |
| 92 | 91 |
"tag": srv.ImageTag, // FIXME merge with "image_tag" |
| 93 | 92 |
"resize": srv.ContainerResize, |