| 71 | } |
| 72 | |
| 73 | func (options runOptions) apply(project *types.Project) (*types.Project, error) { |
| 74 | if options.noDeps { |
| 75 | var err error |
| 76 | project, err = project.WithSelectedServices([]string{options.Service}, types.IgnoreDependencies) |
| 77 | if err != nil { |
| 78 | return nil, err |
| 79 | } |
| 80 | } |
| 81 | |
| 82 | target, err := project.GetService(options.Service) |
| 83 | if err != nil { |
| 84 | return nil, err |
| 85 | } |
| 86 | |
| 87 | target.Tty = !options.noTty |
| 88 | target.StdinOpen = options.interactive |
| 89 | |
| 90 | // --service-ports and --publish are incompatible |
| 91 | if !options.servicePorts { |
| 92 | if len(target.Ports) > 0 { |
| 93 | logrus.Debug("Running service without ports exposed as --service-ports=false") |
| 94 | } |
| 95 | target.Ports = []types.ServicePortConfig{} |
| 96 | for _, p := range options.publish { |
| 97 | config, err := types.ParsePortConfig(p) |
| 98 | if err != nil { |
| 99 | return nil, err |
| 100 | } |
| 101 | target.Ports = append(target.Ports, config...) |
| 102 | } |
| 103 | } |
| 104 | |
| 105 | for _, v := range options.volumes { |
| 106 | volume, err := format.ParseVolume(v) |
| 107 | if err != nil { |
| 108 | return nil, err |
| 109 | } |
| 110 | target.Volumes = append(target.Volumes, volume) |
| 111 | } |
| 112 | |
| 113 | for name := range project.Services { |
| 114 | if name == options.Service { |
| 115 | project.Services[name] = target |
| 116 | break |
| 117 | } |
| 118 | } |
| 119 | return project, nil |
| 120 | } |
| 121 | |
| 122 | func (options runOptions) getEnvironment(resolve func(string) (string, bool)) (types.Mapping, error) { |
| 123 | environment := types.NewMappingWithEquals(options.environment).Resolve(resolve).ToMapping() |