Skip to content

Commit b49bd7c

Browse files
authored
Merge pull request #9179 from ndeloof/no_build_image
as --no-build is set, set service image to default image name
2 parents 236cd0c + abf5f73 commit b49bd7c

File tree

7 files changed

+27
-20
lines changed

7 files changed

+27
-20
lines changed

cmd/compose/create.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,9 @@ func (opts createOptions) Apply(project *types.Project) {
126126
if opts.noBuild {
127127
for i, service := range project.Services {
128128
service.Build = nil
129+
if service.Image == "" {
130+
service.Image = api.GetImageNameOrDefault(service, project.Name)
131+
}
129132
project.Services[i] = service
130133
}
131134
}

pkg/api/api.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,3 +445,12 @@ const (
445445
// UserCancel user cancelled compose up, we are stopping containers
446446
UserCancel
447447
)
448+
449+
// GetImageNameOrDefault computes the default image name for a service, used to tag built images
450+
func GetImageNameOrDefault(service types.ServiceConfig, projectName string) string {
451+
imageName := service.Image
452+
if imageName == "" {
453+
imageName = projectName + "_" + service.Name
454+
}
455+
return imageName
456+
}

pkg/compose/build.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func (s *composeService) build(ctx context.Context, project *types.Project, opti
6464
if service.Build == nil {
6565
continue
6666
}
67-
imageName := getImageName(service, project.Name)
67+
imageName := api.GetImageNameOrDefault(service, project.Name)
6868
imagesToBuild = append(imagesToBuild, imageName)
6969
buildOptions, err := s.toBuildOptions(project, service, imageName, options.SSHs)
7070
if err != nil {
@@ -135,7 +135,7 @@ func (s *composeService) ensureImagesExists(ctx context.Context, project *types.
135135
}
136136
// set digest as com.docker.compose.image label so we can detect outdated containers
137137
for i, service := range project.Services {
138-
image := getImageName(service, project.Name)
138+
image := api.GetImageNameOrDefault(service, project.Name)
139139
digest, ok := images[image]
140140
if ok {
141141
if project.Services[i].Labels == nil {
@@ -154,7 +154,7 @@ func (s *composeService) getBuildOptions(project *types.Project, images map[stri
154154
if service.Image == "" && service.Build == nil {
155155
return nil, fmt.Errorf("invalid service %q. Must specify either image or build", service.Name)
156156
}
157-
imageName := getImageName(service, project.Name)
157+
imageName := api.GetImageNameOrDefault(service, project.Name)
158158
_, localImagePresent := images[imageName]
159159

160160
if service.Build != nil {
@@ -176,7 +176,7 @@ func (s *composeService) getBuildOptions(project *types.Project, images map[stri
176176
func (s *composeService) getLocalImagesDigests(ctx context.Context, project *types.Project) (map[string]string, error) {
177177
var imageNames []string
178178
for _, s := range project.Services {
179-
imgName := getImageName(s, project.Name)
179+
imgName := api.GetImageNameOrDefault(s, project.Name)
180180
if !utils.StringContains(imageNames, imgName) {
181181
imageNames = append(imageNames, imgName)
182182
}
@@ -191,7 +191,7 @@ func (s *composeService) getLocalImagesDigests(ctx context.Context, project *typ
191191
}
192192

193193
for i := range project.Services {
194-
imgName := getImageName(project.Services[i], project.Name)
194+
imgName := api.GetImageNameOrDefault(project.Services[i], project.Name)
195195
digest, ok := images[imgName]
196196
if ok {
197197
project.Services[i].CustomLabels.Add(api.ImageDigestLabel, digest)

pkg/compose/build_classic.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"github.com/compose-spec/compose-go/types"
3030
buildx "github.com/docker/buildx/build"
3131
"github.com/docker/cli/cli/command/image/build"
32+
"github.com/docker/compose/v2/pkg/api"
3233
dockertypes "github.com/docker/docker/api/types"
3334
"github.com/docker/docker/cli"
3435
"github.com/docker/docker/pkg/archive"
@@ -45,7 +46,7 @@ func (s *composeService) doBuildClassic(ctx context.Context, project *types.Proj
4546
var nameDigests = make(map[string]string)
4647
var errs error
4748
err := project.WithServices(nil, func(service types.ServiceConfig) error {
48-
imageName := getImageName(service, project.Name)
49+
imageName := api.GetImageNameOrDefault(service, project.Name)
4950
o, ok := opts[imageName]
5051
if !ok {
5152
return nil

pkg/compose/create.go

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -227,14 +227,6 @@ func (s *composeService) ensureProjectVolumes(ctx context.Context, project *type
227227
return nil
228228
}
229229

230-
func getImageName(service types.ServiceConfig, projectName string) string {
231-
imageName := service.Image
232-
if imageName == "" {
233-
imageName = projectName + "_" + service.Name
234-
}
235-
return imageName
236-
}
237-
238230
func (s *composeService) getCreateOptions(ctx context.Context, p *types.Project, service types.ServiceConfig,
239231
number int, inherit *moby.Container, autoRemove bool, attachStdin bool) (*container.Config, *container.HostConfig, *network.NetworkingConfig, error) {
240232

@@ -279,7 +271,7 @@ func (s *composeService) getCreateOptions(ctx context.Context, p *types.Project,
279271
AttachStderr: true,
280272
AttachStdout: true,
281273
Cmd: runCmd,
282-
Image: getImageName(service, p.Name),
274+
Image: api.GetImageNameOrDefault(service, p.Name),
283275
WorkingDir: service.WorkingDir,
284276
Entrypoint: entrypoint,
285277
NetworkDisabled: service.NetworkMode == "disabled",
@@ -712,7 +704,7 @@ func (s *composeService) buildContainerVolumes(ctx context.Context, p types.Proj
712704
inherit *moby.Container) (map[string]struct{}, []string, []mount.Mount, error) {
713705
var mounts = []mount.Mount{}
714706

715-
image := getImageName(service, p.Name)
707+
image := api.GetImageNameOrDefault(service, p.Name)
716708
imgInspect, _, err := s.apiClient().ImageInspectWithRaw(ctx, image)
717709
if err != nil {
718710
return nil, nil, nil, err

pkg/compose/create_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ import (
2222
"sort"
2323
"testing"
2424

25-
composetypes "github.com/compose-spec/compose-go/types"
2625
"github.com/docker/compose/v2/pkg/api"
26+
27+
composetypes "github.com/compose-spec/compose-go/types"
2728
moby "github.com/docker/docker/api/types"
2829
mountTypes "github.com/docker/docker/api/types/mount"
30+
2931
"gotest.tools/v3/assert"
3032
)
3133

@@ -77,8 +79,8 @@ func TestBuildVolumeMount(t *testing.T) {
7779
}
7880

7981
func TestServiceImageName(t *testing.T) {
80-
assert.Equal(t, getImageName(composetypes.ServiceConfig{Image: "myImage"}, "myProject"), "myImage")
81-
assert.Equal(t, getImageName(composetypes.ServiceConfig{Name: "aService"}, "myProject"), "myProject_aService")
82+
assert.Equal(t, api.GetImageNameOrDefault(composetypes.ServiceConfig{Image: "myImage"}, "myProject"), "myImage")
83+
assert.Equal(t, api.GetImageNameOrDefault(composetypes.ServiceConfig{Name: "aService"}, "myProject"), "myProject_aService")
8284
}
8385

8486
func TestPrepareNetworkLabels(t *testing.T) {

pkg/compose/down.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ func (s *composeService) getServiceImages(options api.DownOptions, project *type
195195
continue
196196
}
197197
if image == "" {
198-
image = getImageName(service, project.Name)
198+
image = api.GetImageNameOrDefault(service, project.Name)
199199
}
200200
images[image] = struct{}{}
201201
}

0 commit comments

Comments
 (0)