image can be set to a local ID, that isn't a valid docker ref

Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
Nicolas De Loof 2025-01-08 18:13:53 +01:00 committed by Guillaume Lours
parent a351585024
commit fa39503469
3 changed files with 24 additions and 6 deletions

View File

@ -94,12 +94,12 @@ func (s *composeService) getImageSummaries(ctx context.Context, repoTags []strin
tag := "" tag := ""
repository := "" repository := ""
ref, err := reference.ParseDockerRef(repoTag) ref, err := reference.ParseDockerRef(repoTag)
if err != nil { if err == nil {
return err // ParseDockerRef will reject a local image ID
} repository = reference.FamiliarName(ref)
repository = reference.FamiliarName(ref) if tagged, ok := ref.(reference.Tagged); ok {
if tagged, ok := ref.(reference.Tagged); ok { tag = tagged.Tag()
tag = tagged.Tag() }
} }
l.Lock() l.Lock()
summary[repoTag] = api.ImageSummary{ summary[repoTag] = api.ImageSummary{

View File

@ -0,0 +1,3 @@
services:
test:
image: ${ID:?ID variable must be set}

View File

@ -191,3 +191,18 @@ func TestUpProfile(t *testing.T) {
assert.Assert(t, strings.Contains(res.Combined(), `Container foo_c Created`), res.Combined()) assert.Assert(t, strings.Contains(res.Combined(), `Container foo_c Created`), res.Combined())
assert.Assert(t, !strings.Contains(res.Combined(), `Container bar_c Created`), res.Combined()) assert.Assert(t, !strings.Contains(res.Combined(), `Container bar_c Created`), res.Combined())
} }
func TestUpImageID(t *testing.T) {
c := NewCLI(t)
const projectName = "compose-e2e-up-image-id"
digest := strings.TrimSpace(c.RunDockerCmd(t, "image", "inspect", "alpine", "-f", "{{ .ID }}").Stdout())
_, id, _ := strings.Cut(digest, ":")
t.Cleanup(func() {
c.RunDockerComposeCmd(t, "--project-name", projectName, "down", "-v")
})
c = NewCLI(t, WithEnv(fmt.Sprintf("ID=%s", id)))
c.RunDockerComposeCmd(t, "-f", "./fixtures/simple-composefile/id.yaml", "--project-name", projectName, "up")
}