@@ -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 {
0 commit comments