Skip to content

Commit 8e68914

Browse files
authored
fix: correctly parse image digest (#133)
1 parent c72a264 commit 8e68914

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

cli/docker.go

+10-3
Original file line numberDiff line numberDiff line change
@@ -399,14 +399,14 @@ func runDockerCVM(ctx context.Context, log slog.Logger, client dockerutil.Client
399399
if err != nil {
400400
return xerrors.Errorf("set oom score: %w", err)
401401
}
402-
ref, err := name.NewTag(flags.innerImage)
402+
ref, err := name.ParseReference(flags.innerImage)
403403
if err != nil {
404404
return xerrors.Errorf("parse ref: %w", err)
405405
}
406406

407407
var dockerAuth dockerutil.AuthConfig
408408
if flags.imagePullSecret != "" {
409-
dockerAuth, err = dockerutil.AuthConfigFromString(flags.imagePullSecret, ref.RegistryStr())
409+
dockerAuth, err = dockerutil.AuthConfigFromString(flags.imagePullSecret, ref.Context().RegistryStr())
410410
if err != nil {
411411
return xerrors.Errorf("parse auth config: %w", err)
412412
}
@@ -415,7 +415,7 @@ func runDockerCVM(ctx context.Context, log slog.Logger, client dockerutil.Client
415415
log.Info(ctx, "checking for docker config file", slog.F("path", flags.dockerConfig))
416416
if _, err := fs.Stat(flags.dockerConfig); err == nil {
417417
log.Info(ctx, "detected file", slog.F("image", flags.innerImage))
418-
dockerAuth, err = dockerutil.AuthConfigFromPath(flags.dockerConfig, ref.RegistryStr())
418+
dockerAuth, err = dockerutil.AuthConfigFromPath(flags.dockerConfig, ref.Context().RegistryStr())
419419
if err != nil && !xerrors.Is(err, os.ErrNotExist) {
420420
return xerrors.Errorf("auth config from file: %w", err)
421421
}
@@ -656,6 +656,13 @@ func runDockerCVM(ctx context.Context, log slog.Logger, client dockerutil.Client
656656
}
657657

658658
blog.Info("Creating workspace...")
659+
// If imgMeta.HasInit is true, we just use flags.boostrapScript as the entrypoint.
660+
// But if it's false, we need to run /sbin/init as the entrypoint.
661+
// We need to mount or run some exec command that injects a systemd service for starting
662+
// the coder agent.
663+
664+
// We need to check that if PID1 is systemd (or /sbin/init) that systemd propagates SIGTERM
665+
// to service units. If it doesn't then this solution doesn't help us.
659666

660667
// Create the inner container.
661668
containerID, err := dockerutil.CreateContainer(ctx, client, &dockerutil.ContainerConfig{

cli/docker_test.go

+5
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,11 @@ func TestDocker(t *testing.T) {
110110
image: "gcr.io/ubuntu:24.04",
111111
success: true,
112112
},
113+
{
114+
name: "RegistryRepositorySha",
115+
image: "gcr.io/images/helloworld@sha256:13e101dd511a26a2147e123456bdff5845c9461aaa53d856845745b063001234",
116+
success: true,
117+
},
113118
}
114119

115120
for _, tc := range testcases {

0 commit comments

Comments
 (0)