init.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // DEPRECATION NOTICE. PLEASE DO NOT ADD ANYTHING TO THIS FILE.
  2. //
  3. // For additional commments see server/server.go
  4. //
  5. package server
  6. import (
  7. "github.com/docker/docker/daemon"
  8. "github.com/docker/docker/daemonconfig"
  9. "github.com/docker/docker/engine"
  10. )
  11. func (srv *Server) handlerWrap(h engine.Handler) engine.Handler {
  12. return func(job *engine.Job) engine.Status {
  13. if !srv.IsRunning() {
  14. return job.Errorf("Server is not running")
  15. }
  16. srv.tasks.Add(1)
  17. defer srv.tasks.Done()
  18. return h(job)
  19. }
  20. }
  21. // jobInitApi runs the remote api server `srv` as a daemon,
  22. // Only one api server can run at the same time - this is enforced by a pidfile.
  23. // The signals SIGINT, SIGQUIT and SIGTERM are intercepted for cleanup.
  24. func InitServer(job *engine.Job) engine.Status {
  25. job.Logf("Creating server")
  26. cfg := daemonconfig.ConfigFromJob(job)
  27. srv, err := NewServer(job.Eng, cfg)
  28. if err != nil {
  29. return job.Error(err)
  30. }
  31. job.Eng.Hack_SetGlobalVar("httpapi.server", srv)
  32. job.Eng.Hack_SetGlobalVar("httpapi.daemon", srv.daemon)
  33. for name, handler := range map[string]engine.Handler{
  34. "build": srv.Build,
  35. "pull": srv.ImagePull,
  36. "push": srv.ImagePush,
  37. } {
  38. if err := job.Eng.Register(name, srv.handlerWrap(handler)); err != nil {
  39. return job.Error(err)
  40. }
  41. }
  42. // Install image-related commands from the image subsystem.
  43. // See `graph/service.go`
  44. if err := srv.daemon.Repositories().Install(job.Eng); err != nil {
  45. return job.Error(err)
  46. }
  47. // Install daemon-related commands from the daemon subsystem.
  48. // See `daemon/`
  49. if err := srv.daemon.Install(job.Eng); err != nil {
  50. return job.Error(err)
  51. }
  52. srv.SetRunning(true)
  53. return engine.StatusOK
  54. }
  55. func NewServer(eng *engine.Engine, config *daemonconfig.Config) (*Server, error) {
  56. daemon, err := daemon.NewDaemon(config, eng)
  57. if err != nil {
  58. return nil, err
  59. }
  60. srv := &Server{
  61. Eng: eng,
  62. daemon: daemon,
  63. pullingPool: make(map[string]chan struct{}),
  64. pushingPool: make(map[string]chan struct{}),
  65. }
  66. daemon.SetServer(srv)
  67. return srv, nil
  68. }