code: func dispatchExpose(d dispatchRequest, c *instructions.ExposeCommand, envs []string) error {
  	// custom multi word expansion
  	// expose $FOO with FOO="80 443" is expanded as EXPOSE [80,443]. This is the only command supporting word to words expansion
  	// so the word processing has been de-generalized
  	ports := []string{}
  	for _, p := range c.Ports {
  		ps, err := d.shlex.ProcessWords(p, envs)
  		if err != nil {
  			return err
  		}
  		ports = append(ports, ps...)
  	}
  	c.Ports = ports
  
  	ps, _, err := nat.ParsePortSpecs(ports)
  	if err != nil {
  		return err
  	}
  
  	if d.state.runConfig.ExposedPorts == nil {
  		d.state.runConfig.ExposedPorts = make(nat.PortSet)
  	}
  	for p := range ps {
  		d.state.runConfig.ExposedPorts[p] = struct{}{}
  	}
  
  	return d.builder.commit(d.state, "EXPOSE "+strings.Join(c.Ports, " "))
  }
docs: // EXPOSE 6667/tcp 7000/tcp
  //
  // Expose ports for links and port mappings. This all ends up in
  // req.runConfig.ExposedPorts for runconfig.
  //