@@ -190,39 +190,17 @@ func (s *composeService) prepareRun(ctx context.Context, project *types.Project,
190190 return prepareRunResult {}, err
191191 }
192192
193- createOpts := createOptions {
194- AutoRemove : opts .AutoRemove ,
195- AttachStdin : opts .Interactive ,
196- UseNetworkAliases : opts .UseNetworkAliases ,
197- Labels : mergeLabels (target .Labels , target .CustomLabels ),
198- }
199-
200- eventName := "Container " + target .ContainerName
201- s .events .On (creatingEvent (eventName ))
202- created , err := s .createMobyContainer (ctx , project , target .Name , & target .ContainerSpec , nil , target .ContainerName , - 1 , nil , createOpts )
203- if err != nil {
204- if ctx .Err () == nil {
205- s .events .On (api.Resource {
206- ID : eventName ,
207- Status : api .Error ,
208- Text : err .Error (),
209- })
210- }
211- return prepareRunResult {}, err
212- }
213- s .events .On (createdEvent (eventName ))
214-
215- inspect , err := s .apiClient ().ContainerInspect (ctx , created .ID , client.ContainerInspectOptions {})
193+ created , err := s .createOneOffContainer (ctx , project , target , opts )
216194 if err != nil {
217195 return prepareRunResult {}, err
218196 }
219197
220- err = s .injectSecrets (ctx , project , target .Name , & target .ContainerSpec , inspect . Container .ID )
198+ err = s .injectSecrets (ctx , project , target .Name , & target .ContainerSpec , created .ID )
221199 if err != nil {
222200 return prepareRunResult {containerID : created .ID }, err
223201 }
224202
225- err = s .injectConfigs (ctx , project , target .Name , & target .ContainerSpec , inspect . Container .ID )
203+ err = s .injectConfigs (ctx , project , target .Name , & target .ContainerSpec , created .ID )
226204 return prepareRunResult {
227205 containerID : created .ID ,
228206 target : target ,
@@ -247,6 +225,36 @@ func resolveRunTarget(project *types.Project, opts api.RunOptions) (runTarget, e
247225 return runTarget {Name : service .Name , ContainerSpec : service .ContainerSpec }, nil
248226}
249227
228+ func (s * composeService ) createOneOffContainer (ctx context.Context , project * types.Project , target runTarget , opts api.RunOptions ) (container.Summary , error ) {
229+ hash , err := ContainerSpecHash (target .ContainerSpec )
230+ if err != nil {
231+ return container.Summary {}, err
232+ }
233+ createOpts := createOptions {
234+ AutoRemove : opts .AutoRemove ,
235+ AttachStdin : opts .Interactive ,
236+ UseNetworkAliases : opts .UseNetworkAliases ,
237+ Labels : mergeLabels (target .Labels , target .CustomLabels ).
238+ Add (api .ConfigHashLabel , hash ),
239+ }
240+
241+ eventName := "Container " + target .ContainerName
242+ s .events .On (creatingEvent (eventName ))
243+ created , err := s .createMobyContainer (ctx , project , target .Name , & target .ContainerSpec , nil , target .ContainerName , - 1 , nil , createOpts )
244+ if err != nil {
245+ if ctx .Err () == nil {
246+ s .events .On (api.Resource {
247+ ID : eventName ,
248+ Status : api .Error ,
249+ Text : err .Error (),
250+ })
251+ }
252+ return container.Summary {}, err
253+ }
254+ s .events .On (createdEvent (eventName ))
255+ return created , nil
256+ }
257+
250258func prepareBuildOptions (opts api.RunOptions ) * api.BuildOptions {
251259 if opts .Build == nil {
252260 return nil
0 commit comments