MCPcopy
hub / github.com/docker/compose / prepareRun

Method prepareRun

pkg/compose/run.go:122–214  ·  pkg/compose/run.go::composeService.prepareRun
(ctx context.Context, project *types.Project, opts api.RunOptions)

Source from the content-addressed store, hash-verified

120}
121
122func (s *composeService) prepareRun(ctx context.Context, project *types.Project, opts api.RunOptions) (prepareRunResult, error) {
123 // Temporary implementation of use_api_socket until we get actual support inside docker engine
124 project, err := s.useAPISocket(project)
125 if err != nil {
126 return prepareRunResult{}, err
127 }
128
129 err = Run(ctx, func(ctx context.Context) error {
130 return s.startDependencies(ctx, project, opts)
131 }, "run", s.events)
132 if err != nil {
133 return prepareRunResult{}, err
134 }
135
136 service, err := project.GetService(opts.Service)
137 if err != nil {
138 return prepareRunResult{}, err
139 }
140
141 applyRunOptions(project, &service, opts)
142
143 if err := s.stdin().CheckTty(opts.Interactive, service.Tty); err != nil {
144 return prepareRunResult{}, err
145 }
146
147 slug := stringid.GenerateRandomID()
148 if service.ContainerName == "" {
149 service.ContainerName = fmt.Sprintf("%[1]s%[4]s%[2]s%[4]srun%[4]s%[3]s", project.Name, service.Name, stringid.TruncateID(slug), api.Separator)
150 }
151 one := 1
152 service.Scale = &one
153 service.Restart = ""
154 if service.Deploy != nil {
155 service.Deploy.RestartPolicy = nil
156 }
157 service.CustomLabels = service.CustomLabels.
158 Add(api.SlugLabel, slug).
159 Add(api.OneoffLabel, "True")
160
161 // Only ensure image exists for the target service, dependencies were already handled by startDependencies
162 buildOpts := prepareBuildOptions(opts)
163 if err := s.ensureImagesExists(ctx, project, buildOpts, opts.QuietPull); err != nil { // all dependencies already checked, but might miss service img
164 return prepareRunResult{}, err
165 }
166
167 observedState, err := s.getContainers(ctx, project.Name, oneOffInclude, true)
168 if err != nil {
169 return prepareRunResult{}, err
170 }
171
172 if !opts.NoDeps {
173 if err := s.waitDependencies(ctx, project, service.Name, service.DependsOn, observedState, 0); err != nil {
174 return prepareRunResult{}, err
175 }
176 }
177 createOpts := createOptions{
178 AutoRemove: opts.AutoRemove,
179 AttachStdin: opts.Interactive,

Callers 1

RunOneOffContainerMethod · 0.95

Calls 15

useAPISocketMethod · 0.95
startDependenciesMethod · 0.95
stdinMethod · 0.95
ensureImagesExistsMethod · 0.95
getContainersMethod · 0.95
waitDependenciesMethod · 0.95
ensureModelsMethod · 0.95
createContainerMethod · 0.95
apiClientMethod · 0.95
injectSecretsMethod · 0.95
injectConfigsMethod · 0.95

Tested by

no test coverage detected