code: func (p *Project) CreateService(name string) (Service, error) {
  	existing, ok := p.GetServiceConfig(name)
  	if !ok {
  		return nil, fmt.Errorf("Failed to find service: %s", name)
  	}
  
  	// Copy because we are about to modify the environment
  	config := *existing
  
  	if p.context.EnvironmentLookup != nil {
  		parsedEnv := make([]string, 0, len(config.Environment))
  
  		for _, env := range config.Environment {
  			parts := strings.SplitN(env, "=", 2)
  			if len(parts) > 1 {
  				parsedEnv = append(parsedEnv, env)
  				continue
  			} else {
  				env = parts[0]
  			}
  
  			for _, value := range p.context.EnvironmentLookup.Lookup(env, &config) {
  				parsedEnv = append(parsedEnv, value)
  			}
  		}
  
  		config.Environment = parsedEnv
  
  		// check the environment for extra build Args that are set but not given a value in the compose file
  		for arg, value := range config.Build.Args {
  			if *value == "\x00" {
  				envValue := p.context.EnvironmentLookup.Lookup(arg, &config)
  				// depending on what we get back we do different things
  				switch l := len(envValue); l {
  				case 0:
  					delete(config.Build.Args, arg)
  				case 1:
  					parts := strings.SplitN(envValue[0], "=", 2)
  					config.Build.Args[parts[0]] = &parts[1]
  				default:
  					return nil, fmt.Errorf("tried to set Build Arg %#v to multi-value %#v", arg, envValue)
  				}
  			}
  		}
  	}
  
  	return p.context.ServiceFactory.Create(p, name, &config)
  }
docs: // CreateService creates a service with the specified name based. If there
  // is no config in the project for this service, it will return an error.